diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-03-13 15:37:19 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-03-13 15:37:19 -0400 |
| commit | caadb4f374d490bc012218c8bbad94e9aff6d53b (patch) | |
| tree | 4f76ff62ee3701fd44db8b87abbab9990c477335 | |
| parent | e7d5532bee2f04ed081d3d98a2bc785d3dcd6767 (diff) | |
update default image providers
63 files changed, 756 insertions, 584 deletions
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 704637773..678d7841c 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -247,22 +247,67 @@ <Compile Include="Persistence\MediaStreamQuery.cs" /> <Compile Include="Playlists\IPlaylistManager.cs" /> <Compile Include="Playlists\Playlist.cs" /> + <Compile Include="Providers\AlbumInfo.cs" /> + <Compile Include="Providers\ArtistInfo.cs" /> + <Compile Include="Providers\BookInfo.cs" /> + <Compile Include="Providers\BoxSetInfo.cs" /> + <Compile Include="Providers\ChannelItemLookupInfo.cs" /> <Compile Include="Providers\DirectoryService.cs" /> + <Compile Include="Providers\DynamicImageInfo.cs" /> + <Compile Include="Providers\DynamicImageResponse.cs" /> + <Compile Include="Providers\EpisodeIdentity.cs" /> + <Compile Include="Providers\EpisodeInfo.cs" /> + <Compile Include="Providers\ExtraInfo.cs" /> + <Compile Include="Providers\ExtraSource.cs" /> + <Compile Include="Providers\GameInfo.cs" /> + <Compile Include="Providers\GameSystemInfo.cs" /> <Compile Include="Providers\ICustomMetadataProvider.cs" /> + <Compile Include="Providers\IDirectoryService.cs" /> + <Compile Include="Providers\IDynamicImageProvider.cs" /> <Compile Include="Providers\IExternalId.cs" /> <Compile Include="Providers\IExtrasProvider.cs" /> <Compile Include="Providers\IForcedProvider.cs" /> <Compile Include="Providers\IHasChangeMonitor.cs" /> <Compile Include="Entities\IHasMetadata.cs" /> + <Compile Include="Providers\IHasIdentities.cs" /> + <Compile Include="Providers\IHasItemChangeMonitor.cs" /> + <Compile Include="Providers\IHasLookupInfo.cs" /> + <Compile Include="Providers\IHasOrder.cs" /> + <Compile Include="Providers\IImageFileSaver.cs" /> <Compile Include="Providers\IImageProvider.cs" /> <Compile Include="Providers\IImageSaver.cs" /> + <Compile Include="Providers\IItemIdentity.cs" /> + <Compile Include="Providers\IItemIdentityConverter.cs" /> + <Compile Include="Providers\IItemIdentityProvider.cs" /> + <Compile Include="Providers\ILocalImageFileProvider.cs" /> <Compile Include="Providers\ILocalMetadataProvider.cs" /> + <Compile Include="Providers\ImageRefreshMode.cs" /> + <Compile Include="Providers\ImageRefreshOptions.cs" /> + <Compile Include="Providers\IPreRefreshProvider.cs" /> <Compile Include="Providers\IProviderRepository.cs" /> <Compile Include="Providers\IRemoteImageProvider.cs" /> <Compile Include="Providers\ILocalImageProvider.cs" /> <Compile Include="Providers\IMetadataProvider.cs" /> <Compile Include="Providers\IMetadataService.cs" /> <Compile Include="Providers\IRemoteMetadataProvider.cs" /> + <Compile Include="Providers\IRemoteSearchProvider.cs" /> + <Compile Include="Providers\ISeriesOrderProvider.cs" /> + <Compile Include="Providers\ItemInfo.cs" /> + <Compile Include="Providers\LocalImageInfo.cs" /> + <Compile Include="Providers\LocalMetadataResult.cs" /> + <Compile Include="Providers\MetadataRefreshMode.cs" /> + <Compile Include="Providers\MetadataResult.cs" /> + <Compile Include="Providers\MovieInfo.cs" /> + <Compile Include="Providers\MusicVideoInfo.cs" /> + <Compile Include="Providers\PersonLookupInfo.cs" /> + <Compile Include="Providers\RemoteSearchQuery.cs" /> + <Compile Include="Providers\SeasonIdentity.cs" /> + <Compile Include="Providers\SeasonInfo.cs" /> + <Compile Include="Providers\SeriesIdentity.cs" /> + <Compile Include="Providers\SeriesInfo.cs" /> + <Compile Include="Providers\SeriesOrderTypes.cs" /> + <Compile Include="Providers\SongInfo.cs" /> + <Compile Include="Providers\TrailerInfo.cs" /> <Compile Include="Providers\VideoContentType.cs" /> <Compile Include="RelatedMedia\IRelatedMediaProvider.cs" /> <Compile Include="Security\AuthenticationInfo.cs" /> diff --git a/MediaBrowser.Controller/Providers/AlbumInfo.cs b/MediaBrowser.Controller/Providers/AlbumInfo.cs new file mode 100644 index 000000000..b88477409 --- /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 + { + /// <summary> + /// Gets or sets the album artist. + /// </summary> + /// <value>The album artist.</value> + public List<string> AlbumArtists { get; set; } + + /// <summary> + /// Gets or sets the artist provider ids. + /// </summary> + /// <value>The artist provider ids.</value> + public Dictionary<string, string> ArtistProviderIds { get; set; } + public List<SongInfo> SongInfos { get; set; } + + public AlbumInfo() + { + ArtistProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); + SongInfos = new List<SongInfo>(); + AlbumArtists = new List<string>(); + } + } +}
\ 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 000000000..8a4abd5c6 --- /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<SongInfo> SongInfos { get; set; } + + public ArtistInfo() + { + SongInfos = new List<SongInfo>(); + } + } +}
\ 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 000000000..52519bcb0 --- /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 000000000..f604231de --- /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 000000000..6c972f3bf --- /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 06ea7be02..9e549dcf3 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<FileSystemInfo> GetFileSystemEntries(string path); - IEnumerable<FileSystemInfo> GetFiles(string path); - IEnumerable<FileSystemInfo> GetDirectories(string path); - IEnumerable<FileSystemInfo> GetFiles(string path, bool clearCache); - FileSystemInfo GetFile(string path); - Dictionary<string, FileSystemInfo> 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 000000000..14b4c6afb --- /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 000000000..71a937cd9 --- /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 000000000..53f469e95 --- /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 000000000..88a7cbab7 --- /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<EpisodeIdentity> + { + private List<EpisodeIdentity> _identities = new List<EpisodeIdentity>(); + + public Dictionary<string, string> SeriesProviderIds { get; set; } + + public int? IndexNumberEnd { get; set; } + public int? AnimeSeriesIndex { get; set; } + + public EpisodeInfo() + { + SeriesProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); + } + + public IEnumerable<EpisodeIdentity> Identities + { + get { return _identities; } + } + + public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) + { + var identifier = new ItemIdentifier<EpisodeInfo, EpisodeIdentity>(); + _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 000000000..1fbe6e93a --- /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 000000000..901af60f8 --- /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 000000000..771cf6cec --- /dev/null +++ b/MediaBrowser.Controller/Providers/GameInfo.cs @@ -0,0 +1,11 @@ +namespace MediaBrowser.Controller.Providers +{ + public class GameInfo : ItemLookupInfo + { + /// <summary> + /// Gets or sets the game system. + /// </summary> + /// <value>The game system.</value> + 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 000000000..efe2635cd --- /dev/null +++ b/MediaBrowser.Controller/Providers/GameSystemInfo.cs @@ -0,0 +1,11 @@ +namespace MediaBrowser.Controller.Providers +{ + public class GameSystemInfo : ItemLookupInfo + { + /// <summary> + /// Gets or sets the path. + /// </summary> + /// <value>The path.</value> + 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 3ce6ac46b..c9393f4c3 100644 --- a/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs @@ -21,9 +21,4 @@ namespace MediaBrowser.Controller.Providers /// <returns>Task{ItemUpdateType}.</returns> Task<ItemUpdateType> 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 000000000..343cf361f --- /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<FileSystemInfo> GetFileSystemEntries(string path); + IEnumerable<FileSystemInfo> GetFiles(string path); + IEnumerable<FileSystemInfo> GetDirectories(string path); + IEnumerable<FileSystemInfo> GetFiles(string path, bool clearCache); + FileSystemInfo GetFile(string path); + Dictionary<string, FileSystemInfo> 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 000000000..9c3f94763 --- /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 + { + /// <summary> + /// Gets the supported images. + /// </summary> + /// <param name="item">The item.</param> + /// <returns>IEnumerable{ImageType}.</returns> + IEnumerable<ImageType> GetSupportedImages(IHasImages item); + + /// <summary> + /// Gets the image. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="type">The type.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task{DynamicImageResponse}.</returns> + Task<DynamicImageResponse> 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 953bf02a1..3b72232c2 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 /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> 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 d914abf61..aa0b0e3c9 100644 --- a/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs +++ b/MediaBrowser.Controller/Providers/IHasChangeMonitor.cs @@ -14,16 +14,4 @@ namespace MediaBrowser.Controller.Providers /// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns> bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date); } - - public interface IHasItemChangeMonitor - { - /// <summary> - /// Determines whether the specified item has changed. - /// </summary> - /// <param name="item">The item.</param> - /// <param name="status">The status.</param> - /// <param name="directoryService">The directory service.</param> - /// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns> - 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 000000000..36f940dd3 --- /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<out TIdentity> + where TIdentity : IItemIdentity + { + IEnumerable<TIdentity> 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 000000000..4c7069dd6 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IHasItemChangeMonitor.cs @@ -0,0 +1,16 @@ +using MediaBrowser.Controller.Entities; + +namespace MediaBrowser.Controller.Providers +{ + public interface IHasItemChangeMonitor + { + /// <summary> + /// Determines whether the specified item has changed. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="status">The status.</param> + /// <param name="directoryService">The directory service.</param> + /// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns> + 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 000000000..afce49852 --- /dev/null +++ b/MediaBrowser.Controller/Providers/IHasLookupInfo.cs @@ -0,0 +1,8 @@ +namespace MediaBrowser.Controller.Providers +{ + public interface IHasLookupInfo<out TLookupInfoType> + 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 000000000..cb5298dd3 --- /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 000000000..3e11d8bf8 --- /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 + { + /// <summary> + /// Gets the save paths. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="type">The type.</param> + /// <param name="format">The format.</param> + /// <param name="index">The index.</param> + /// <returns>IEnumerable{System.String}.</returns> + IEnumerable<string> 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 a983de63e..62017160f 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 /// <value>The name.</value> string Name { get; } } - - public interface IImageFileSaver : IImageSaver - { - /// <summary> - /// Gets the save paths. - /// </summary> - /// <param name="item">The item.</param> - /// <param name="type">The type.</param> - /// <param name="format">The format.</param> - /// <param name="index">The index.</param> - /// <returns>IEnumerable{System.String}.</returns> - IEnumerable<string> 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 000000000..cab189c84 --- /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 000000000..30e96b9e5 --- /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 000000000..9d437c208 --- /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 000000000..7e5d82843 --- /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<LocalImageInfo> 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 d1345d7a6..1027a4cb2 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 { /// <summary> /// This is just a marker interface @@ -15,68 +6,4 @@ namespace MediaBrowser.Controller.Providers public interface ILocalImageProvider : IImageProvider { } - - public interface ILocalImageFileProvider : ILocalImageProvider - { - List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService); - } - - public class LocalImageInfo - { - public FileSystemInfo FileInfo { get; set; } - public ImageType Type { get; set; } - } - - public interface IDynamicImageProvider : IImageProvider - { - /// <summary> - /// Gets the supported images. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>IEnumerable{ImageType}.</returns> - IEnumerable<ImageType> GetSupportedImages(IHasImages item); - - /// <summary> - /// Gets the image. - /// </summary> - /// <param name="item">The item.</param> - /// <param name="type">The type.</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>Task{DynamicImageResponse}.</returns> - Task<DynamicImageResponse> 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 61bc3b87b..3a8ef7325 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<T> - where T : IHasMetadata - { - public bool HasMetadata { get; set; } - public T Item { get; set; } - - public List<LocalImageInfo> Images { get; set; } - public List<ChapterInfo> Chapters { get; set; } - public List<UserItemData> UserDataLIst { get; set; } - - public LocalMetadataResult() - { - Images = new List<LocalImageInfo>(); - Chapters = new List<ChapterInfo>(); - UserDataLIst = new List<UserItemData>(); - } - } } diff --git a/MediaBrowser.Controller/Providers/IMetadataProvider.cs b/MediaBrowser.Controller/Providers/IMetadataProvider.cs index 52cd6fcea..26f43d820 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<T> - { - 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 000000000..608674905 --- /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 0ff7ee5a9..5e2e1b4c7 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<MetadataResult<TItemType>> GetMetadata(TLookupInfoType info, CancellationToken cancellationToken); } - public interface IRemoteSearchProvider : IMetadataProvider - { - /// <summary> - /// Gets the image response. - /// </summary> - /// <param name="url">The URL.</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>Task{HttpResponseInfo}.</returns> - Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken); - } - public interface IRemoteSearchProvider<in TLookupInfoType> : IRemoteSearchProvider where TLookupInfoType : ItemLookupInfo { Task<IEnumerable<RemoteSearchResult>> GetSearchResults(TLookupInfoType searchInfo, CancellationToken cancellationToken); } - - public class RemoteSearchQuery<T> - where T : ItemLookupInfo - { - public T SearchInfo { get; set; } - - /// <summary> - /// If set will only search within the given provider - /// </summary> - public string SearchProviderName { get; set; } - - /// <summary> - /// Gets or sets a value indicating whether [include disabled providers]. - /// </summary> - /// <value><c>true</c> if [include disabled providers]; otherwise, <c>false</c>.</value> - public bool IncludeDisabledProviders { get; set; } - } } diff --git a/MediaBrowser.Controller/Providers/IRemoteSearchProvider.cs b/MediaBrowser.Controller/Providers/IRemoteSearchProvider.cs new file mode 100644 index 000000000..0077def42 --- /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 + { + /// <summary> + /// Gets the image response. + /// </summary> + /// <param name="url">The URL.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task{HttpResponseInfo}.</returns> + Task<HttpResponseInfo> 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 a3adab1b9..235d0ada5 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<int?> FindSeriesIndex(string seriesName); - } - - public static class SeriesOrderTypes - { - public const string Anime = "Anime"; - } - public interface ISeriesOrderManager { Task<int?> FindSeriesIndex(string orderType, string seriesName); diff --git a/MediaBrowser.Controller/Providers/ISeriesOrderProvider.cs b/MediaBrowser.Controller/Providers/ISeriesOrderProvider.cs new file mode 100644 index 000000000..ee0f3c197 --- /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<int?> 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 000000000..df10c91f6 --- /dev/null +++ b/MediaBrowser.Controller/Providers/ImageRefreshMode.cs @@ -0,0 +1,25 @@ +namespace MediaBrowser.Controller.Providers +{ + public enum ImageRefreshMode + { + /// <summary> + /// The none + /// </summary> + None = 0, + + /// <summary> + /// The default + /// </summary> + Default = 1, + + /// <summary> + /// Existing images will be validated + /// </summary> + ValidationOnly = 2, + + /// <summary> + /// All providers will be executed to search for new metadata + /// </summary> + 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 000000000..a66cc6f22 --- /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<ImageType> ReplaceImages { get; set; } + + public ImageRefreshOptions(IDirectoryService directoryService) + { + ImageRefreshMode = ImageRefreshMode.Default; + DirectoryService = directoryService; + + ReplaceImages = new List<ImageType>(); + } + + 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 8d24f6c1f..939fd3b8f 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<out TIdentity> - where TIdentity : IItemIdentity - { - IEnumerable<TIdentity> Identities { get; } - - Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken); - } - - public interface IItemIdentityProvider : IHasOrder { } - public interface IItemIdentityProvider<in TLookupInfo, TIdentity> : IItemIdentityProvider where TLookupInfo : ItemLookupInfo where TIdentity : IItemIdentity @@ -26,8 +9,6 @@ namespace MediaBrowser.Controller.Providers Task<TIdentity> FindIdentity(TLookupInfo info); } - public interface IItemIdentityConverter : IHasOrder { } - public interface IItemIdentityConverter<TIdentity> : IItemIdentityConverter where TIdentity : IItemIdentity { diff --git a/MediaBrowser.Controller/Providers/ItemInfo.cs b/MediaBrowser.Controller/Providers/ItemInfo.cs new file mode 100644 index 000000000..113a7bb8e --- /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 649096a75..91dc33214 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<string, string>(StringComparer.OrdinalIgnoreCase); } } - - public interface IHasLookupInfo<out TLookupInfoType> - where TLookupInfoType : ItemLookupInfo, new() - { - TLookupInfoType GetLookupInfo(); - } - - public class ArtistInfo : ItemLookupInfo - { - public List<SongInfo> SongInfos { get; set; } - - public ArtistInfo() - { - SongInfos = new List<SongInfo>(); - } - } - - public class AlbumInfo : ItemLookupInfo - { - /// <summary> - /// Gets or sets the album artist. - /// </summary> - /// <value>The album artist.</value> - public List<string> AlbumArtists { get; set; } - - /// <summary> - /// Gets or sets the artist provider ids. - /// </summary> - /// <value>The artist provider ids.</value> - public Dictionary<string, string> ArtistProviderIds { get; set; } - public List<SongInfo> SongInfos { get; set; } - - public AlbumInfo() - { - ArtistProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); - SongInfos = new List<SongInfo>(); - AlbumArtists = new List<string>(); - } - } - - public class GameInfo : ItemLookupInfo - { - /// <summary> - /// Gets or sets the game system. - /// </summary> - /// <value>The game system.</value> - public string GameSystem { get; set; } - } - - public class GameSystemInfo : ItemLookupInfo - { - /// <summary> - /// Gets or sets the path. - /// </summary> - /// <value>The path.</value> - public string Path { get; set; } - } - - public class EpisodeInfo : ItemLookupInfo, IHasIdentities<EpisodeIdentity> - { - private List<EpisodeIdentity> _identities = new List<EpisodeIdentity>(); - - public Dictionary<string, string> SeriesProviderIds { get; set; } - - public int? IndexNumberEnd { get; set; } - public int? AnimeSeriesIndex { get; set; } - - public EpisodeInfo() - { - SeriesProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); - } - - public IEnumerable<EpisodeIdentity> Identities - { - get { return _identities; } - } - - public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) - { - var identifier = new ItemIdentifier<EpisodeInfo, EpisodeIdentity>(); - _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<string> AlbumArtists { get; set; } - public string Album { get; set; } - public List<string> Artists { get; set; } - - public SongInfo() - { - Artists = new List<string>(); - AlbumArtists = new List<string>(); - } - } - - public class SeriesInfo : ItemLookupInfo, IHasIdentities<SeriesIdentity> - { - private List<SeriesIdentity> _identities = new List<SeriesIdentity>(); - - public int? AnimeSeriesIndex { get; set; } - - public IEnumerable<SeriesIdentity> Identities - { - get { return _identities; } - } - - public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) - { - var identifier = new ItemIdentifier<SeriesInfo, SeriesIdentity>(); - _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<SeasonIdentity> - { - private List<SeasonIdentity> _identities = new List<SeasonIdentity>(); - - public Dictionary<string, string> SeriesProviderIds { get; set; } - public int? AnimeSeriesIndex { get; set; } - - public SeasonInfo() - { - SeriesProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); - } - - public IEnumerable<SeasonIdentity> Identities - { - get { return _identities; } - } - - public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) - { - var identifier = new ItemIdentifier<SeasonInfo, SeasonIdentity>(); - _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 000000000..59d74def2 --- /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 000000000..8be3ee7aa --- /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<T> + where T : IHasMetadata + { + public bool HasMetadata { get; set; } + public T Item { get; set; } + + public List<LocalImageInfo> Images { get; set; } + public List<ChapterInfo> Chapters { get; set; } + public List<UserItemData> UserDataLIst { get; set; } + + public LocalMetadataResult() + { + Images = new List<LocalImageInfo>(); + Chapters = new List<ChapterInfo>(); + UserDataLIst = new List<UserItemData>(); + } + } +}
\ 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 000000000..56492006a --- /dev/null +++ b/MediaBrowser.Controller/Providers/MetadataRefreshMode.cs @@ -0,0 +1,25 @@ +namespace MediaBrowser.Controller.Providers +{ + public enum MetadataRefreshMode + { + /// <summary> + /// The none + /// </summary> + None = 0, + + /// <summary> + /// The validation only + /// </summary> + ValidationOnly = 1, + + /// <summary> + /// Providers will be executed based on default rules + /// </summary> + Default = 2, + + /// <summary> + /// All providers will be executed to search for new metadata + /// </summary> + FullRefresh = 3 + } +}
\ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs index 078f1e77a..dbb7fbfcd 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<ImageType> ReplaceImages { get; set; } - - public ImageRefreshOptions(IDirectoryService directoryService) - { - ImageRefreshMode = ImageRefreshMode.Default; - DirectoryService = directoryService; - - ReplaceImages = new List<ImageType>(); - } - - public bool IsReplacingImage(ImageType type) - { - return ImageRefreshMode == ImageRefreshMode.FullRefresh && - (ReplaceAllImages || ReplaceImages.Contains(type)); - } - } - - public enum MetadataRefreshMode - { - /// <summary> - /// The none - /// </summary> - None = 0, - - /// <summary> - /// The validation only - /// </summary> - ValidationOnly = 1, - - /// <summary> - /// Providers will be executed based on default rules - /// </summary> - Default = 2, - - /// <summary> - /// All providers will be executed to search for new metadata - /// </summary> - FullRefresh = 3 - } - - public enum ImageRefreshMode - { - /// <summary> - /// The none - /// </summary> - None = 0, - - /// <summary> - /// The default - /// </summary> - Default = 1, - - /// <summary> - /// Existing images will be validated - /// </summary> - ValidationOnly = 2, - - /// <summary> - /// All providers will be executed to search for new metadata - /// </summary> - FullRefresh = 3 - } } diff --git a/MediaBrowser.Controller/Providers/MetadataResult.cs b/MediaBrowser.Controller/Providers/MetadataResult.cs new file mode 100644 index 000000000..756458cfa --- /dev/null +++ b/MediaBrowser.Controller/Providers/MetadataResult.cs @@ -0,0 +1,8 @@ +namespace MediaBrowser.Controller.Providers +{ + public class MetadataResult<T> + { + 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 000000000..198336fc0 --- /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 000000000..4f4ab5954 --- /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 000000000..db4dacb0b --- /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 000000000..cd86f352f --- /dev/null +++ b/MediaBrowser.Controller/Providers/RemoteSearchQuery.cs @@ -0,0 +1,19 @@ +namespace MediaBrowser.Controller.Providers +{ + public class RemoteSearchQuery<T> + where T : ItemLookupInfo + { + public T SearchInfo { get; set; } + + /// <summary> + /// If set will only search within the given provider + /// </summary> + public string SearchProviderName { get; set; } + + /// <summary> + /// Gets or sets a value indicating whether [include disabled providers]. + /// </summary> + /// <value><c>true</c> if [include disabled providers]; otherwise, <c>false</c>.</value> + 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 000000000..1e6b9b65a --- /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 000000000..17bcd3f77 --- /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<SeasonIdentity> + { + private List<SeasonIdentity> _identities = new List<SeasonIdentity>(); + + public Dictionary<string, string> SeriesProviderIds { get; set; } + public int? AnimeSeriesIndex { get; set; } + + public SeasonInfo() + { + SeriesProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); + } + + public IEnumerable<SeasonIdentity> Identities + { + get { return _identities; } + } + + public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) + { + var identifier = new ItemIdentifier<SeasonInfo, SeasonIdentity>(); + _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 000000000..326d34027 --- /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 000000000..fc1119cd2 --- /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<SeriesIdentity> + { + private List<SeriesIdentity> _identities = new List<SeriesIdentity>(); + + public int? AnimeSeriesIndex { get; set; } + + public IEnumerable<SeriesIdentity> Identities + { + get { return _identities; } + } + + public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken) + { + var identifier = new ItemIdentifier<SeriesInfo, SeriesIdentity>(); + _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 000000000..5e04fb4db --- /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 000000000..b83912a00 --- /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<string> AlbumArtists { get; set; } + public string Album { get; set; } + public List<string> Artists { get; set; } + + public SongInfo() + { + Artists = new List<string>(); + AlbumArtists = new List<string>(); + } + } +}
\ 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 000000000..fe26ec43e --- /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 e1c2eb0ed..9e1cfdd06 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<HttpResponseInfo> 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 66b0f9259..3c75aa20a 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 8f20d32cc..fd87bd16a 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<T> : IHasChangeMonitor, IForcedProvider, ICustomMetadataProvider<T> + public abstract class BaseDynamicImageProvider<T> : 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<ItemUpdateType> 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<List<BaseItem>> GetItemsWithImages(IHasImages item); - - private const string Version = "3"; - protected string GetConfigurationCacheKey(List<BaseItem> items) + public IEnumerable<ImageType> GetSupportedImages(IHasImages item) { - return (Version + "_" + string.Join(",", items.Select(i => i.Id.ToString("N")).ToArray())).GetMD5().ToString("N"); + return new List<ImageType> + { + ImageType.Primary, + ImageType.Thumb + }; } - protected async Task<ItemUpdateType> FetchAsync(IHasImages item, ImageType imageType, MetadataRefreshOptions options, CancellationToken cancellationToken) + public async Task<DynamicImageResponse> 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<List<BaseItem>> GetItemsWithImages(IHasImages item); + + private const string Version = "3"; + protected string GetConfigurationCacheKey(List<BaseItem> items) + { + return (Version + "_" + string.Join(",", items.Select(i => i.Id.ToString("N")).ToArray())).GetMD5().ToString("N"); } - protected async Task<ItemUpdateType> FetchAsyncInternal(IHasImages item, + protected Task<Stream> FetchAsyncInternal(IHasImages item, List<BaseItem> 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<Stream> GetThumbCollage(List<BaseItem> items) @@ -137,9 +107,9 @@ namespace MediaBrowser.Server.Implementations.Photos get { return "Dynamic Image Provider"; } } - public async Task<Stream> CreateImageAsync(IHasImages item, + public async Task<Stream> CreateImageAsync(IHasImages item, List<BaseItem> 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 dcbf3a7f0..58834b342 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; |
