aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-13 15:37:19 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-13 15:37:19 -0400
commitcaadb4f374d490bc012218c8bbad94e9aff6d53b (patch)
tree4f76ff62ee3701fd44db8b87abbab9990c477335
parente7d5532bee2f04ed081d3d98a2bc785d3dcd6767 (diff)
update default image providers
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj45
-rw-r--r--MediaBrowser.Controller/Providers/AlbumInfo.cs28
-rw-r--r--MediaBrowser.Controller/Providers/ArtistInfo.cs14
-rw-r--r--MediaBrowser.Controller/Providers/BookInfo.cs7
-rw-r--r--MediaBrowser.Controller/Providers/BoxSetInfo.cs7
-rw-r--r--MediaBrowser.Controller/Providers/ChannelItemLookupInfo.cs11
-rw-r--r--MediaBrowser.Controller/Providers/DirectoryService.cs10
-rw-r--r--MediaBrowser.Controller/Providers/DynamicImageInfo.cs10
-rw-r--r--MediaBrowser.Controller/Providers/DynamicImageResponse.cs35
-rw-r--r--MediaBrowser.Controller/Providers/EpisodeIdentity.cs12
-rw-r--r--MediaBrowser.Controller/Providers/EpisodeInfo.cs34
-rw-r--r--MediaBrowser.Controller/Providers/ExtraInfo.cs15
-rw-r--r--MediaBrowser.Controller/Providers/ExtraSource.cs9
-rw-r--r--MediaBrowser.Controller/Providers/GameInfo.cs11
-rw-r--r--MediaBrowser.Controller/Providers/GameSystemInfo.cs11
-rw-r--r--MediaBrowser.Controller/Providers/ICustomMetadataProvider.cs5
-rw-r--r--MediaBrowser.Controller/Providers/IDirectoryService.cs15
-rw-r--r--MediaBrowser.Controller/Providers/IDynamicImageProvider.cs27
-rw-r--r--MediaBrowser.Controller/Providers/IExtrasProvider.cs19
-rw-r--r--MediaBrowser.Controller/Providers/IHasChangeMonitor.cs12
-rw-r--r--MediaBrowser.Controller/Providers/IHasIdentities.cs14
-rw-r--r--MediaBrowser.Controller/Providers/IHasItemChangeMonitor.cs16
-rw-r--r--MediaBrowser.Controller/Providers/IHasLookupInfo.cs8
-rw-r--r--MediaBrowser.Controller/Providers/IHasOrder.cs7
-rw-r--r--MediaBrowser.Controller/Providers/IImageFileSaver.cs20
-rw-r--r--MediaBrowser.Controller/Providers/IImageSaver.cs20
-rw-r--r--MediaBrowser.Controller/Providers/IItemIdentity.cs7
-rw-r--r--MediaBrowser.Controller/Providers/IItemIdentityConverter.cs4
-rw-r--r--MediaBrowser.Controller/Providers/IItemIdentityProvider.cs4
-rw-r--r--MediaBrowser.Controller/Providers/ILocalImageFileProvider.cs10
-rw-r--r--MediaBrowser.Controller/Providers/ILocalImageProvider.cs75
-rw-r--r--MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs27
-rw-r--r--MediaBrowser.Controller/Providers/IMetadataProvider.cs11
-rw-r--r--MediaBrowser.Controller/Providers/IPreRefreshProvider.cs7
-rw-r--r--MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs31
-rw-r--r--MediaBrowser.Controller/Providers/IRemoteSearchProvider.cs17
-rw-r--r--MediaBrowser.Controller/Providers/ISeriesOrderManager.cs11
-rw-r--r--MediaBrowser.Controller/Providers/ISeriesOrderProvider.cs10
-rw-r--r--MediaBrowser.Controller/Providers/ImageRefreshMode.cs25
-rw-r--r--MediaBrowser.Controller/Providers/ImageRefreshOptions.cs29
-rw-r--r--MediaBrowser.Controller/Providers/ItemIdentities.cs21
-rw-r--r--MediaBrowser.Controller/Providers/ItemInfo.cs9
-rw-r--r--MediaBrowser.Controller/Providers/ItemLookupInfo.cs206
-rw-r--r--MediaBrowser.Controller/Providers/LocalImageInfo.cs11
-rw-r--r--MediaBrowser.Controller/Providers/LocalMetadataResult.cs24
-rw-r--r--MediaBrowser.Controller/Providers/MetadataRefreshMode.cs25
-rw-r--r--MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs74
-rw-r--r--MediaBrowser.Controller/Providers/MetadataResult.cs8
-rw-r--r--MediaBrowser.Controller/Providers/MovieInfo.cs7
-rw-r--r--MediaBrowser.Controller/Providers/MusicVideoInfo.cs7
-rw-r--r--MediaBrowser.Controller/Providers/PersonLookupInfo.cs7
-rw-r--r--MediaBrowser.Controller/Providers/RemoteSearchQuery.cs19
-rw-r--r--MediaBrowser.Controller/Providers/SeasonIdentity.cs11
-rw-r--r--MediaBrowser.Controller/Providers/SeasonInfo.cs32
-rw-r--r--MediaBrowser.Controller/Providers/SeriesIdentity.cs9
-rw-r--r--MediaBrowser.Controller/Providers/SeriesInfo.cs25
-rw-r--r--MediaBrowser.Controller/Providers/SeriesOrderTypes.cs7
-rw-r--r--MediaBrowser.Controller/Providers/SongInfo.cs17
-rw-r--r--MediaBrowser.Controller/Providers/TrailerInfo.cs7
-rw-r--r--MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs13
-rw-r--r--MediaBrowser.Providers/Manager/ItemImageProvider.cs6
-rw-r--r--MediaBrowser.Server.Implementations/Photos/BaseDynamicImageProvider.cs103
-rw-r--r--MediaBrowser.Server.Implementations/Photos/DynamicImageProvider.cs2
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;