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