mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-08 23:00:51 +02:00
update default image providers
This commit is contained in:
parent
e7d5532bee
commit
caadb4f374
|
@ -247,22 +247,67 @@
|
||||||
<Compile Include="Persistence\MediaStreamQuery.cs" />
|
<Compile Include="Persistence\MediaStreamQuery.cs" />
|
||||||
<Compile Include="Playlists\IPlaylistManager.cs" />
|
<Compile Include="Playlists\IPlaylistManager.cs" />
|
||||||
<Compile Include="Playlists\Playlist.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\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\ICustomMetadataProvider.cs" />
|
||||||
|
<Compile Include="Providers\IDirectoryService.cs" />
|
||||||
|
<Compile Include="Providers\IDynamicImageProvider.cs" />
|
||||||
<Compile Include="Providers\IExternalId.cs" />
|
<Compile Include="Providers\IExternalId.cs" />
|
||||||
<Compile Include="Providers\IExtrasProvider.cs" />
|
<Compile Include="Providers\IExtrasProvider.cs" />
|
||||||
<Compile Include="Providers\IForcedProvider.cs" />
|
<Compile Include="Providers\IForcedProvider.cs" />
|
||||||
<Compile Include="Providers\IHasChangeMonitor.cs" />
|
<Compile Include="Providers\IHasChangeMonitor.cs" />
|
||||||
<Compile Include="Entities\IHasMetadata.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\IImageProvider.cs" />
|
||||||
<Compile Include="Providers\IImageSaver.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\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\IProviderRepository.cs" />
|
||||||
<Compile Include="Providers\IRemoteImageProvider.cs" />
|
<Compile Include="Providers\IRemoteImageProvider.cs" />
|
||||||
<Compile Include="Providers\ILocalImageProvider.cs" />
|
<Compile Include="Providers\ILocalImageProvider.cs" />
|
||||||
<Compile Include="Providers\IMetadataProvider.cs" />
|
<Compile Include="Providers\IMetadataProvider.cs" />
|
||||||
<Compile Include="Providers\IMetadataService.cs" />
|
<Compile Include="Providers\IMetadataService.cs" />
|
||||||
<Compile Include="Providers\IRemoteMetadataProvider.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="Providers\VideoContentType.cs" />
|
||||||
<Compile Include="RelatedMedia\IRelatedMediaProvider.cs" />
|
<Compile Include="RelatedMedia\IRelatedMediaProvider.cs" />
|
||||||
<Compile Include="Security\AuthenticationInfo.cs" />
|
<Compile Include="Security\AuthenticationInfo.cs" />
|
||||||
|
|
28
MediaBrowser.Controller/Providers/AlbumInfo.cs
Normal file
28
MediaBrowser.Controller/Providers/AlbumInfo.cs
Normal file
|
@ -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>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
MediaBrowser.Controller/Providers/ArtistInfo.cs
Normal file
14
MediaBrowser.Controller/Providers/ArtistInfo.cs
Normal file
|
@ -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>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
7
MediaBrowser.Controller/Providers/BookInfo.cs
Normal file
7
MediaBrowser.Controller/Providers/BookInfo.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public class BookInfo : ItemLookupInfo
|
||||||
|
{
|
||||||
|
public string SeriesName { get; set; }
|
||||||
|
}
|
||||||
|
}
|
7
MediaBrowser.Controller/Providers/BoxSetInfo.cs
Normal file
7
MediaBrowser.Controller/Providers/BoxSetInfo.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public class BoxSetInfo : ItemLookupInfo
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
11
MediaBrowser.Controller/Providers/ChannelItemLookupInfo.cs
Normal file
11
MediaBrowser.Controller/Providers/ChannelItemLookupInfo.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,16 +7,6 @@ using System.Linq;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Providers
|
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
|
public class DirectoryService : IDirectoryService
|
||||||
{
|
{
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
10
MediaBrowser.Controller/Providers/DynamicImageInfo.cs
Normal file
10
MediaBrowser.Controller/Providers/DynamicImageInfo.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
35
MediaBrowser.Controller/Providers/DynamicImageResponse.cs
Normal file
35
MediaBrowser.Controller/Providers/DynamicImageResponse.cs
Normal file
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
MediaBrowser.Controller/Providers/EpisodeIdentity.cs
Normal file
12
MediaBrowser.Controller/Providers/EpisodeIdentity.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
34
MediaBrowser.Controller/Providers/EpisodeInfo.cs
Normal file
34
MediaBrowser.Controller/Providers/EpisodeInfo.cs
Normal file
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
MediaBrowser.Controller/Providers/ExtraInfo.cs
Normal file
15
MediaBrowser.Controller/Providers/ExtraInfo.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
9
MediaBrowser.Controller/Providers/ExtraSource.cs
Normal file
9
MediaBrowser.Controller/Providers/ExtraSource.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public enum ExtraSource
|
||||||
|
{
|
||||||
|
Local = 1,
|
||||||
|
Metadata = 2,
|
||||||
|
Remote = 3
|
||||||
|
}
|
||||||
|
}
|
11
MediaBrowser.Controller/Providers/GameInfo.cs
Normal file
11
MediaBrowser.Controller/Providers/GameInfo.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
11
MediaBrowser.Controller/Providers/GameSystemInfo.cs
Normal file
11
MediaBrowser.Controller/Providers/GameSystemInfo.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,9 +21,4 @@ namespace MediaBrowser.Controller.Providers
|
||||||
/// <returns>Task{ItemUpdateType}.</returns>
|
/// <returns>Task{ItemUpdateType}.</returns>
|
||||||
Task<ItemUpdateType> FetchAsync(TItemType item, MetadataRefreshOptions options, CancellationToken cancellationToken);
|
Task<ItemUpdateType> FetchAsync(TItemType item, MetadataRefreshOptions options, CancellationToken cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IPreRefreshProvider : ICustomMetadataProvider
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
15
MediaBrowser.Controller/Providers/IDirectoryService.cs
Normal file
15
MediaBrowser.Controller/Providers/IDirectoryService.cs
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
27
MediaBrowser.Controller/Providers/IDynamicImageProvider.cs
Normal file
27
MediaBrowser.Controller/Providers/IDynamicImageProvider.cs
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,4 @@
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Providers
|
namespace MediaBrowser.Controller.Providers
|
||||||
{
|
{
|
||||||
|
@ -18,22 +17,4 @@ namespace MediaBrowser.Controller.Providers
|
||||||
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
||||||
bool Supports(IHasMetadata item);
|
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; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,16 +14,4 @@ namespace MediaBrowser.Controller.Providers
|
||||||
/// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns>
|
/// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns>
|
||||||
bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
14
MediaBrowser.Controller/Providers/IHasIdentities.cs
Normal file
14
MediaBrowser.Controller/Providers/IHasIdentities.cs
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
16
MediaBrowser.Controller/Providers/IHasItemChangeMonitor.cs
Normal file
16
MediaBrowser.Controller/Providers/IHasItemChangeMonitor.cs
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
8
MediaBrowser.Controller/Providers/IHasLookupInfo.cs
Normal file
8
MediaBrowser.Controller/Providers/IHasLookupInfo.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public interface IHasLookupInfo<out TLookupInfoType>
|
||||||
|
where TLookupInfoType : ItemLookupInfo, new()
|
||||||
|
{
|
||||||
|
TLookupInfoType GetLookupInfo();
|
||||||
|
}
|
||||||
|
}
|
7
MediaBrowser.Controller/Providers/IHasOrder.cs
Normal file
7
MediaBrowser.Controller/Providers/IHasOrder.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public interface IHasOrder
|
||||||
|
{
|
||||||
|
int Order { get; }
|
||||||
|
}
|
||||||
|
}
|
20
MediaBrowser.Controller/Providers/IImageFileSaver.cs
Normal file
20
MediaBrowser.Controller/Providers/IImageFileSaver.cs
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +1,4 @@
|
||||||
using MediaBrowser.Controller.Entities;
|
namespace MediaBrowser.Controller.Providers
|
||||||
using MediaBrowser.Model.Drawing;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Providers
|
|
||||||
{
|
{
|
||||||
public interface IImageSaver
|
public interface IImageSaver
|
||||||
{
|
{
|
||||||
|
@ -13,17 +8,4 @@ namespace MediaBrowser.Controller.Providers
|
||||||
/// <value>The name.</value>
|
/// <value>The name.</value>
|
||||||
string Name { get; }
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
7
MediaBrowser.Controller/Providers/IItemIdentity.cs
Normal file
7
MediaBrowser.Controller/Providers/IItemIdentity.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public interface IItemIdentity
|
||||||
|
{
|
||||||
|
string Type { get; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public interface IItemIdentityConverter : IHasOrder { }
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public interface IItemIdentityProvider : IHasOrder { }
|
||||||
|
}
|
10
MediaBrowser.Controller/Providers/ILocalImageFileProvider.cs
Normal file
10
MediaBrowser.Controller/Providers/ILocalImageFileProvider.cs
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,13 +1,4 @@
|
||||||
using MediaBrowser.Controller.Entities;
|
namespace MediaBrowser.Controller.Providers
|
||||||
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
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is just a marker interface
|
/// This is just a marker interface
|
||||||
|
@ -15,68 +6,4 @@ namespace MediaBrowser.Controller.Providers
|
||||||
public interface ILocalImageProvider : IImageProvider
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -24,29 +22,4 @@ namespace MediaBrowser.Controller.Providers
|
||||||
IDirectoryService directoryService,
|
IDirectoryService directoryService,
|
||||||
CancellationToken cancellationToken);
|
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>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,15 +19,4 @@ namespace MediaBrowser.Controller.Providers
|
||||||
where TItemType : IHasMetadata
|
where TItemType : IHasMetadata
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IHasOrder
|
|
||||||
{
|
|
||||||
int Order { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class MetadataResult<T>
|
|
||||||
{
|
|
||||||
public bool HasMetadata { get; set; }
|
|
||||||
public T Item { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
7
MediaBrowser.Controller/Providers/IPreRefreshProvider.cs
Normal file
7
MediaBrowser.Controller/Providers/IPreRefreshProvider.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public interface IPreRefreshProvider : ICustomMetadataProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,4 @@
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Model.Providers;
|
using MediaBrowser.Model.Providers;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
@ -18,37 +17,9 @@ namespace MediaBrowser.Controller.Providers
|
||||||
Task<MetadataResult<TItemType>> GetMetadata(TLookupInfoType info, CancellationToken cancellationToken);
|
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
|
public interface IRemoteSearchProvider<in TLookupInfoType> : IRemoteSearchProvider
|
||||||
where TLookupInfoType : ItemLookupInfo
|
where TLookupInfoType : ItemLookupInfo
|
||||||
{
|
{
|
||||||
Task<IEnumerable<RemoteSearchResult>> GetSearchResults(TLookupInfoType searchInfo, CancellationToken cancellationToken);
|
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; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
17
MediaBrowser.Controller/Providers/IRemoteSearchProvider.cs
Normal file
17
MediaBrowser.Controller/Providers/IRemoteSearchProvider.cs
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,17 +7,6 @@ using MediaBrowser.Common;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Providers
|
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
|
public interface ISeriesOrderManager
|
||||||
{
|
{
|
||||||
Task<int?> FindSeriesIndex(string orderType, string seriesName);
|
Task<int?> FindSeriesIndex(string orderType, string seriesName);
|
||||||
|
|
10
MediaBrowser.Controller/Providers/ISeriesOrderProvider.cs
Normal file
10
MediaBrowser.Controller/Providers/ISeriesOrderProvider.cs
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public interface ISeriesOrderProvider
|
||||||
|
{
|
||||||
|
string OrderType { get; }
|
||||||
|
Task<int?> FindSeriesIndex(string seriesName);
|
||||||
|
}
|
||||||
|
}
|
25
MediaBrowser.Controller/Providers/ImageRefreshMode.cs
Normal file
25
MediaBrowser.Controller/Providers/ImageRefreshMode.cs
Normal file
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
29
MediaBrowser.Controller/Providers/ImageRefreshOptions.cs
Normal file
29
MediaBrowser.Controller/Providers/ImageRefreshOptions.cs
Normal file
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,24 +1,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Threading.Tasks;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Providers
|
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
|
public interface IItemIdentityProvider<in TLookupInfo, TIdentity> : IItemIdentityProvider
|
||||||
where TLookupInfo : ItemLookupInfo
|
where TLookupInfo : ItemLookupInfo
|
||||||
where TIdentity : IItemIdentity
|
where TIdentity : IItemIdentity
|
||||||
|
@ -26,8 +9,6 @@ namespace MediaBrowser.Controller.Providers
|
||||||
Task<TIdentity> FindIdentity(TLookupInfo info);
|
Task<TIdentity> FindIdentity(TLookupInfo info);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IItemIdentityConverter : IHasOrder { }
|
|
||||||
|
|
||||||
public interface IItemIdentityConverter<TIdentity> : IItemIdentityConverter
|
public interface IItemIdentityConverter<TIdentity> : IItemIdentityConverter
|
||||||
where TIdentity : IItemIdentity
|
where TIdentity : IItemIdentity
|
||||||
{
|
{
|
||||||
|
|
9
MediaBrowser.Controller/Providers/ItemInfo.cs
Normal file
9
MediaBrowser.Controller/Providers/ItemInfo.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public class ItemInfo
|
||||||
|
{
|
||||||
|
public string Path { get; set; }
|
||||||
|
|
||||||
|
public bool IsInMixedFolder { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,4 @@
|
||||||
using System.Linq;
|
using MediaBrowser.Model.Entities;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MediaBrowser.Model.Channels;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
@ -43,204 +39,4 @@ namespace MediaBrowser.Controller.Providers
|
||||||
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
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; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
11
MediaBrowser.Controller/Providers/LocalImageInfo.cs
Normal file
11
MediaBrowser.Controller/Providers/LocalImageInfo.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
24
MediaBrowser.Controller/Providers/LocalMetadataResult.cs
Normal file
24
MediaBrowser.Controller/Providers/LocalMetadataResult.cs
Normal file
|
@ -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>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
MediaBrowser.Controller/Providers/MetadataRefreshMode.cs
Normal file
25
MediaBrowser.Controller/Providers/MetadataRefreshMode.cs
Normal file
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,4 @@
|
||||||
using MediaBrowser.Model.Entities;
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Providers
|
namespace MediaBrowser.Controller.Providers
|
||||||
{
|
{
|
||||||
|
@ -40,74 +38,4 @@ namespace MediaBrowser.Controller.Providers
|
||||||
ReplaceImages = copy.ReplaceImages.ToList();
|
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
8
MediaBrowser.Controller/Providers/MetadataResult.cs
Normal file
8
MediaBrowser.Controller/Providers/MetadataResult.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public class MetadataResult<T>
|
||||||
|
{
|
||||||
|
public bool HasMetadata { get; set; }
|
||||||
|
public T Item { get; set; }
|
||||||
|
}
|
||||||
|
}
|
7
MediaBrowser.Controller/Providers/MovieInfo.cs
Normal file
7
MediaBrowser.Controller/Providers/MovieInfo.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public class MovieInfo : ItemLookupInfo
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
7
MediaBrowser.Controller/Providers/MusicVideoInfo.cs
Normal file
7
MediaBrowser.Controller/Providers/MusicVideoInfo.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public class MusicVideoInfo : ItemLookupInfo
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
7
MediaBrowser.Controller/Providers/PersonLookupInfo.cs
Normal file
7
MediaBrowser.Controller/Providers/PersonLookupInfo.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public class PersonLookupInfo : ItemLookupInfo
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
19
MediaBrowser.Controller/Providers/RemoteSearchQuery.cs
Normal file
19
MediaBrowser.Controller/Providers/RemoteSearchQuery.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
11
MediaBrowser.Controller/Providers/SeasonIdentity.cs
Normal file
11
MediaBrowser.Controller/Providers/SeasonIdentity.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
32
MediaBrowser.Controller/Providers/SeasonInfo.cs
Normal file
32
MediaBrowser.Controller/Providers/SeasonInfo.cs
Normal file
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
MediaBrowser.Controller/Providers/SeriesIdentity.cs
Normal file
9
MediaBrowser.Controller/Providers/SeriesIdentity.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public class SeriesIdentity : IItemIdentity
|
||||||
|
{
|
||||||
|
public string Type { get; set; }
|
||||||
|
|
||||||
|
public string Id { get; set; }
|
||||||
|
}
|
||||||
|
}
|
25
MediaBrowser.Controller/Providers/SeriesInfo.cs
Normal file
25
MediaBrowser.Controller/Providers/SeriesInfo.cs
Normal file
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
7
MediaBrowser.Controller/Providers/SeriesOrderTypes.cs
Normal file
7
MediaBrowser.Controller/Providers/SeriesOrderTypes.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public static class SeriesOrderTypes
|
||||||
|
{
|
||||||
|
public const string Anime = "Anime";
|
||||||
|
}
|
||||||
|
}
|
17
MediaBrowser.Controller/Providers/SongInfo.cs
Normal file
17
MediaBrowser.Controller/Providers/SongInfo.cs
Normal file
|
@ -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>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
7
MediaBrowser.Controller/Providers/TrailerInfo.cs
Normal file
7
MediaBrowser.Controller/Providers/TrailerInfo.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace MediaBrowser.Controller.Providers
|
||||||
|
{
|
||||||
|
public class TrailerInfo : ItemLookupInfo
|
||||||
|
{
|
||||||
|
public bool IsLocalTrailer { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MediaBrowser.Providers.FolderImages
|
namespace MediaBrowser.Providers.FolderImages
|
||||||
{
|
{
|
||||||
public class DefaultImageProvider : IRemoteImageProvider, IHasItemChangeMonitor
|
public class DefaultImageProvider : IRemoteImageProvider, IHasItemChangeMonitor, IHasOrder
|
||||||
{
|
{
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClient _httpClient;
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ namespace MediaBrowser.Providers.FolderImages
|
||||||
|
|
||||||
public bool Supports(IHasImages item)
|
public bool Supports(IHasImages item)
|
||||||
{
|
{
|
||||||
return item is ICollectionFolder;
|
return item is ICollectionFolder || item is UserView;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||||
|
@ -140,5 +140,14 @@ namespace MediaBrowser.Providers.FolderImages
|
||||||
{
|
{
|
||||||
return GetSupportedImages(item).Any(i => !item.HasImage(i));
|
return GetSupportedImages(item).Any(i => !item.HasImage(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int Order
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
// Run after the dynamic image provider
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,17 +135,17 @@ namespace MediaBrowser.Providers.Manager
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(response.Path))
|
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);
|
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
|
else
|
||||||
{
|
{
|
||||||
var mimeType = "image/" + response.Format.ToString().ToLower();
|
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);
|
downloadedImages.Add(imageType);
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Common.IO;
|
using MediaBrowser.Common.IO;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Providers;
|
||||||
|
using MediaBrowser.Model.Drawing;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -15,7 +15,7 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Implementations.Photos
|
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
|
where T : IHasMetadata
|
||||||
{
|
{
|
||||||
protected IFileSystem FileSystem { get; private set; }
|
protected IFileSystem FileSystem { get; private set; }
|
||||||
|
@ -29,81 +29,51 @@ namespace MediaBrowser.Server.Implementations.Photos
|
||||||
FileSystem = fileSystem;
|
FileSystem = fileSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ItemUpdateType> FetchAsync(T item, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
public virtual bool Supports(IHasImages item)
|
||||||
{
|
{
|
||||||
if (!Supports(item))
|
return item is T;
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual bool Supports(IHasImages item)
|
public IEnumerable<ImageType> GetSupportedImages(IHasImages item)
|
||||||
{
|
{
|
||||||
return true;
|
return new List<ImageType>
|
||||||
|
{
|
||||||
|
ImageType.Primary,
|
||||||
|
ImageType.Thumb
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var items = await GetItemsWithImages(item).ConfigureAwait(false);
|
||||||
|
var cacheKey = GetConfigurationCacheKey(items);
|
||||||
|
|
||||||
|
var result = await FetchAsyncInternal(item, items, type, cacheKey, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
return new DynamicImageResponse
|
||||||
|
{
|
||||||
|
HasImage = result != null,
|
||||||
|
Stream = result,
|
||||||
|
InternalCacheKey = cacheKey,
|
||||||
|
Format = ImageFormat.Png
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Task<List<BaseItem>> GetItemsWithImages(IHasImages item);
|
protected abstract Task<List<BaseItem>> GetItemsWithImages(IHasImages item);
|
||||||
|
|
||||||
private const string Version = "3";
|
private const string Version = "3";
|
||||||
protected string GetConfigurationCacheKey(List<BaseItem> items)
|
protected string GetConfigurationCacheKey(List<BaseItem> items)
|
||||||
{
|
{
|
||||||
return (Version + "_" + string.Join(",", items.Select(i => i.Id.ToString("N")).ToArray())).GetMD5().ToString("N");
|
return (Version + "_" + string.Join(",", items.Select(i => i.Id.ToString("N")).ToArray())).GetMD5().ToString("N");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task<ItemUpdateType> FetchAsync(IHasImages item, ImageType imageType, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
protected Task<Stream> FetchAsyncInternal(IHasImages item,
|
||||||
{
|
|
||||||
var items = await GetItemsWithImages(item).ConfigureAwait(false);
|
|
||||||
var cacheKey = GetConfigurationCacheKey(items);
|
|
||||||
|
|
||||||
if (!HasChanged(item, imageType, cacheKey))
|
|
||||||
{
|
|
||||||
return ItemUpdateType.None;
|
|
||||||
}
|
|
||||||
|
|
||||||
return await FetchAsyncInternal(item, items, imageType, cacheKey, options, cancellationToken).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task<ItemUpdateType> FetchAsyncInternal(IHasImages item,
|
|
||||||
List<BaseItem> itemsWithImages,
|
List<BaseItem> itemsWithImages,
|
||||||
ImageType imageType,
|
ImageType imageType,
|
||||||
string cacheKey,
|
string cacheKey,
|
||||||
MetadataRefreshOptions options,
|
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var stream = await CreateImageAsync(item, itemsWithImages, imageType, 0).ConfigureAwait(false);
|
return CreateImageAsync(item, itemsWithImages, imageType, 0);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Task<Stream> GetThumbCollage(List<BaseItem> items)
|
protected Task<Stream> GetThumbCollage(List<BaseItem> items)
|
||||||
|
@ -137,9 +107,9 @@ namespace MediaBrowser.Server.Implementations.Photos
|
||||||
get { return "Dynamic Image Provider"; }
|
get { return "Dynamic Image Provider"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Stream> CreateImageAsync(IHasImages item,
|
public async Task<Stream> CreateImageAsync(IHasImages item,
|
||||||
List<BaseItem> itemsWithImages,
|
List<BaseItem> itemsWithImages,
|
||||||
ImageType imageType,
|
ImageType imageType,
|
||||||
int imageIndex)
|
int imageIndex)
|
||||||
{
|
{
|
||||||
if (itemsWithImages.Count == 0)
|
if (itemsWithImages.Count == 0)
|
||||||
|
@ -209,5 +179,14 @@ namespace MediaBrowser.Server.Implementations.Photos
|
||||||
|
|
||||||
return weekNo;
|
return weekNo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int Order
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
// Run before the default image provider which will download placeholders
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ namespace MediaBrowser.Server.Implementations.Photos
|
||||||
return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary)).ToList());
|
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;
|
var view = item as UserView;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue