From caadb4f374d490bc012218c8bbad94e9aff6d53b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 13 Mar 2015 15:37:19 -0400 Subject: [PATCH] update default image providers --- .../MediaBrowser.Controller.csproj | 45 ++++ .../Providers/AlbumInfo.cs | 28 +++ .../Providers/ArtistInfo.cs | 14 ++ MediaBrowser.Controller/Providers/BookInfo.cs | 7 + .../Providers/BoxSetInfo.cs | 7 + .../Providers/ChannelItemLookupInfo.cs | 11 + .../Providers/DirectoryService.cs | 10 - .../Providers/DynamicImageInfo.cs | 10 + .../Providers/DynamicImageResponse.cs | 35 +++ .../Providers/EpisodeIdentity.cs | 12 + .../Providers/EpisodeInfo.cs | 34 +++ .../Providers/ExtraInfo.cs | 15 ++ .../Providers/ExtraSource.cs | 9 + MediaBrowser.Controller/Providers/GameInfo.cs | 11 + .../Providers/GameSystemInfo.cs | 11 + .../Providers/ICustomMetadataProvider.cs | 5 - .../Providers/IDirectoryService.cs | 15 ++ .../Providers/IDynamicImageProvider.cs | 27 +++ .../Providers/IExtrasProvider.cs | 19 -- .../Providers/IHasChangeMonitor.cs | 12 - .../Providers/IHasIdentities.cs | 14 ++ .../Providers/IHasItemChangeMonitor.cs | 16 ++ .../Providers/IHasLookupInfo.cs | 8 + .../Providers/IHasOrder.cs | 7 + .../Providers/IImageFileSaver.cs | 20 ++ .../Providers/IImageSaver.cs | 20 +- .../Providers/IItemIdentity.cs | 7 + .../Providers/IItemIdentityConverter.cs | 4 + .../Providers/IItemIdentityProvider.cs | 4 + .../Providers/ILocalImageFileProvider.cs | 10 + .../Providers/ILocalImageProvider.cs | 75 +------ .../Providers/ILocalMetadataProvider.cs | 27 --- .../Providers/IMetadataProvider.cs | 11 - .../Providers/IPreRefreshProvider.cs | 7 + .../Providers/IRemoteMetadataProvider.cs | 31 +-- .../Providers/IRemoteSearchProvider.cs | 17 ++ .../Providers/ISeriesOrderManager.cs | 11 - .../Providers/ISeriesOrderProvider.cs | 10 + .../Providers/ImageRefreshMode.cs | 25 +++ .../Providers/ImageRefreshOptions.cs | 29 +++ .../Providers/ItemIdentities.cs | 21 +- MediaBrowser.Controller/Providers/ItemInfo.cs | 9 + .../Providers/ItemLookupInfo.cs | 206 +----------------- .../Providers/LocalImageInfo.cs | 11 + .../Providers/LocalMetadataResult.cs | 24 ++ .../Providers/MetadataRefreshMode.cs | 25 +++ .../Providers/MetadataRefreshOptions.cs | 74 +------ .../Providers/MetadataResult.cs | 8 + .../Providers/MovieInfo.cs | 7 + .../Providers/MusicVideoInfo.cs | 7 + .../Providers/PersonLookupInfo.cs | 7 + .../Providers/RemoteSearchQuery.cs | 19 ++ .../Providers/SeasonIdentity.cs | 11 + .../Providers/SeasonInfo.cs | 32 +++ .../Providers/SeriesIdentity.cs | 9 + .../Providers/SeriesInfo.cs | 25 +++ .../Providers/SeriesOrderTypes.cs | 7 + MediaBrowser.Controller/Providers/SongInfo.cs | 17 ++ .../Providers/TrailerInfo.cs | 7 + .../FolderImages/DefaultImageProvider.cs | 13 +- .../Manager/ItemImageProvider.cs | 6 +- .../Photos/BaseDynamicImageProvider.cs | 103 ++++----- .../Photos/DynamicImageProvider.cs | 2 +- 63 files changed, 756 insertions(+), 584 deletions(-) create mode 100644 MediaBrowser.Controller/Providers/AlbumInfo.cs create mode 100644 MediaBrowser.Controller/Providers/ArtistInfo.cs create mode 100644 MediaBrowser.Controller/Providers/BookInfo.cs create mode 100644 MediaBrowser.Controller/Providers/BoxSetInfo.cs create mode 100644 MediaBrowser.Controller/Providers/ChannelItemLookupInfo.cs create mode 100644 MediaBrowser.Controller/Providers/DynamicImageInfo.cs create mode 100644 MediaBrowser.Controller/Providers/DynamicImageResponse.cs create mode 100644 MediaBrowser.Controller/Providers/EpisodeIdentity.cs create mode 100644 MediaBrowser.Controller/Providers/EpisodeInfo.cs create mode 100644 MediaBrowser.Controller/Providers/ExtraInfo.cs create mode 100644 MediaBrowser.Controller/Providers/ExtraSource.cs create mode 100644 MediaBrowser.Controller/Providers/GameInfo.cs create mode 100644 MediaBrowser.Controller/Providers/GameSystemInfo.cs create mode 100644 MediaBrowser.Controller/Providers/IDirectoryService.cs create mode 100644 MediaBrowser.Controller/Providers/IDynamicImageProvider.cs create mode 100644 MediaBrowser.Controller/Providers/IHasIdentities.cs create mode 100644 MediaBrowser.Controller/Providers/IHasItemChangeMonitor.cs create mode 100644 MediaBrowser.Controller/Providers/IHasLookupInfo.cs create mode 100644 MediaBrowser.Controller/Providers/IHasOrder.cs create mode 100644 MediaBrowser.Controller/Providers/IImageFileSaver.cs create mode 100644 MediaBrowser.Controller/Providers/IItemIdentity.cs create mode 100644 MediaBrowser.Controller/Providers/IItemIdentityConverter.cs create mode 100644 MediaBrowser.Controller/Providers/IItemIdentityProvider.cs create mode 100644 MediaBrowser.Controller/Providers/ILocalImageFileProvider.cs create mode 100644 MediaBrowser.Controller/Providers/IPreRefreshProvider.cs create mode 100644 MediaBrowser.Controller/Providers/IRemoteSearchProvider.cs create mode 100644 MediaBrowser.Controller/Providers/ISeriesOrderProvider.cs create mode 100644 MediaBrowser.Controller/Providers/ImageRefreshMode.cs create mode 100644 MediaBrowser.Controller/Providers/ImageRefreshOptions.cs create mode 100644 MediaBrowser.Controller/Providers/ItemInfo.cs create mode 100644 MediaBrowser.Controller/Providers/LocalImageInfo.cs create mode 100644 MediaBrowser.Controller/Providers/LocalMetadataResult.cs create mode 100644 MediaBrowser.Controller/Providers/MetadataRefreshMode.cs create mode 100644 MediaBrowser.Controller/Providers/MetadataResult.cs create mode 100644 MediaBrowser.Controller/Providers/MovieInfo.cs create mode 100644 MediaBrowser.Controller/Providers/MusicVideoInfo.cs create mode 100644 MediaBrowser.Controller/Providers/PersonLookupInfo.cs create mode 100644 MediaBrowser.Controller/Providers/RemoteSearchQuery.cs create mode 100644 MediaBrowser.Controller/Providers/SeasonIdentity.cs create mode 100644 MediaBrowser.Controller/Providers/SeasonInfo.cs create mode 100644 MediaBrowser.Controller/Providers/SeriesIdentity.cs create mode 100644 MediaBrowser.Controller/Providers/SeriesInfo.cs create mode 100644 MediaBrowser.Controller/Providers/SeriesOrderTypes.cs create mode 100644 MediaBrowser.Controller/Providers/SongInfo.cs create mode 100644 MediaBrowser.Controller/Providers/TrailerInfo.cs diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 704637773e..678d7841c6 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -247,22 +247,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MediaBrowser.Controller/Providers/AlbumInfo.cs b/MediaBrowser.Controller/Providers/AlbumInfo.cs new file mode 100644 index 0000000000..b884774094 --- /dev/null +++ b/MediaBrowser.Controller/Providers/AlbumInfo.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Providers +{ + 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(); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ArtistInfo.cs b/MediaBrowser.Controller/Providers/ArtistInfo.cs new file mode 100644 index 0000000000..8a4abd5c68 --- /dev/null +++ b/MediaBrowser.Controller/Providers/ArtistInfo.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Providers +{ + public class ArtistInfo : ItemLookupInfo + { + public List SongInfos { get; set; } + + public ArtistInfo() + { + SongInfos = new List(); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/BookInfo.cs b/MediaBrowser.Controller/Providers/BookInfo.cs new file mode 100644 index 0000000000..52519bcb04 --- /dev/null +++ b/MediaBrowser.Controller/Providers/BookInfo.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public class BookInfo : ItemLookupInfo + { + public string SeriesName { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/BoxSetInfo.cs b/MediaBrowser.Controller/Providers/BoxSetInfo.cs new file mode 100644 index 0000000000..f604231de4 --- /dev/null +++ b/MediaBrowser.Controller/Providers/BoxSetInfo.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public class BoxSetInfo : ItemLookupInfo + { + + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ChannelItemLookupInfo.cs b/MediaBrowser.Controller/Providers/ChannelItemLookupInfo.cs new file mode 100644 index 0000000000..6c972f3bf5 --- /dev/null +++ b/MediaBrowser.Controller/Providers/ChannelItemLookupInfo.cs @@ -0,0 +1,11 @@ +using MediaBrowser.Model.Channels; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public class ChannelItemLookupInfo : ItemLookupInfo + { + public ChannelMediaContentType ContentType { get; set; } + public ExtraType ExtraType { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/DirectoryService.cs b/MediaBrowser.Controller/Providers/DirectoryService.cs index 06ea7be02d..9e549dcf3f 100644 --- a/MediaBrowser.Controller/Providers/DirectoryService.cs +++ b/MediaBrowser.Controller/Providers/DirectoryService.cs @@ -7,16 +7,6 @@ using System.Linq; namespace MediaBrowser.Controller.Providers { - public interface IDirectoryService - { - IEnumerable GetFileSystemEntries(string path); - IEnumerable GetFiles(string path); - IEnumerable GetDirectories(string path); - IEnumerable GetFiles(string path, bool clearCache); - FileSystemInfo GetFile(string path); - Dictionary GetFileSystemDictionary(string path); - } - public class DirectoryService : IDirectoryService { private readonly ILogger _logger; diff --git a/MediaBrowser.Controller/Providers/DynamicImageInfo.cs b/MediaBrowser.Controller/Providers/DynamicImageInfo.cs new file mode 100644 index 0000000000..14b4c6afbe --- /dev/null +++ b/MediaBrowser.Controller/Providers/DynamicImageInfo.cs @@ -0,0 +1,10 @@ +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public class DynamicImageInfo + { + public string ImageId { get; set; } + public ImageType Type { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/DynamicImageResponse.cs b/MediaBrowser.Controller/Providers/DynamicImageResponse.cs new file mode 100644 index 0000000000..71a937cd9d --- /dev/null +++ b/MediaBrowser.Controller/Providers/DynamicImageResponse.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using MediaBrowser.Model.Drawing; + +namespace MediaBrowser.Controller.Providers +{ + public class DynamicImageResponse + { + public string Path { get; set; } + public Stream Stream { get; set; } + public ImageFormat Format { get; set; } + public bool HasImage { get; set; } + public string InternalCacheKey { get; set; } + + public void SetFormatFromMimeType(string mimeType) + { + if (mimeType.EndsWith("gif", StringComparison.OrdinalIgnoreCase)) + { + Format = ImageFormat.Gif; + } + else if (mimeType.EndsWith("bmp", StringComparison.OrdinalIgnoreCase)) + { + Format = ImageFormat.Bmp; + } + else if (mimeType.EndsWith("png", StringComparison.OrdinalIgnoreCase)) + { + Format = ImageFormat.Png; + } + else + { + Format = ImageFormat.Jpg; + } + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/EpisodeIdentity.cs b/MediaBrowser.Controller/Providers/EpisodeIdentity.cs new file mode 100644 index 0000000000..53f469e955 --- /dev/null +++ b/MediaBrowser.Controller/Providers/EpisodeIdentity.cs @@ -0,0 +1,12 @@ +namespace MediaBrowser.Controller.Providers +{ + 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; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/EpisodeInfo.cs b/MediaBrowser.Controller/Providers/EpisodeInfo.cs new file mode 100644 index 0000000000..88a7cbab7f --- /dev/null +++ b/MediaBrowser.Controller/Providers/EpisodeInfo.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Providers +{ + 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(); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ExtraInfo.cs b/MediaBrowser.Controller/Providers/ExtraInfo.cs new file mode 100644 index 0000000000..1fbe6e93aa --- /dev/null +++ b/MediaBrowser.Controller/Providers/ExtraInfo.cs @@ -0,0 +1,15 @@ +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public class ExtraInfo + { + public string Path { get; set; } + + public LocationType LocationType { get; set; } + + public bool IsDownloadable { get; set; } + + public ExtraType ExtraType { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ExtraSource.cs b/MediaBrowser.Controller/Providers/ExtraSource.cs new file mode 100644 index 0000000000..901af60f86 --- /dev/null +++ b/MediaBrowser.Controller/Providers/ExtraSource.cs @@ -0,0 +1,9 @@ +namespace MediaBrowser.Controller.Providers +{ + public enum ExtraSource + { + Local = 1, + Metadata = 2, + Remote = 3 + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/GameInfo.cs b/MediaBrowser.Controller/Providers/GameInfo.cs new file mode 100644 index 0000000000..771cf6cecb --- /dev/null +++ b/MediaBrowser.Controller/Providers/GameInfo.cs @@ -0,0 +1,11 @@ +namespace MediaBrowser.Controller.Providers +{ + public class GameInfo : ItemLookupInfo + { + /// + /// Gets or sets the game system. + /// + /// The game system. + public string GameSystem { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/GameSystemInfo.cs b/MediaBrowser.Controller/Providers/GameSystemInfo.cs new file mode 100644 index 0000000000..efe2635cd3 --- /dev/null +++ b/MediaBrowser.Controller/Providers/GameSystemInfo.cs @@ -0,0 +1,11 @@ +namespace MediaBrowser.Controller.Providers +{ + public class GameSystemInfo : ItemLookupInfo + { + /// + /// Gets or sets the path. + /// + /// The path. + public string Path { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs b/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs index 3ce6ac46b9..c9393f4c36 100644 --- a/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs @@ -21,9 +21,4 @@ namespace MediaBrowser.Controller.Providers /// Task{ItemUpdateType}. Task FetchAsync(TItemType item, MetadataRefreshOptions options, CancellationToken cancellationToken); } - - public interface IPreRefreshProvider : ICustomMetadataProvider - { - - } } diff --git a/MediaBrowser.Controller/Providers/IDirectoryService.cs b/MediaBrowser.Controller/Providers/IDirectoryService.cs new file mode 100644 index 0000000000..343cf361f0 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IDirectoryService.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.IO; + +namespace MediaBrowser.Controller.Providers +{ + public interface IDirectoryService + { + IEnumerable GetFileSystemEntries(string path); + IEnumerable GetFiles(string path); + IEnumerable GetDirectories(string path); + IEnumerable GetFiles(string path, bool clearCache); + FileSystemInfo GetFile(string path); + Dictionary GetFileSystemDictionary(string path); + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IDynamicImageProvider.cs b/MediaBrowser.Controller/Providers/IDynamicImageProvider.cs new file mode 100644 index 0000000000..9c3f947637 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IDynamicImageProvider.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public interface IDynamicImageProvider : IImageProvider + { + /// + /// Gets the supported images. + /// + /// The item. + /// IEnumerable{ImageType}. + IEnumerable GetSupportedImages(IHasImages item); + + /// + /// Gets the image. + /// + /// The item. + /// The type. + /// The cancellation token. + /// Task{DynamicImageResponse}. + Task GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken); + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IExtrasProvider.cs b/MediaBrowser.Controller/Providers/IExtrasProvider.cs index 953bf02a11..3b72232c21 100644 --- a/MediaBrowser.Controller/Providers/IExtrasProvider.cs +++ b/MediaBrowser.Controller/Providers/IExtrasProvider.cs @@ -1,5 +1,4 @@ using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Entities; namespace MediaBrowser.Controller.Providers { @@ -18,22 +17,4 @@ namespace MediaBrowser.Controller.Providers /// true if XXXX, false otherwise. bool Supports(IHasMetadata item); } - - public enum ExtraSource - { - Local = 1, - Metadata = 2, - Remote = 3 - } - - public class ExtraInfo - { - public string Path { get; set; } - - public LocationType LocationType { get; set; } - - public bool IsDownloadable { get; set; } - - public ExtraType ExtraType { get; set; } - } } diff --git a/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs b/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs index d914abf618..aa0b0e3c97 100644 --- a/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs +++ b/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs @@ -14,16 +14,4 @@ namespace MediaBrowser.Controller.Providers /// true if the specified item has changed; otherwise, false. bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date); } - - public interface IHasItemChangeMonitor - { - /// - /// Determines whether the specified item has changed. - /// - /// The item. - /// The status. - /// The directory service. - /// true if the specified item has changed; otherwise, false. - bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService); - } } diff --git a/MediaBrowser.Controller/Providers/IHasIdentities.cs b/MediaBrowser.Controller/Providers/IHasIdentities.cs new file mode 100644 index 0000000000..36f940dd31 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IHasIdentities.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Providers +{ + public interface IHasIdentities + where TIdentity : IItemIdentity + { + IEnumerable Identities { get; } + + Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken); + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IHasItemChangeMonitor.cs b/MediaBrowser.Controller/Providers/IHasItemChangeMonitor.cs new file mode 100644 index 0000000000..4c7069dd6d --- /dev/null +++ b/MediaBrowser.Controller/Providers/IHasItemChangeMonitor.cs @@ -0,0 +1,16 @@ +using MediaBrowser.Controller.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public interface IHasItemChangeMonitor + { + /// + /// Determines whether the specified item has changed. + /// + /// The item. + /// The status. + /// The directory service. + /// true if the specified item has changed; otherwise, false. + bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService); + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IHasLookupInfo.cs b/MediaBrowser.Controller/Providers/IHasLookupInfo.cs new file mode 100644 index 0000000000..afce498526 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IHasLookupInfo.cs @@ -0,0 +1,8 @@ +namespace MediaBrowser.Controller.Providers +{ + public interface IHasLookupInfo + where TLookupInfoType : ItemLookupInfo, new() + { + TLookupInfoType GetLookupInfo(); + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IHasOrder.cs b/MediaBrowser.Controller/Providers/IHasOrder.cs new file mode 100644 index 0000000000..cb5298dd36 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IHasOrder.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public interface IHasOrder + { + int Order { get; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IImageFileSaver.cs b/MediaBrowser.Controller/Providers/IImageFileSaver.cs new file mode 100644 index 0000000000..3e11d8bf89 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IImageFileSaver.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Model.Drawing; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public interface IImageFileSaver : IImageSaver + { + /// + /// Gets the save paths. + /// + /// The item. + /// The type. + /// The format. + /// The index. + /// IEnumerable{System.String}. + IEnumerable GetSavePaths(IHasImages item, ImageType type, ImageFormat format, int index); + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IImageSaver.cs b/MediaBrowser.Controller/Providers/IImageSaver.cs index a983de63e7..62017160f4 100644 --- a/MediaBrowser.Controller/Providers/IImageSaver.cs +++ b/MediaBrowser.Controller/Providers/IImageSaver.cs @@ -1,9 +1,4 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Drawing; -using MediaBrowser.Model.Entities; -using System.Collections.Generic; - -namespace MediaBrowser.Controller.Providers +namespace MediaBrowser.Controller.Providers { public interface IImageSaver { @@ -13,17 +8,4 @@ namespace MediaBrowser.Controller.Providers /// The name. string Name { get; } } - - public interface IImageFileSaver : IImageSaver - { - /// - /// Gets the save paths. - /// - /// The item. - /// The type. - /// The format. - /// The index. - /// IEnumerable{System.String}. - IEnumerable GetSavePaths(IHasImages item, ImageType type, ImageFormat format, int index); - } } diff --git a/MediaBrowser.Controller/Providers/IItemIdentity.cs b/MediaBrowser.Controller/Providers/IItemIdentity.cs new file mode 100644 index 0000000000..cab189c84f --- /dev/null +++ b/MediaBrowser.Controller/Providers/IItemIdentity.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public interface IItemIdentity + { + string Type { get; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs b/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs new file mode 100644 index 0000000000..30e96b9e51 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs @@ -0,0 +1,4 @@ +namespace MediaBrowser.Controller.Providers +{ + public interface IItemIdentityConverter : IHasOrder { } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs b/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs new file mode 100644 index 0000000000..9d437c208b --- /dev/null +++ b/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs @@ -0,0 +1,4 @@ +namespace MediaBrowser.Controller.Providers +{ + public interface IItemIdentityProvider : IHasOrder { } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ILocalImageFileProvider.cs b/MediaBrowser.Controller/Providers/ILocalImageFileProvider.cs new file mode 100644 index 0000000000..7e5d828437 --- /dev/null +++ b/MediaBrowser.Controller/Providers/ILocalImageFileProvider.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public interface ILocalImageFileProvider : ILocalImageProvider + { + List GetImages(IHasImages item, IDirectoryService directoryService); + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ILocalImageProvider.cs b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs index d1345d7a6e..1027a4cb27 100644 --- a/MediaBrowser.Controller/Providers/ILocalImageProvider.cs +++ b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs @@ -1,13 +1,4 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Drawing; -using MediaBrowser.Model.Entities; -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Controller.Providers +namespace MediaBrowser.Controller.Providers { /// /// This is just a marker interface @@ -15,68 +6,4 @@ namespace MediaBrowser.Controller.Providers public interface ILocalImageProvider : IImageProvider { } - - public interface ILocalImageFileProvider : ILocalImageProvider - { - List GetImages(IHasImages item, IDirectoryService directoryService); - } - - public class LocalImageInfo - { - public FileSystemInfo FileInfo { get; set; } - public ImageType Type { get; set; } - } - - public interface IDynamicImageProvider : IImageProvider - { - /// - /// Gets the supported images. - /// - /// The item. - /// IEnumerable{ImageType}. - IEnumerable GetSupportedImages(IHasImages item); - - /// - /// Gets the image. - /// - /// The item. - /// The type. - /// The cancellation token. - /// Task{DynamicImageResponse}. - Task GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken); - } - - public class DynamicImageInfo - { - public string ImageId { get; set; } - public ImageType Type { get; set; } - } - - public class DynamicImageResponse - { - public string Path { get; set; } - public Stream Stream { get; set; } - public ImageFormat Format { get; set; } - public bool HasImage { get; set; } - - public void SetFormatFromMimeType(string mimeType) - { - if (mimeType.EndsWith("gif", StringComparison.OrdinalIgnoreCase)) - { - Format = ImageFormat.Gif; - } - else if (mimeType.EndsWith("bmp", StringComparison.OrdinalIgnoreCase)) - { - Format = ImageFormat.Bmp; - } - else if (mimeType.EndsWith("png", StringComparison.OrdinalIgnoreCase)) - { - Format = ImageFormat.Png; - } - else - { - Format = ImageFormat.Jpg; - } - } - } } diff --git a/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs b/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs index 61bc3b87ba..3a8ef73254 100644 --- a/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs @@ -1,6 +1,4 @@ using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Entities; -using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -24,29 +22,4 @@ namespace MediaBrowser.Controller.Providers IDirectoryService directoryService, CancellationToken cancellationToken); } - - public class ItemInfo - { - public string Path { get; set; } - - public bool IsInMixedFolder { get; set; } - } - - public class LocalMetadataResult - where T : IHasMetadata - { - public bool HasMetadata { get; set; } - public T Item { get; set; } - - public List Images { get; set; } - public List Chapters { get; set; } - public List UserDataLIst { get; set; } - - public LocalMetadataResult() - { - Images = new List(); - Chapters = new List(); - UserDataLIst = new List(); - } - } } diff --git a/MediaBrowser.Controller/Providers/IMetadataProvider.cs b/MediaBrowser.Controller/Providers/IMetadataProvider.cs index 52cd6fceac..26f43d820d 100644 --- a/MediaBrowser.Controller/Providers/IMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/IMetadataProvider.cs @@ -19,15 +19,4 @@ namespace MediaBrowser.Controller.Providers where TItemType : IHasMetadata { } - - public interface IHasOrder - { - int Order { get; } - } - - public class MetadataResult - { - public bool HasMetadata { get; set; } - public T Item { get; set; } - } } diff --git a/MediaBrowser.Controller/Providers/IPreRefreshProvider.cs b/MediaBrowser.Controller/Providers/IPreRefreshProvider.cs new file mode 100644 index 0000000000..6086749052 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IPreRefreshProvider.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public interface IPreRefreshProvider : ICustomMetadataProvider + { + + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs b/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs index 0ff7ee5a9d..5e2e1b4c72 100644 --- a/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Providers; using System.Collections.Generic; using System.Threading; @@ -18,37 +17,9 @@ namespace MediaBrowser.Controller.Providers Task> GetMetadata(TLookupInfoType info, CancellationToken cancellationToken); } - public interface IRemoteSearchProvider : IMetadataProvider - { - /// - /// Gets the image response. - /// - /// The URL. - /// The cancellation token. - /// Task{HttpResponseInfo}. - Task GetImageResponse(string url, CancellationToken cancellationToken); - } - public interface IRemoteSearchProvider : IRemoteSearchProvider where TLookupInfoType : ItemLookupInfo { Task> GetSearchResults(TLookupInfoType searchInfo, CancellationToken cancellationToken); } - - public class RemoteSearchQuery - where T : ItemLookupInfo - { - public T SearchInfo { get; set; } - - /// - /// If set will only search within the given provider - /// - public string SearchProviderName { get; set; } - - /// - /// Gets or sets a value indicating whether [include disabled providers]. - /// - /// true if [include disabled providers]; otherwise, false. - public bool IncludeDisabledProviders { get; set; } - } } diff --git a/MediaBrowser.Controller/Providers/IRemoteSearchProvider.cs b/MediaBrowser.Controller/Providers/IRemoteSearchProvider.cs new file mode 100644 index 0000000000..0077def42d --- /dev/null +++ b/MediaBrowser.Controller/Providers/IRemoteSearchProvider.cs @@ -0,0 +1,17 @@ +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Net; + +namespace MediaBrowser.Controller.Providers +{ + public interface IRemoteSearchProvider : IMetadataProvider + { + /// + /// Gets the image response. + /// + /// The URL. + /// The cancellation token. + /// Task{HttpResponseInfo}. + Task GetImageResponse(string url, CancellationToken cancellationToken); + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ISeriesOrderManager.cs b/MediaBrowser.Controller/Providers/ISeriesOrderManager.cs index a3adab1b90..235d0ada5a 100644 --- a/MediaBrowser.Controller/Providers/ISeriesOrderManager.cs +++ b/MediaBrowser.Controller/Providers/ISeriesOrderManager.cs @@ -7,17 +7,6 @@ using MediaBrowser.Common; namespace MediaBrowser.Controller.Providers { - public interface ISeriesOrderProvider - { - string OrderType { get; } - Task FindSeriesIndex(string seriesName); - } - - public static class SeriesOrderTypes - { - public const string Anime = "Anime"; - } - public interface ISeriesOrderManager { Task FindSeriesIndex(string orderType, string seriesName); diff --git a/MediaBrowser.Controller/Providers/ISeriesOrderProvider.cs b/MediaBrowser.Controller/Providers/ISeriesOrderProvider.cs new file mode 100644 index 0000000000..ee0f3c197f --- /dev/null +++ b/MediaBrowser.Controller/Providers/ISeriesOrderProvider.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Providers +{ + public interface ISeriesOrderProvider + { + string OrderType { get; } + Task FindSeriesIndex(string seriesName); + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ImageRefreshMode.cs b/MediaBrowser.Controller/Providers/ImageRefreshMode.cs new file mode 100644 index 0000000000..df10c91f6a --- /dev/null +++ b/MediaBrowser.Controller/Providers/ImageRefreshMode.cs @@ -0,0 +1,25 @@ +namespace MediaBrowser.Controller.Providers +{ + public enum ImageRefreshMode + { + /// + /// The none + /// + None = 0, + + /// + /// The default + /// + Default = 1, + + /// + /// Existing images will be validated + /// + ValidationOnly = 2, + + /// + /// All providers will be executed to search for new metadata + /// + FullRefresh = 3 + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ImageRefreshOptions.cs b/MediaBrowser.Controller/Providers/ImageRefreshOptions.cs new file mode 100644 index 0000000000..a66cc6f222 --- /dev/null +++ b/MediaBrowser.Controller/Providers/ImageRefreshOptions.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public class ImageRefreshOptions + { + public ImageRefreshMode ImageRefreshMode { get; set; } + public IDirectoryService DirectoryService { get; private set; } + + public bool ReplaceAllImages { get; set; } + + public List ReplaceImages { get; set; } + + public ImageRefreshOptions(IDirectoryService directoryService) + { + ImageRefreshMode = ImageRefreshMode.Default; + DirectoryService = directoryService; + + ReplaceImages = new List(); + } + + public bool IsReplacingImage(ImageType type) + { + return ImageRefreshMode == ImageRefreshMode.FullRefresh && + (ReplaceAllImages || ReplaceImages.Contains(type)); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ItemIdentities.cs b/MediaBrowser.Controller/Providers/ItemIdentities.cs index 8d24f6c1fb..939fd3b8ff 100644 --- a/MediaBrowser.Controller/Providers/ItemIdentities.cs +++ b/MediaBrowser.Controller/Providers/ItemIdentities.cs @@ -1,24 +1,7 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; +using System.Threading.Tasks; namespace MediaBrowser.Controller.Providers { - public interface IItemIdentity - { - string Type { get; } - } - - public interface IHasIdentities - where TIdentity : IItemIdentity - { - IEnumerable Identities { get; } - - Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken); - } - - public interface IItemIdentityProvider : IHasOrder { } - public interface IItemIdentityProvider : IItemIdentityProvider where TLookupInfo : ItemLookupInfo where TIdentity : IItemIdentity @@ -26,8 +9,6 @@ namespace MediaBrowser.Controller.Providers Task FindIdentity(TLookupInfo info); } - public interface IItemIdentityConverter : IHasOrder { } - public interface IItemIdentityConverter : IItemIdentityConverter where TIdentity : IItemIdentity { diff --git a/MediaBrowser.Controller/Providers/ItemInfo.cs b/MediaBrowser.Controller/Providers/ItemInfo.cs new file mode 100644 index 0000000000..113a7bb8ec --- /dev/null +++ b/MediaBrowser.Controller/Providers/ItemInfo.cs @@ -0,0 +1,9 @@ +namespace MediaBrowser.Controller.Providers +{ + public class ItemInfo + { + public string Path { get; set; } + + public bool IsInMixedFolder { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/ItemLookupInfo.cs b/MediaBrowser.Controller/Providers/ItemLookupInfo.cs index 649096a75b..91dc33214c 100644 --- a/MediaBrowser.Controller/Providers/ItemLookupInfo.cs +++ b/MediaBrowser.Controller/Providers/ItemLookupInfo.cs @@ -1,8 +1,4 @@ -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Model.Channels; -using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; @@ -43,204 +39,4 @@ namespace MediaBrowser.Controller.Providers 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; } - } } diff --git a/MediaBrowser.Controller/Providers/LocalImageInfo.cs b/MediaBrowser.Controller/Providers/LocalImageInfo.cs new file mode 100644 index 0000000000..59d74def26 --- /dev/null +++ b/MediaBrowser.Controller/Providers/LocalImageInfo.cs @@ -0,0 +1,11 @@ +using System.IO; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public class LocalImageInfo + { + public FileSystemInfo FileInfo { get; set; } + public ImageType Type { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/LocalMetadataResult.cs b/MediaBrowser.Controller/Providers/LocalMetadataResult.cs new file mode 100644 index 0000000000..8be3ee7aac --- /dev/null +++ b/MediaBrowser.Controller/Providers/LocalMetadataResult.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public class LocalMetadataResult + where T : IHasMetadata + { + public bool HasMetadata { get; set; } + public T Item { get; set; } + + public List Images { get; set; } + public List Chapters { get; set; } + public List UserDataLIst { get; set; } + + public LocalMetadataResult() + { + Images = new List(); + Chapters = new List(); + UserDataLIst = new List(); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/MetadataRefreshMode.cs b/MediaBrowser.Controller/Providers/MetadataRefreshMode.cs new file mode 100644 index 0000000000..56492006a5 --- /dev/null +++ b/MediaBrowser.Controller/Providers/MetadataRefreshMode.cs @@ -0,0 +1,25 @@ +namespace MediaBrowser.Controller.Providers +{ + public enum MetadataRefreshMode + { + /// + /// The none + /// + None = 0, + + /// + /// The validation only + /// + ValidationOnly = 1, + + /// + /// Providers will be executed based on default rules + /// + Default = 2, + + /// + /// All providers will be executed to search for new metadata + /// + FullRefresh = 3 + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs index 078f1e77a9..dbb7fbfcdb 100644 --- a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs +++ b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs @@ -1,6 +1,4 @@ -using MediaBrowser.Model.Entities; -using System.Collections.Generic; -using System.Linq; +using System.Linq; namespace MediaBrowser.Controller.Providers { @@ -40,74 +38,4 @@ namespace MediaBrowser.Controller.Providers ReplaceImages = copy.ReplaceImages.ToList(); } } - - public class ImageRefreshOptions - { - public ImageRefreshMode ImageRefreshMode { get; set; } - public IDirectoryService DirectoryService { get; private set; } - - public bool ReplaceAllImages { get; set; } - - public List ReplaceImages { get; set; } - - public ImageRefreshOptions(IDirectoryService directoryService) - { - ImageRefreshMode = ImageRefreshMode.Default; - DirectoryService = directoryService; - - ReplaceImages = new List(); - } - - public bool IsReplacingImage(ImageType type) - { - return ImageRefreshMode == ImageRefreshMode.FullRefresh && - (ReplaceAllImages || ReplaceImages.Contains(type)); - } - } - - public enum MetadataRefreshMode - { - /// - /// The none - /// - None = 0, - - /// - /// The validation only - /// - ValidationOnly = 1, - - /// - /// Providers will be executed based on default rules - /// - Default = 2, - - /// - /// All providers will be executed to search for new metadata - /// - FullRefresh = 3 - } - - public enum ImageRefreshMode - { - /// - /// The none - /// - None = 0, - - /// - /// The default - /// - Default = 1, - - /// - /// Existing images will be validated - /// - ValidationOnly = 2, - - /// - /// All providers will be executed to search for new metadata - /// - FullRefresh = 3 - } } diff --git a/MediaBrowser.Controller/Providers/MetadataResult.cs b/MediaBrowser.Controller/Providers/MetadataResult.cs new file mode 100644 index 0000000000..756458cfaf --- /dev/null +++ b/MediaBrowser.Controller/Providers/MetadataResult.cs @@ -0,0 +1,8 @@ +namespace MediaBrowser.Controller.Providers +{ + public class MetadataResult + { + public bool HasMetadata { get; set; } + public T Item { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/MovieInfo.cs b/MediaBrowser.Controller/Providers/MovieInfo.cs new file mode 100644 index 0000000000..198336fc01 --- /dev/null +++ b/MediaBrowser.Controller/Providers/MovieInfo.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public class MovieInfo : ItemLookupInfo + { + + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/MusicVideoInfo.cs b/MediaBrowser.Controller/Providers/MusicVideoInfo.cs new file mode 100644 index 0000000000..4f4ab5954a --- /dev/null +++ b/MediaBrowser.Controller/Providers/MusicVideoInfo.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public class MusicVideoInfo : ItemLookupInfo + { + + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/PersonLookupInfo.cs b/MediaBrowser.Controller/Providers/PersonLookupInfo.cs new file mode 100644 index 0000000000..db4dacb0b4 --- /dev/null +++ b/MediaBrowser.Controller/Providers/PersonLookupInfo.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public class PersonLookupInfo : ItemLookupInfo + { + + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/RemoteSearchQuery.cs b/MediaBrowser.Controller/Providers/RemoteSearchQuery.cs new file mode 100644 index 0000000000..cd86f352fe --- /dev/null +++ b/MediaBrowser.Controller/Providers/RemoteSearchQuery.cs @@ -0,0 +1,19 @@ +namespace MediaBrowser.Controller.Providers +{ + public class RemoteSearchQuery + where T : ItemLookupInfo + { + public T SearchInfo { get; set; } + + /// + /// If set will only search within the given provider + /// + public string SearchProviderName { get; set; } + + /// + /// Gets or sets a value indicating whether [include disabled providers]. + /// + /// true if [include disabled providers]; otherwise, false. + public bool IncludeDisabledProviders { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SeasonIdentity.cs b/MediaBrowser.Controller/Providers/SeasonIdentity.cs new file mode 100644 index 0000000000..1e6b9b65a3 --- /dev/null +++ b/MediaBrowser.Controller/Providers/SeasonIdentity.cs @@ -0,0 +1,11 @@ +namespace MediaBrowser.Controller.Providers +{ + public class SeasonIdentity : IItemIdentity + { + public string Type { get; set; } + + public string SeriesId { get; set; } + + public int SeasonIndex { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SeasonInfo.cs b/MediaBrowser.Controller/Providers/SeasonInfo.cs new file mode 100644 index 0000000000..17bcd3f772 --- /dev/null +++ b/MediaBrowser.Controller/Providers/SeasonInfo.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Providers +{ + 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(); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SeriesIdentity.cs b/MediaBrowser.Controller/Providers/SeriesIdentity.cs new file mode 100644 index 0000000000..326d340275 --- /dev/null +++ b/MediaBrowser.Controller/Providers/SeriesIdentity.cs @@ -0,0 +1,9 @@ +namespace MediaBrowser.Controller.Providers +{ + public class SeriesIdentity : IItemIdentity + { + public string Type { get; set; } + + public string Id { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SeriesInfo.cs b/MediaBrowser.Controller/Providers/SeriesInfo.cs new file mode 100644 index 0000000000..fc1119cd25 --- /dev/null +++ b/MediaBrowser.Controller/Providers/SeriesInfo.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Providers +{ + 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(); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SeriesOrderTypes.cs b/MediaBrowser.Controller/Providers/SeriesOrderTypes.cs new file mode 100644 index 0000000000..5e04fb4dbc --- /dev/null +++ b/MediaBrowser.Controller/Providers/SeriesOrderTypes.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public static class SeriesOrderTypes + { + public const string Anime = "Anime"; + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/SongInfo.cs b/MediaBrowser.Controller/Providers/SongInfo.cs new file mode 100644 index 0000000000..b83912a002 --- /dev/null +++ b/MediaBrowser.Controller/Providers/SongInfo.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Providers +{ + 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(); + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/TrailerInfo.cs b/MediaBrowser.Controller/Providers/TrailerInfo.cs new file mode 100644 index 0000000000..fe26ec43ec --- /dev/null +++ b/MediaBrowser.Controller/Providers/TrailerInfo.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Controller.Providers +{ + public class TrailerInfo : ItemLookupInfo + { + public bool IsLocalTrailer { get; set; } + } +} \ No newline at end of file diff --git a/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs b/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs index e1c2eb0edb..9e1cfdd069 100644 --- a/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs +++ b/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs @@ -12,7 +12,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Providers.FolderImages { - public class DefaultImageProvider : IRemoteImageProvider, IHasItemChangeMonitor + public class DefaultImageProvider : IRemoteImageProvider, IHasItemChangeMonitor, IHasOrder { private readonly IHttpClient _httpClient; @@ -123,7 +123,7 @@ namespace MediaBrowser.Providers.FolderImages public bool Supports(IHasImages item) { - return item is ICollectionFolder; + return item is ICollectionFolder || item is UserView; } public Task GetImageResponse(string url, CancellationToken cancellationToken) @@ -140,5 +140,14 @@ namespace MediaBrowser.Providers.FolderImages { return GetSupportedImages(item).Any(i => !item.HasImage(i)); } + + public int Order + { + get + { + // Run after the dynamic image provider + return 1; + } + } } } diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs index 66b0f92597..3c75aa20ad 100644 --- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs +++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs @@ -135,17 +135,17 @@ namespace MediaBrowser.Providers.Manager { if (!string.IsNullOrEmpty(response.Path)) { - var mimeType = "image/" + Path.GetExtension(response.Path).TrimStart('.').ToLower(); + var mimeType = MimeTypes.GetMimeType(response.Path); var stream = _fileSystem.GetFileStream(response.Path, FileMode.Open, FileAccess.Read, FileShare.Read, true); - await _providerManager.SaveImage(item, stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false); + await _providerManager.SaveImage(item, stream, mimeType, imageType, null, response.InternalCacheKey, cancellationToken).ConfigureAwait(false); } else { var mimeType = "image/" + response.Format.ToString().ToLower(); - await _providerManager.SaveImage(item, response.Stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false); + await _providerManager.SaveImage(item, response.Stream, mimeType, imageType, null, response.InternalCacheKey, cancellationToken).ConfigureAwait(false); } downloadedImages.Add(imageType); diff --git a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs index 8f20d32cc7..fd87bd16ab 100644 --- a/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs @@ -2,8 +2,8 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; @@ -15,7 +15,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.Photos { - public abstract class BaseDynamicImageProvider : IHasChangeMonitor, IForcedProvider, ICustomMetadataProvider + public abstract class BaseDynamicImageProvider : IHasChangeMonitor, IForcedProvider, IDynamicImageProvider, IHasOrder where T : IHasMetadata { protected IFileSystem FileSystem { get; private set; } @@ -29,81 +29,51 @@ namespace MediaBrowser.Server.Implementations.Photos FileSystem = fileSystem; } - public async Task FetchAsync(T item, MetadataRefreshOptions options, CancellationToken cancellationToken) + public virtual bool Supports(IHasImages item) { - if (!Supports(item)) - { - return ItemUpdateType.None; - } - - var primaryResult = await FetchAsync(item, ImageType.Primary, options, cancellationToken).ConfigureAwait(false); - var thumbResult = await FetchAsync(item, ImageType.Thumb, options, cancellationToken).ConfigureAwait(false); - - return primaryResult | thumbResult; + return item is T; } - protected virtual bool Supports(IHasImages item) - { - return true; - } - - protected abstract Task> GetItemsWithImages(IHasImages item); - - private const string Version = "3"; - protected string GetConfigurationCacheKey(List items) + public IEnumerable GetSupportedImages(IHasImages item) { - return (Version + "_" + string.Join(",", items.Select(i => i.Id.ToString("N")).ToArray())).GetMD5().ToString("N"); + return new List + { + ImageType.Primary, + ImageType.Thumb + }; } - protected async Task FetchAsync(IHasImages item, ImageType imageType, MetadataRefreshOptions options, CancellationToken cancellationToken) + public async Task GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) { var items = await GetItemsWithImages(item).ConfigureAwait(false); var cacheKey = GetConfigurationCacheKey(items); - if (!HasChanged(item, imageType, cacheKey)) + var result = await FetchAsyncInternal(item, items, type, cacheKey, cancellationToken).ConfigureAwait(false); + + return new DynamicImageResponse { - return ItemUpdateType.None; - } + HasImage = result != null, + Stream = result, + InternalCacheKey = cacheKey, + Format = ImageFormat.Png + }; + } - return await FetchAsyncInternal(item, items, imageType, cacheKey, options, cancellationToken).ConfigureAwait(false); + protected abstract Task> GetItemsWithImages(IHasImages item); + + private const string Version = "3"; + protected string GetConfigurationCacheKey(List items) + { + return (Version + "_" + string.Join(",", items.Select(i => i.Id.ToString("N")).ToArray())).GetMD5().ToString("N"); } - protected async Task FetchAsyncInternal(IHasImages item, + protected Task FetchAsyncInternal(IHasImages item, List itemsWithImages, - ImageType imageType, - string cacheKey, - MetadataRefreshOptions options, + ImageType imageType, + string cacheKey, CancellationToken cancellationToken) { - var stream = await CreateImageAsync(item, itemsWithImages, imageType, 0).ConfigureAwait(false); - - if (stream == null) - { - return ItemUpdateType.None; - } - - if (stream is MemoryStream) - { - using (stream) - { - stream.Position = 0; - - await ProviderManager.SaveImage(item, stream, "image/png", imageType, null, cacheKey, cancellationToken).ConfigureAwait(false); - } - } - else - { - using (var ms = new MemoryStream()) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - - ms.Position = 0; - - await ProviderManager.SaveImage(item, ms, "image/png", imageType, null, cacheKey, cancellationToken).ConfigureAwait(false); - } - } - - return ItemUpdateType.ImageUpdate; + return CreateImageAsync(item, itemsWithImages, imageType, 0); } protected Task GetThumbCollage(List items) @@ -137,9 +107,9 @@ namespace MediaBrowser.Server.Implementations.Photos get { return "Dynamic Image Provider"; } } - public async Task CreateImageAsync(IHasImages item, + public async Task CreateImageAsync(IHasImages item, List itemsWithImages, - ImageType imageType, + ImageType imageType, int imageIndex) { if (itemsWithImages.Count == 0) @@ -209,5 +179,14 @@ namespace MediaBrowser.Server.Implementations.Photos return weekNo; } + + public int Order + { + get + { + // Run before the default image provider which will download placeholders + return 0; + } + } } } diff --git a/MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs b/MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs index dcbf3a7f02..58834b3421 100644 --- a/MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs +++ b/MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs @@ -115,7 +115,7 @@ namespace MediaBrowser.Server.Implementations.Photos return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary)).ToList()); } - protected override bool Supports(IHasImages item) + public override bool Supports(IHasImages item) { var view = item as UserView;