mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-05 21:33:02 +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="Playlists\IPlaylistManager.cs" />
|
||||
<Compile Include="Playlists\Playlist.cs" />
|
||||
<Compile Include="Providers\AlbumInfo.cs" />
|
||||
<Compile Include="Providers\ArtistInfo.cs" />
|
||||
<Compile Include="Providers\BookInfo.cs" />
|
||||
<Compile Include="Providers\BoxSetInfo.cs" />
|
||||
<Compile Include="Providers\ChannelItemLookupInfo.cs" />
|
||||
<Compile Include="Providers\DirectoryService.cs" />
|
||||
<Compile Include="Providers\DynamicImageInfo.cs" />
|
||||
<Compile Include="Providers\DynamicImageResponse.cs" />
|
||||
<Compile Include="Providers\EpisodeIdentity.cs" />
|
||||
<Compile Include="Providers\EpisodeInfo.cs" />
|
||||
<Compile Include="Providers\ExtraInfo.cs" />
|
||||
<Compile Include="Providers\ExtraSource.cs" />
|
||||
<Compile Include="Providers\GameInfo.cs" />
|
||||
<Compile Include="Providers\GameSystemInfo.cs" />
|
||||
<Compile Include="Providers\ICustomMetadataProvider.cs" />
|
||||
<Compile Include="Providers\IDirectoryService.cs" />
|
||||
<Compile Include="Providers\IDynamicImageProvider.cs" />
|
||||
<Compile Include="Providers\IExternalId.cs" />
|
||||
<Compile Include="Providers\IExtrasProvider.cs" />
|
||||
<Compile Include="Providers\IForcedProvider.cs" />
|
||||
<Compile Include="Providers\IHasChangeMonitor.cs" />
|
||||
<Compile Include="Entities\IHasMetadata.cs" />
|
||||
<Compile Include="Providers\IHasIdentities.cs" />
|
||||
<Compile Include="Providers\IHasItemChangeMonitor.cs" />
|
||||
<Compile Include="Providers\IHasLookupInfo.cs" />
|
||||
<Compile Include="Providers\IHasOrder.cs" />
|
||||
<Compile Include="Providers\IImageFileSaver.cs" />
|
||||
<Compile Include="Providers\IImageProvider.cs" />
|
||||
<Compile Include="Providers\IImageSaver.cs" />
|
||||
<Compile Include="Providers\IItemIdentity.cs" />
|
||||
<Compile Include="Providers\IItemIdentityConverter.cs" />
|
||||
<Compile Include="Providers\IItemIdentityProvider.cs" />
|
||||
<Compile Include="Providers\ILocalImageFileProvider.cs" />
|
||||
<Compile Include="Providers\ILocalMetadataProvider.cs" />
|
||||
<Compile Include="Providers\ImageRefreshMode.cs" />
|
||||
<Compile Include="Providers\ImageRefreshOptions.cs" />
|
||||
<Compile Include="Providers\IPreRefreshProvider.cs" />
|
||||
<Compile Include="Providers\IProviderRepository.cs" />
|
||||
<Compile Include="Providers\IRemoteImageProvider.cs" />
|
||||
<Compile Include="Providers\ILocalImageProvider.cs" />
|
||||
<Compile Include="Providers\IMetadataProvider.cs" />
|
||||
<Compile Include="Providers\IMetadataService.cs" />
|
||||
<Compile Include="Providers\IRemoteMetadataProvider.cs" />
|
||||
<Compile Include="Providers\IRemoteSearchProvider.cs" />
|
||||
<Compile Include="Providers\ISeriesOrderProvider.cs" />
|
||||
<Compile Include="Providers\ItemInfo.cs" />
|
||||
<Compile Include="Providers\LocalImageInfo.cs" />
|
||||
<Compile Include="Providers\LocalMetadataResult.cs" />
|
||||
<Compile Include="Providers\MetadataRefreshMode.cs" />
|
||||
<Compile Include="Providers\MetadataResult.cs" />
|
||||
<Compile Include="Providers\MovieInfo.cs" />
|
||||
<Compile Include="Providers\MusicVideoInfo.cs" />
|
||||
<Compile Include="Providers\PersonLookupInfo.cs" />
|
||||
<Compile Include="Providers\RemoteSearchQuery.cs" />
|
||||
<Compile Include="Providers\SeasonIdentity.cs" />
|
||||
<Compile Include="Providers\SeasonInfo.cs" />
|
||||
<Compile Include="Providers\SeriesIdentity.cs" />
|
||||
<Compile Include="Providers\SeriesInfo.cs" />
|
||||
<Compile Include="Providers\SeriesOrderTypes.cs" />
|
||||
<Compile Include="Providers\SongInfo.cs" />
|
||||
<Compile Include="Providers\TrailerInfo.cs" />
|
||||
<Compile Include="Providers\VideoContentType.cs" />
|
||||
<Compile Include="RelatedMedia\IRelatedMediaProvider.cs" />
|
||||
<Compile Include="Security\AuthenticationInfo.cs" />
|
||||
|
|
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
|
||||
{
|
||||
public interface IDirectoryService
|
||||
{
|
||||
IEnumerable<FileSystemInfo> GetFileSystemEntries(string path);
|
||||
IEnumerable<FileSystemInfo> GetFiles(string path);
|
||||
IEnumerable<FileSystemInfo> GetDirectories(string path);
|
||||
IEnumerable<FileSystemInfo> GetFiles(string path, bool clearCache);
|
||||
FileSystemInfo GetFile(string path);
|
||||
Dictionary<string, FileSystemInfo> GetFileSystemDictionary(string path);
|
||||
}
|
||||
|
||||
public class DirectoryService : IDirectoryService
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
|
|
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>
|
||||
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.Model.Entities;
|
||||
|
||||
namespace MediaBrowser.Controller.Providers
|
||||
{
|
||||
|
@ -18,22 +17,4 @@ namespace MediaBrowser.Controller.Providers
|
|||
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
||||
bool Supports(IHasMetadata item);
|
||||
}
|
||||
|
||||
public enum ExtraSource
|
||||
{
|
||||
Local = 1,
|
||||
Metadata = 2,
|
||||
Remote = 3
|
||||
}
|
||||
|
||||
public class ExtraInfo
|
||||
{
|
||||
public string Path { get; set; }
|
||||
|
||||
public LocationType LocationType { get; set; }
|
||||
|
||||
public bool IsDownloadable { get; set; }
|
||||
|
||||
public ExtraType ExtraType { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,16 +14,4 @@ namespace MediaBrowser.Controller.Providers
|
|||
/// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns>
|
||||
bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date);
|
||||
}
|
||||
|
||||
public interface IHasItemChangeMonitor
|
||||
{
|
||||
/// <summary>
|
||||
/// Determines whether the specified item has changed.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="status">The status.</param>
|
||||
/// <param name="directoryService">The directory service.</param>
|
||||
/// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns>
|
||||
bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService);
|
||||
}
|
||||
}
|
||||
|
|
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;
|
||||
using MediaBrowser.Model.Drawing;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MediaBrowser.Controller.Providers
|
||||
namespace MediaBrowser.Controller.Providers
|
||||
{
|
||||
public interface IImageSaver
|
||||
{
|
||||
|
@ -13,17 +8,4 @@ namespace MediaBrowser.Controller.Providers
|
|||
/// <value>The name.</value>
|
||||
string Name { get; }
|
||||
}
|
||||
|
||||
public interface IImageFileSaver : IImageSaver
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the save paths.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <param name="format">The format.</param>
|
||||
/// <param name="index">The index.</param>
|
||||
/// <returns>IEnumerable{System.String}.</returns>
|
||||
IEnumerable<string> GetSavePaths(IHasImages item, ImageType type, ImageFormat format, int index);
|
||||
}
|
||||
}
|
||||
|
|
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;
|
||||
using MediaBrowser.Model.Drawing;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Controller.Providers
|
||||
namespace MediaBrowser.Controller.Providers
|
||||
{
|
||||
/// <summary>
|
||||
/// This is just a marker interface
|
||||
|
@ -15,68 +6,4 @@ namespace MediaBrowser.Controller.Providers
|
|||
public interface ILocalImageProvider : IImageProvider
|
||||
{
|
||||
}
|
||||
|
||||
public interface ILocalImageFileProvider : ILocalImageProvider
|
||||
{
|
||||
List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService);
|
||||
}
|
||||
|
||||
public class LocalImageInfo
|
||||
{
|
||||
public FileSystemInfo FileInfo { get; set; }
|
||||
public ImageType Type { get; set; }
|
||||
}
|
||||
|
||||
public interface IDynamicImageProvider : IImageProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the supported images.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <returns>IEnumerable{ImageType}.</returns>
|
||||
IEnumerable<ImageType> GetSupportedImages(IHasImages item);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the image.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task{DynamicImageResponse}.</returns>
|
||||
Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken);
|
||||
}
|
||||
|
||||
public class DynamicImageInfo
|
||||
{
|
||||
public string ImageId { get; set; }
|
||||
public ImageType Type { get; set; }
|
||||
}
|
||||
|
||||
public class DynamicImageResponse
|
||||
{
|
||||
public string Path { get; set; }
|
||||
public Stream Stream { get; set; }
|
||||
public ImageFormat Format { get; set; }
|
||||
public bool HasImage { get; set; }
|
||||
|
||||
public void SetFormatFromMimeType(string mimeType)
|
||||
{
|
||||
if (mimeType.EndsWith("gif", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Format = ImageFormat.Gif;
|
||||
}
|
||||
else if (mimeType.EndsWith("bmp", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Format = ImageFormat.Bmp;
|
||||
}
|
||||
else if (mimeType.EndsWith("png", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Format = ImageFormat.Png;
|
||||
}
|
||||
else
|
||||
{
|
||||
Format = ImageFormat.Jpg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
@ -24,29 +22,4 @@ namespace MediaBrowser.Controller.Providers
|
|||
IDirectoryService directoryService,
|
||||
CancellationToken cancellationToken);
|
||||
}
|
||||
|
||||
public class ItemInfo
|
||||
{
|
||||
public string Path { get; set; }
|
||||
|
||||
public bool IsInMixedFolder { get; set; }
|
||||
}
|
||||
|
||||
public class LocalMetadataResult<T>
|
||||
where T : IHasMetadata
|
||||
{
|
||||
public bool HasMetadata { get; set; }
|
||||
public T Item { get; set; }
|
||||
|
||||
public List<LocalImageInfo> Images { get; set; }
|
||||
public List<ChapterInfo> Chapters { get; set; }
|
||||
public List<UserItemData> UserDataLIst { get; set; }
|
||||
|
||||
public LocalMetadataResult()
|
||||
{
|
||||
Images = new List<LocalImageInfo>();
|
||||
Chapters = new List<ChapterInfo>();
|
||||
UserDataLIst = new List<UserItemData>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,15 +19,4 @@ namespace MediaBrowser.Controller.Providers
|
|||
where TItemType : IHasMetadata
|
||||
{
|
||||
}
|
||||
|
||||
public interface IHasOrder
|
||||
{
|
||||
int Order { get; }
|
||||
}
|
||||
|
||||
public class MetadataResult<T>
|
||||
{
|
||||
public bool HasMetadata { get; set; }
|
||||
public T Item { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
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 System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
@ -18,37 +17,9 @@ namespace MediaBrowser.Controller.Providers
|
|||
Task<MetadataResult<TItemType>> GetMetadata(TLookupInfoType info, CancellationToken cancellationToken);
|
||||
}
|
||||
|
||||
public interface IRemoteSearchProvider : IMetadataProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the image response.
|
||||
/// </summary>
|
||||
/// <param name="url">The URL.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task{HttpResponseInfo}.</returns>
|
||||
Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken);
|
||||
}
|
||||
|
||||
public interface IRemoteSearchProvider<in TLookupInfoType> : IRemoteSearchProvider
|
||||
where TLookupInfoType : ItemLookupInfo
|
||||
{
|
||||
Task<IEnumerable<RemoteSearchResult>> GetSearchResults(TLookupInfoType searchInfo, CancellationToken cancellationToken);
|
||||
}
|
||||
|
||||
public class RemoteSearchQuery<T>
|
||||
where T : ItemLookupInfo
|
||||
{
|
||||
public T SearchInfo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If set will only search within the given provider
|
||||
/// </summary>
|
||||
public string SearchProviderName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether [include disabled providers].
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if [include disabled providers]; otherwise, <c>false</c>.</value>
|
||||
public bool IncludeDisabledProviders { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
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
|
||||
{
|
||||
public interface ISeriesOrderProvider
|
||||
{
|
||||
string OrderType { get; }
|
||||
Task<int?> FindSeriesIndex(string seriesName);
|
||||
}
|
||||
|
||||
public static class SeriesOrderTypes
|
||||
{
|
||||
public const string Anime = "Anime";
|
||||
}
|
||||
|
||||
public interface ISeriesOrderManager
|
||||
{
|
||||
Task<int?> FindSeriesIndex(string orderType, string seriesName);
|
||||
|
|
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;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Controller.Providers
|
||||
{
|
||||
public interface IItemIdentity
|
||||
{
|
||||
string Type { get; }
|
||||
}
|
||||
|
||||
public interface IHasIdentities<out TIdentity>
|
||||
where TIdentity : IItemIdentity
|
||||
{
|
||||
IEnumerable<TIdentity> Identities { get; }
|
||||
|
||||
Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken);
|
||||
}
|
||||
|
||||
public interface IItemIdentityProvider : IHasOrder { }
|
||||
|
||||
public interface IItemIdentityProvider<in TLookupInfo, TIdentity> : IItemIdentityProvider
|
||||
where TLookupInfo : ItemLookupInfo
|
||||
where TIdentity : IItemIdentity
|
||||
|
@ -26,8 +9,6 @@ namespace MediaBrowser.Controller.Providers
|
|||
Task<TIdentity> FindIdentity(TLookupInfo info);
|
||||
}
|
||||
|
||||
public interface IItemIdentityConverter : IHasOrder { }
|
||||
|
||||
public interface IItemIdentityConverter<TIdentity> : IItemIdentityConverter
|
||||
where TIdentity : IItemIdentity
|
||||
{
|
||||
|
|
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 System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Model.Channels;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
|
@ -43,204 +39,4 @@ namespace MediaBrowser.Controller.Providers
|
|||
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
|
||||
public interface IHasLookupInfo<out TLookupInfoType>
|
||||
where TLookupInfoType : ItemLookupInfo, new()
|
||||
{
|
||||
TLookupInfoType GetLookupInfo();
|
||||
}
|
||||
|
||||
public class ArtistInfo : ItemLookupInfo
|
||||
{
|
||||
public List<SongInfo> SongInfos { get; set; }
|
||||
|
||||
public ArtistInfo()
|
||||
{
|
||||
SongInfos = new List<SongInfo>();
|
||||
}
|
||||
}
|
||||
|
||||
public class AlbumInfo : ItemLookupInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the album artist.
|
||||
/// </summary>
|
||||
/// <value>The album artist.</value>
|
||||
public List<string> AlbumArtists { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the artist provider ids.
|
||||
/// </summary>
|
||||
/// <value>The artist provider ids.</value>
|
||||
public Dictionary<string, string> ArtistProviderIds { get; set; }
|
||||
public List<SongInfo> SongInfos { get; set; }
|
||||
|
||||
public AlbumInfo()
|
||||
{
|
||||
ArtistProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
SongInfos = new List<SongInfo>();
|
||||
AlbumArtists = new List<string>();
|
||||
}
|
||||
}
|
||||
|
||||
public class GameInfo : ItemLookupInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the game system.
|
||||
/// </summary>
|
||||
/// <value>The game system.</value>
|
||||
public string GameSystem { get; set; }
|
||||
}
|
||||
|
||||
public class GameSystemInfo : ItemLookupInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the path.
|
||||
/// </summary>
|
||||
/// <value>The path.</value>
|
||||
public string Path { get; set; }
|
||||
}
|
||||
|
||||
public class EpisodeInfo : ItemLookupInfo, IHasIdentities<EpisodeIdentity>
|
||||
{
|
||||
private List<EpisodeIdentity> _identities = new List<EpisodeIdentity>();
|
||||
|
||||
public Dictionary<string, string> SeriesProviderIds { get; set; }
|
||||
|
||||
public int? IndexNumberEnd { get; set; }
|
||||
public int? AnimeSeriesIndex { get; set; }
|
||||
|
||||
public EpisodeInfo()
|
||||
{
|
||||
SeriesProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
public IEnumerable<EpisodeIdentity> Identities
|
||||
{
|
||||
get { return _identities; }
|
||||
}
|
||||
|
||||
public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken)
|
||||
{
|
||||
var identifier = new ItemIdentifier<EpisodeInfo, EpisodeIdentity>();
|
||||
_identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class EpisodeIdentity : IItemIdentity
|
||||
{
|
||||
public string Type { get; set; }
|
||||
|
||||
public string SeriesId { get; set; }
|
||||
public int? SeasonIndex { get; set; }
|
||||
public int IndexNumber { get; set; }
|
||||
public int? IndexNumberEnd { get; set; }
|
||||
}
|
||||
|
||||
public class SongInfo : ItemLookupInfo
|
||||
{
|
||||
public List<string> AlbumArtists { get; set; }
|
||||
public string Album { get; set; }
|
||||
public List<string> Artists { get; set; }
|
||||
|
||||
public SongInfo()
|
||||
{
|
||||
Artists = new List<string>();
|
||||
AlbumArtists = new List<string>();
|
||||
}
|
||||
}
|
||||
|
||||
public class SeriesInfo : ItemLookupInfo, IHasIdentities<SeriesIdentity>
|
||||
{
|
||||
private List<SeriesIdentity> _identities = new List<SeriesIdentity>();
|
||||
|
||||
public int? AnimeSeriesIndex { get; set; }
|
||||
|
||||
public IEnumerable<SeriesIdentity> Identities
|
||||
{
|
||||
get { return _identities; }
|
||||
}
|
||||
|
||||
public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken)
|
||||
{
|
||||
var identifier = new ItemIdentifier<SeriesInfo, SeriesIdentity>();
|
||||
_identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class SeriesIdentity : IItemIdentity
|
||||
{
|
||||
public string Type { get; set; }
|
||||
|
||||
public string Id { get; set; }
|
||||
}
|
||||
|
||||
public class PersonLookupInfo : ItemLookupInfo
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class MovieInfo : ItemLookupInfo
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class BoxSetInfo : ItemLookupInfo
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class MusicVideoInfo : ItemLookupInfo
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class TrailerInfo : ItemLookupInfo
|
||||
{
|
||||
public bool IsLocalTrailer { get; set; }
|
||||
}
|
||||
|
||||
public class BookInfo : ItemLookupInfo
|
||||
{
|
||||
public string SeriesName { get; set; }
|
||||
}
|
||||
|
||||
public class SeasonInfo : ItemLookupInfo, IHasIdentities<SeasonIdentity>
|
||||
{
|
||||
private List<SeasonIdentity> _identities = new List<SeasonIdentity>();
|
||||
|
||||
public Dictionary<string, string> SeriesProviderIds { get; set; }
|
||||
public int? AnimeSeriesIndex { get; set; }
|
||||
|
||||
public SeasonInfo()
|
||||
{
|
||||
SeriesProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
public IEnumerable<SeasonIdentity> Identities
|
||||
{
|
||||
get { return _identities; }
|
||||
}
|
||||
|
||||
public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken)
|
||||
{
|
||||
var identifier = new ItemIdentifier<SeasonInfo, SeasonIdentity>();
|
||||
_identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class SeasonIdentity : IItemIdentity
|
||||
{
|
||||
public string Type { get; set; }
|
||||
|
||||
public string SeriesId { get; set; }
|
||||
|
||||
public int SeasonIndex { get; set; }
|
||||
}
|
||||
|
||||
public class ChannelItemLookupInfo : ItemLookupInfo
|
||||
{
|
||||
public ChannelMediaContentType ContentType { get; set; }
|
||||
public ExtraType ExtraType { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
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.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
|
||||
namespace MediaBrowser.Controller.Providers
|
||||
{
|
||||
|
@ -40,74 +38,4 @@ namespace MediaBrowser.Controller.Providers
|
|||
ReplaceImages = copy.ReplaceImages.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class ImageRefreshOptions
|
||||
{
|
||||
public ImageRefreshMode ImageRefreshMode { get; set; }
|
||||
public IDirectoryService DirectoryService { get; private set; }
|
||||
|
||||
public bool ReplaceAllImages { get; set; }
|
||||
|
||||
public List<ImageType> ReplaceImages { get; set; }
|
||||
|
||||
public ImageRefreshOptions(IDirectoryService directoryService)
|
||||
{
|
||||
ImageRefreshMode = ImageRefreshMode.Default;
|
||||
DirectoryService = directoryService;
|
||||
|
||||
ReplaceImages = new List<ImageType>();
|
||||
}
|
||||
|
||||
public bool IsReplacingImage(ImageType type)
|
||||
{
|
||||
return ImageRefreshMode == ImageRefreshMode.FullRefresh &&
|
||||
(ReplaceAllImages || ReplaceImages.Contains(type));
|
||||
}
|
||||
}
|
||||
|
||||
public enum MetadataRefreshMode
|
||||
{
|
||||
/// <summary>
|
||||
/// The none
|
||||
/// </summary>
|
||||
None = 0,
|
||||
|
||||
/// <summary>
|
||||
/// The validation only
|
||||
/// </summary>
|
||||
ValidationOnly = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Providers will be executed based on default rules
|
||||
/// </summary>
|
||||
Default = 2,
|
||||
|
||||
/// <summary>
|
||||
/// All providers will be executed to search for new metadata
|
||||
/// </summary>
|
||||
FullRefresh = 3
|
||||
}
|
||||
|
||||
public enum ImageRefreshMode
|
||||
{
|
||||
/// <summary>
|
||||
/// The none
|
||||
/// </summary>
|
||||
None = 0,
|
||||
|
||||
/// <summary>
|
||||
/// The default
|
||||
/// </summary>
|
||||
Default = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Existing images will be validated
|
||||
/// </summary>
|
||||
ValidationOnly = 2,
|
||||
|
||||
/// <summary>
|
||||
/// All providers will be executed to search for new metadata
|
||||
/// </summary>
|
||||
FullRefresh = 3
|
||||
}
|
||||
}
|
||||
|
|
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
|
||||
{
|
||||
public class DefaultImageProvider : IRemoteImageProvider, IHasItemChangeMonitor
|
||||
public class DefaultImageProvider : IRemoteImageProvider, IHasItemChangeMonitor, IHasOrder
|
||||
{
|
||||
private readonly IHttpClient _httpClient;
|
||||
|
||||
|
@ -123,7 +123,7 @@ namespace MediaBrowser.Providers.FolderImages
|
|||
|
||||
public bool Supports(IHasImages item)
|
||||
{
|
||||
return item is ICollectionFolder;
|
||||
return item is ICollectionFolder || item is UserView;
|
||||
}
|
||||
|
||||
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||
|
@ -140,5 +140,14 @@ namespace MediaBrowser.Providers.FolderImages
|
|||
{
|
||||
return GetSupportedImages(item).Any(i => !item.HasImage(i));
|
||||
}
|
||||
|
||||
public int Order
|
||||
{
|
||||
get
|
||||
{
|
||||
// Run after the dynamic image provider
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Drawing;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
@ -15,7 +15,7 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace MediaBrowser.Server.Implementations.Photos
|
||||
{
|
||||
public abstract class BaseDynamicImageProvider<T> : IHasChangeMonitor, IForcedProvider, ICustomMetadataProvider<T>
|
||||
public abstract class BaseDynamicImageProvider<T> : IHasChangeMonitor, IForcedProvider, IDynamicImageProvider, IHasOrder
|
||||
where T : IHasMetadata
|
||||
{
|
||||
protected IFileSystem FileSystem { get; private set; }
|
||||
|
@ -29,81 +29,51 @@ namespace MediaBrowser.Server.Implementations.Photos
|
|||
FileSystem = fileSystem;
|
||||
}
|
||||
|
||||
public async Task<ItemUpdateType> FetchAsync(T item, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||
public virtual bool Supports(IHasImages item)
|
||||
{
|
||||
if (!Supports(item))
|
||||
{
|
||||
return ItemUpdateType.None;
|
||||
}
|
||||
|
||||
var primaryResult = await FetchAsync(item, ImageType.Primary, options, cancellationToken).ConfigureAwait(false);
|
||||
var thumbResult = await FetchAsync(item, ImageType.Thumb, options, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
return primaryResult | thumbResult;
|
||||
return item is T;
|
||||
}
|
||||
|
||||
protected virtual bool Supports(IHasImages item)
|
||||
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);
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
protected async Task<ItemUpdateType> FetchAsync(IHasImages item, ImageType imageType, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||
{
|
||||
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,
|
||||
protected Task<Stream> FetchAsyncInternal(IHasImages item,
|
||||
List<BaseItem> itemsWithImages,
|
||||
ImageType imageType,
|
||||
string cacheKey,
|
||||
MetadataRefreshOptions options,
|
||||
ImageType imageType,
|
||||
string cacheKey,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var stream = await CreateImageAsync(item, itemsWithImages, imageType, 0).ConfigureAwait(false);
|
||||
|
||||
if (stream == null)
|
||||
{
|
||||
return ItemUpdateType.None;
|
||||
}
|
||||
|
||||
if (stream is MemoryStream)
|
||||
{
|
||||
using (stream)
|
||||
{
|
||||
stream.Position = 0;
|
||||
|
||||
await ProviderManager.SaveImage(item, stream, "image/png", imageType, null, cacheKey, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (var ms = new MemoryStream())
|
||||
{
|
||||
await stream.CopyToAsync(ms).ConfigureAwait(false);
|
||||
|
||||
ms.Position = 0;
|
||||
|
||||
await ProviderManager.SaveImage(item, ms, "image/png", imageType, null, cacheKey, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
return ItemUpdateType.ImageUpdate;
|
||||
return CreateImageAsync(item, itemsWithImages, imageType, 0);
|
||||
}
|
||||
|
||||
protected Task<Stream> GetThumbCollage(List<BaseItem> items)
|
||||
|
@ -137,9 +107,9 @@ namespace MediaBrowser.Server.Implementations.Photos
|
|||
get { return "Dynamic Image Provider"; }
|
||||
}
|
||||
|
||||
public async Task<Stream> CreateImageAsync(IHasImages item,
|
||||
public async Task<Stream> CreateImageAsync(IHasImages item,
|
||||
List<BaseItem> itemsWithImages,
|
||||
ImageType imageType,
|
||||
ImageType imageType,
|
||||
int imageIndex)
|
||||
{
|
||||
if (itemsWithImages.Count == 0)
|
||||
|
@ -209,5 +179,14 @@ namespace MediaBrowser.Server.Implementations.Photos
|
|||
|
||||
return weekNo;
|
||||
}
|
||||
|
||||
public int Order
|
||||
{
|
||||
get
|
||||
{
|
||||
// Run before the default image provider which will download placeholders
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue