using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Channels; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; namespace MediaBrowser.Controller.Providers { public class ItemLookupInfo : IHasProviderIds { /// /// Gets or sets the name. /// /// The name. public string Name { get; set; } /// /// Gets or sets the metadata language. /// /// The metadata language. public string MetadataLanguage { get; set; } /// /// Gets or sets the metadata country code. /// /// The metadata country code. public string MetadataCountryCode { get; set; } /// /// Gets or sets the provider ids. /// /// The provider ids. public Dictionary ProviderIds { get; set; } /// /// Gets or sets the year. /// /// The year. public int? Year { get; set; } public int? IndexNumber { get; set; } public int? ParentIndexNumber { get; set; } public ItemLookupInfo() { ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); } } public interface IHasLookupInfo where TLookupInfoType : ItemLookupInfo, new() { TLookupInfoType GetLookupInfo(); } public class ArtistInfo : ItemLookupInfo { public List SongInfos { get; set; } public ArtistInfo() { SongInfos = new List(); } } public class AlbumInfo : ItemLookupInfo { /// /// Gets or sets the album artist. /// /// The album artist. public List AlbumArtists { get; set; } /// /// Gets or sets the artist provider ids. /// /// The artist provider ids. public Dictionary ArtistProviderIds { get; set; } public List SongInfos { get; set; } public AlbumInfo() { ArtistProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); SongInfos = new List(); AlbumArtists = new List(); } } public class GameInfo : ItemLookupInfo { /// /// Gets or sets the game system. /// /// The game system. public string GameSystem { get; set; } } public class GameSystemInfo : ItemLookupInfo { /// /// Gets or sets the path. /// /// The path. public string Path { get; set; } } public class EpisodeInfo : ItemLookupInfo, IHasIdentities { private List _identities = new List(); public Dictionary SeriesProviderIds { get; set; } public int? IndexNumberEnd { get; set; } public int? AnimeSeriesIndex { get; set; } public EpisodeInfo() { SeriesProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); } public IEnumerable Identities { get { return _identities; } } public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) { var identifier = new ItemIdentifier(); _identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList(); } } public class EpisodeIdentity : IItemIdentity { public string Type { get; set; } public string SeriesId { get; set; } public int? SeasonIndex { get; set; } public int IndexNumber { get; set; } public int? IndexNumberEnd { get; set; } } public class SongInfo : ItemLookupInfo { public List AlbumArtists { get; set; } public string Album { get; set; } public List Artists { get; set; } public SongInfo() { Artists = new List(); AlbumArtists = new List(); } } public class SeriesInfo : ItemLookupInfo, IHasIdentities { private List _identities = new List(); public int? AnimeSeriesIndex { get; set; } public IEnumerable Identities { get { return _identities; } } public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) { var identifier = new ItemIdentifier(); _identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList(); } } public class SeriesIdentity : IItemIdentity { public string Type { get; set; } public string Id { get; set; } } public class PersonLookupInfo : ItemLookupInfo { } public class MovieInfo : ItemLookupInfo { } public class BoxSetInfo : ItemLookupInfo { } public class MusicVideoInfo : ItemLookupInfo { } public class TrailerInfo : ItemLookupInfo { public bool IsLocalTrailer { get; set; } } public class BookInfo : ItemLookupInfo { public string SeriesName { get; set; } } public class SeasonInfo : ItemLookupInfo, IHasIdentities { private List _identities = new List(); public Dictionary SeriesProviderIds { get; set; } public int? AnimeSeriesIndex { get; set; } public SeasonInfo() { SeriesProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); } public IEnumerable Identities { get { return _identities; } } public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) { var identifier = new ItemIdentifier(); _identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList(); } } public class SeasonIdentity : IItemIdentity { public string Type { get; set; } public string SeriesId { get; set; } public int SeasonIndex { get; set; } } public class ChannelItemLookupInfo : ItemLookupInfo { public ChannelMediaContentType ContentType { get; set; } public ExtraType ExtraType { get; set; } } }