diff options
Diffstat (limited to 'SeriesImageProvider.cs')
-rw-r--r-- | SeriesImageProvider.cs | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/SeriesImageProvider.cs b/SeriesImageProvider.cs new file mode 100644 index 0000000..dd0f3b3 --- /dev/null +++ b/SeriesImageProvider.cs @@ -0,0 +1,81 @@ +using System.Linq; + +namespace Jellyfin.Plugin.JCoverXtremePro; + +using System.Collections.Generic; +using System.Net.Http; +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Threading; +using System.Threading.Tasks; +using Jellyfin.Plugin.JCoverXtremePro.Api; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Providers; + +public class SeriesImageProvider + : IRemoteImageProvider, IHasOrder +{ + public bool Supports(BaseItem item) + { + return item is Episode or Series; + } + + public string Name => "Mediux Series"; + + public IEnumerable<ImageType> GetSupportedImages(BaseItem item) + { + return + [ + // Note: update JCoverSharedController if more image types are supported + ImageType.Primary + ]; + } + + public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken) + { + // TODO: handle specific episodes directly + if (item is Series series) + { + return await HandleSeries(series, cancellationToken); + } + + return []; + } + + public async Task<IEnumerable<RemoteImageInfo>> HandleSeries(Series series, CancellationToken token) + { + var tmdbId = series.GetProviderId(MetadataProvider.Tmdb); + if (tmdbId == null) + { + return []; // TODO: handle missing id + } + + var metadata = await MediuxDownloader.instance.GetMediuxMetadata("https://mediux.pro/shows/" + tmdbId) + .ConfigureAwait(false); + var show = JsonSerializer.Deserialize<POJO.ShowData>(metadata as JsonObject)!; + + return from set in show.sets + let representativeImage = set.files.Find(it => it.fileType is "poster" or "title_card")! + let enrichedUrl = JCoverSharedController.PackSetInfo(representativeImage.downloadUrl, series, set) + select new RemoteImageInfo + { + Url = enrichedUrl, + ProviderName = set.user_created.username + " (via Mediux)", + ThumbnailUrl = enrichedUrl, // TODO: use generated thumbnails from /_next/image?url= + Language = "en", + RatingType = RatingType.Likes, + Type = representativeImage.JellyFinFileType().Value + }; + } + + public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken) + { + return MediuxDownloader.instance.DownloadFile(url); + } + + public int Order => 0; +}
\ No newline at end of file |