mirror of
https://github.com/jellyfin/jellyfin-plugin-anidb.git
synced 2025-02-17 04:27:47 +00:00
Merge pull request #53 from Musi13/master
Allow AniDB as an agent for movies
This commit is contained in:
commit
f1cf9ef0d4
@ -1,4 +1,5 @@
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
@ -7,7 +8,7 @@ namespace Jellyfin.Plugin.Anime.Providers.AniDB
|
||||
public class AniDbExternalId : IExternalId
|
||||
{
|
||||
public bool Supports(IHasProviderIds item)
|
||||
=> item is Series;
|
||||
=> item is Series || item is Movie;
|
||||
|
||||
public string Name
|
||||
=> "AniDB";
|
||||
|
@ -8,18 +8,20 @@ using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Providers;
|
||||
|
||||
namespace Jellyfin.Plugin.Anime.Providers.AniDB.Metadata
|
||||
{
|
||||
public class AniDbSeriesImagesProvider : IRemoteImageProvider
|
||||
public class AniDbImageProvider : IRemoteImageProvider
|
||||
{
|
||||
public string Name => "AniDB";
|
||||
private readonly IHttpClient _httpClient;
|
||||
private readonly IApplicationPaths _appPaths;
|
||||
|
||||
public AniDbSeriesImagesProvider(IHttpClient httpClient, IApplicationPaths appPaths)
|
||||
public AniDbImageProvider(IHttpClient httpClient, IApplicationPaths appPaths)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_appPaths = appPaths;
|
||||
@ -38,8 +40,7 @@ namespace Jellyfin.Plugin.Anime.Providers.AniDB.Metadata
|
||||
|
||||
public Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken)
|
||||
{
|
||||
var series = (Series)item;
|
||||
var seriesId = series.GetProviderId(ProviderNames.AniDb);
|
||||
var seriesId = item.GetProviderId(ProviderNames.AniDb);
|
||||
return GetImages(seriesId, cancellationToken);
|
||||
}
|
||||
|
||||
@ -70,11 +71,9 @@ namespace Jellyfin.Plugin.Anime.Providers.AniDB.Metadata
|
||||
return new[] { ImageType.Primary };
|
||||
}
|
||||
|
||||
public string Name => "AniDB";
|
||||
|
||||
public bool Supports(BaseItem item)
|
||||
{
|
||||
return item is Series;
|
||||
return item is Series || item is Season || item is Movie;
|
||||
}
|
||||
|
||||
private async Task<string> FindImageUrl(string seriesDataPath)
|
@ -0,0 +1,91 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Providers;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Jellyfin.Plugin.Anime.Providers.AniDB.Metadata
|
||||
{
|
||||
public class AniDbMovieProvider : IRemoteMetadataProvider<Movie, MovieInfo>
|
||||
{
|
||||
private readonly AniDbSeriesProvider _seriesProvider;
|
||||
private readonly ILogger _log;
|
||||
|
||||
public string Name => "AniDB";
|
||||
|
||||
public AniDbMovieProvider(IApplicationPaths appPaths, IHttpClient httpClient, ILoggerFactory loggerFactory)
|
||||
{
|
||||
_seriesProvider = new AniDbSeriesProvider(appPaths, httpClient);
|
||||
_log = loggerFactory.CreateLogger("AniDB");
|
||||
}
|
||||
|
||||
public async Task<MetadataResult<Movie>> GetMetadata(MovieInfo info, CancellationToken cancellationToken)
|
||||
{
|
||||
// Empty result
|
||||
var result = new MetadataResult<Movie>
|
||||
{
|
||||
HasMetadata = false,
|
||||
Item = new Movie
|
||||
{
|
||||
Name = info.Name
|
||||
}
|
||||
};
|
||||
|
||||
var seriesId = info.ProviderIds.GetOrDefault(ProviderNames.AniDb);
|
||||
if (seriesId == null)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
var seriesInfo = new SeriesInfo();
|
||||
seriesInfo.ProviderIds.Add(ProviderNames.AniDb, seriesId);
|
||||
|
||||
var seriesResult = await _seriesProvider.GetMetadata(seriesInfo, cancellationToken);
|
||||
if (seriesResult.HasMetadata)
|
||||
{
|
||||
result = new MetadataResult<Movie>
|
||||
{
|
||||
HasMetadata = true,
|
||||
Item = new Movie
|
||||
{
|
||||
Name = seriesResult.Item.Name,
|
||||
Overview = seriesResult.Item.Overview,
|
||||
PremiereDate = seriesResult.Item.PremiereDate,
|
||||
ProductionYear = seriesResult.Item.ProductionYear,
|
||||
EndDate = seriesResult.Item.EndDate,
|
||||
CommunityRating = seriesResult.Item.CommunityRating,
|
||||
Studios = seriesResult.Item.Studios,
|
||||
Genres = seriesResult.Item.Genres,
|
||||
ProviderIds = seriesResult.Item.ProviderIds,
|
||||
},
|
||||
People = seriesResult.People,
|
||||
Images = seriesResult.Images
|
||||
};
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken)
|
||||
{
|
||||
var seriesInfo = new SeriesInfo();
|
||||
var seriesId = searchInfo.ProviderIds.GetOrDefault(ProviderNames.AniDb);
|
||||
if (seriesId != null)
|
||||
{
|
||||
seriesInfo.ProviderIds.Add(ProviderNames.AniDb, seriesId);
|
||||
}
|
||||
seriesInfo.Name = searchInfo.Name;
|
||||
|
||||
return await _seriesProvider.GetSearchResults(seriesInfo, cancellationToken);
|
||||
}
|
||||
|
||||
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||
{
|
||||
return _seriesProvider.GetImageResponse(url, cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Providers;
|
||||
|
||||
namespace Jellyfin.Plugin.Anime.Providers.AniDB.Metadata
|
||||
{
|
||||
/// <summary>
|
||||
/// Copies the series image into a season, if the season does not otherwise have any primary image.
|
||||
/// </summary>
|
||||
public class AniDbSeasonImageProvider : IRemoteImageProvider
|
||||
{
|
||||
private readonly IApplicationPaths _appPaths;
|
||||
private readonly IHttpClient _httpClient;
|
||||
|
||||
public AniDbSeasonImageProvider(IApplicationPaths appPaths, IHttpClient httpClient)
|
||||
{
|
||||
_appPaths = appPaths;
|
||||
_httpClient = httpClient;
|
||||
}
|
||||
|
||||
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||
{
|
||||
return new AniDbSeriesImagesProvider(_httpClient, _appPaths).GetImageResponse(url, cancellationToken);
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken)
|
||||
{
|
||||
var season = (Season)item;
|
||||
var series = season.Series;
|
||||
|
||||
var seriesId = series.ProviderIds.GetOrDefault(ProviderNames.AniDb);
|
||||
if (string.IsNullOrEmpty(seriesId))
|
||||
return Enumerable.Empty<RemoteImageInfo>();
|
||||
|
||||
return await new AniDbSeriesImagesProvider(_httpClient, _appPaths).GetImages(seriesId, cancellationToken);
|
||||
}
|
||||
|
||||
public IEnumerable<ImageType> GetSupportedImages(BaseItem item)
|
||||
{
|
||||
return new[] { ImageType.Primary };
|
||||
}
|
||||
|
||||
public string Name => "AniDB";
|
||||
|
||||
public bool Supports(BaseItem item)
|
||||
{
|
||||
return item is Season;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user