157 lines
4.2 KiB
C#
157 lines
4.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace MediaBrowser.Model.Entities
|
|
{
|
|
public abstract class BaseItem : BaseEntity, IHasProviderIds
|
|
{
|
|
/// <summary>
|
|
/// Goes up the tree to find the virtual folder parent
|
|
/// </summary>
|
|
public VirtualFolder VirtualFolder
|
|
{
|
|
get
|
|
{
|
|
var vf = this as VirtualFolder;
|
|
|
|
if (vf != null)
|
|
{
|
|
return vf;
|
|
}
|
|
|
|
if (Parent != null)
|
|
{
|
|
return Parent.VirtualFolder;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public string SortName { get; set; }
|
|
|
|
/// <summary>
|
|
/// When the item first debuted. For movies this could be premiere date, episodes would be first aired
|
|
/// </summary>
|
|
public DateTime? PremiereDate { get; set; }
|
|
|
|
public string Path { get; set; }
|
|
|
|
public Folder Parent { get; set; }
|
|
|
|
public string LogoImagePath { get; set; }
|
|
|
|
public string ArtImagePath { get; set; }
|
|
|
|
public string ThumbnailImagePath { get; set; }
|
|
|
|
public string BannerImagePath { get; set; }
|
|
|
|
public IEnumerable<string> BackdropImagePaths { get; set; }
|
|
|
|
public string OfficialRating { get; set; }
|
|
|
|
public string CustomRating { get; set; }
|
|
|
|
public string Language { get; set; }
|
|
public string Overview { get; set; }
|
|
public List<string> Taglines { get; set; }
|
|
|
|
public List<PersonInfo> People { get; set; }
|
|
|
|
public List<string> Studios { get; set; }
|
|
|
|
public List<string> Genres { get; set; }
|
|
|
|
public string DisplayMediaType { get; set; }
|
|
|
|
public float? UserRating { get; set; }
|
|
public long? RunTimeTicks { get; set; }
|
|
|
|
public string AspectRatio { get; set; }
|
|
public int? ProductionYear { get; set; }
|
|
|
|
/// <summary>
|
|
/// If the item is part of a series, this is it's number in the series.
|
|
/// This could be episode number, album track number, etc.
|
|
/// </summary>
|
|
public int? IndexNumber { get; set; }
|
|
|
|
/// <summary>
|
|
/// For an episode this could be the season number, or for a song this could be the disc number.
|
|
/// </summary>
|
|
public int? ParentIndexNumber { get; set; }
|
|
|
|
public IEnumerable<Video> LocalTrailers { get; set; }
|
|
|
|
public string TrailerUrl { get; set; }
|
|
|
|
public Dictionary<string, string> ProviderIds { get; set; }
|
|
|
|
public Dictionary<Guid, UserItemData> UserData { get; set; }
|
|
|
|
public UserItemData GetUserData(User user)
|
|
{
|
|
if (UserData == null || !UserData.ContainsKey(user.Id))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return UserData[user.Id];
|
|
}
|
|
|
|
public void AddUserData(User user, UserItemData data)
|
|
{
|
|
if (UserData == null)
|
|
{
|
|
UserData = new Dictionary<Guid, UserItemData>();
|
|
}
|
|
|
|
UserData[user.Id] = data;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Determines if a given user has access to this item
|
|
/// </summary>
|
|
internal bool IsParentalAllowed(User user)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Finds an item by ID, recursively
|
|
/// </summary>
|
|
public virtual BaseItem FindItemById(Guid id)
|
|
{
|
|
if (Id == id)
|
|
{
|
|
return this;
|
|
}
|
|
|
|
if (LocalTrailers != null)
|
|
{
|
|
return LocalTrailers.FirstOrDefault(i => i.Id == id);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public virtual bool IsFolder
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Determines if the item is considered new based on user settings
|
|
/// </summary>
|
|
public bool IsRecentlyAdded(User user)
|
|
{
|
|
return (DateTime.Now - DateCreated).TotalDays < user.RecentItemDays;
|
|
}
|
|
}
|
|
}
|