mirror of
https://github.com/jellyfin/jellyfin-plugin-fanart.git
synced 2024-11-23 05:39:54 +00:00
Target Jellyfin 10.7
This commit is contained in:
parent
8bb2c0ddd4
commit
811226904e
@ -1,15 +1,16 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.1</TargetFramework>
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
<RootNamespace>Jellyfin.Plugin.Fanart</RootNamespace>
|
<RootNamespace>Jellyfin.Plugin.Fanart</RootNamespace>
|
||||||
<AssemblyVersion>5.0.0.0</AssemblyVersion>
|
<AssemblyVersion>6.0.0.0</AssemblyVersion>
|
||||||
<FileVersion>5.0.0.0</FileVersion>
|
<FileVersion>6.0.0.0</FileVersion>
|
||||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Jellyfin.Controller" Version="10.*-*" />
|
<PackageReference Include="Jellyfin.Controller" Version="10.*-*" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
@ -21,13 +22,13 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
public class AlbumProvider : IRemoteImageProvider, IHasOrder
|
public class AlbumProvider : IRemoteImageProvider, IHasOrder
|
||||||
{
|
{
|
||||||
private readonly IServerConfigurationManager _config;
|
private readonly IServerConfigurationManager _config;
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClientFactory _httpClientFactory;
|
||||||
private readonly IJsonSerializer _jsonSerializer;
|
private readonly IJsonSerializer _jsonSerializer;
|
||||||
|
|
||||||
public AlbumProvider(IServerConfigurationManager config, IHttpClient httpClient, IJsonSerializer jsonSerializer)
|
public AlbumProvider(IServerConfigurationManager config, IHttpClientFactory httpClientFactory, IJsonSerializer jsonSerializer)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
_httpClient = httpClient;
|
_httpClientFactory = httpClientFactory;
|
||||||
_jsonSerializer = jsonSerializer;
|
_jsonSerializer = jsonSerializer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,13 +193,9 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return _httpClient.GetResponse(new HttpRequestOptions
|
return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(new Uri(url), cancellationToken);
|
||||||
{
|
|
||||||
CancellationToken = cancellationToken,
|
|
||||||
Url = url
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,14 +27,14 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
public class ArtistProvider : IRemoteImageProvider, IHasOrder
|
public class ArtistProvider : IRemoteImageProvider, IHasOrder
|
||||||
{
|
{
|
||||||
private readonly IServerConfigurationManager _config;
|
private readonly IServerConfigurationManager _config;
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClientFactory _httpClientFactory;
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly IJsonSerializer _jsonSerializer;
|
private readonly IJsonSerializer _jsonSerializer;
|
||||||
|
|
||||||
public ArtistProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem, IJsonSerializer jsonSerializer)
|
public ArtistProvider(IServerConfigurationManager config, IHttpClientFactory httpClientFactory, IFileSystem fileSystem, IJsonSerializer jsonSerializer)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
_httpClient = httpClient;
|
_httpClientFactory = httpClientFactory;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_jsonSerializer = jsonSerializer;
|
_jsonSerializer = jsonSerializer;
|
||||||
|
|
||||||
@ -191,13 +191,9 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return _httpClient.GetResponse(new HttpRequestOptions
|
return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(new Uri(url), cancellationToken);
|
||||||
{
|
|
||||||
CancellationToken = cancellationToken,
|
|
||||||
Url = url
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Task EnsureArtistJson(string musicBrainzId, CancellationToken cancellationToken)
|
internal Task EnsureArtistJson(string musicBrainzId, CancellationToken cancellationToken)
|
||||||
@ -244,22 +240,15 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (var httpResponse = await _httpClient.SendAsync(
|
var httpClient = _httpClientFactory.CreateClient(NamedClient.Default);
|
||||||
new HttpRequestOptions
|
using (var httpResponse = await httpClient.GetAsync(new Uri(url), cancellationToken).ConfigureAwait(false))
|
||||||
{
|
|
||||||
Url = url,
|
|
||||||
CancellationToken = cancellationToken,
|
|
||||||
BufferContent = true
|
|
||||||
|
|
||||||
},
|
|
||||||
HttpMethod.Get).ConfigureAwait(false))
|
|
||||||
using (var response = httpResponse.Content)
|
using (var response = httpResponse.Content)
|
||||||
using (var saveFileStream = new FileStream(jsonPath, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous))
|
using (var saveFileStream = new FileStream(jsonPath, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous))
|
||||||
{
|
{
|
||||||
await response.CopyToAsync(saveFileStream, CancellationToken.None).ConfigureAwait(false);
|
await response.CopyToAsync(saveFileStream, CancellationToken.None).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (HttpException ex)
|
catch (HttpRequestException ex)
|
||||||
{
|
{
|
||||||
if (ex.StatusCode.HasValue && ex.StatusCode.Value == HttpStatusCode.NotFound)
|
if (ex.StatusCode.HasValue && ex.StatusCode.Value == HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
|
@ -26,14 +26,14 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
public class MovieProvider : IRemoteImageProvider, IHasOrder
|
public class MovieProvider : IRemoteImageProvider, IHasOrder
|
||||||
{
|
{
|
||||||
private readonly IServerConfigurationManager _config;
|
private readonly IServerConfigurationManager _config;
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClientFactory _httpClientFactory;
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly IJsonSerializer _json;
|
private readonly IJsonSerializer _json;
|
||||||
|
|
||||||
public MovieProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem, IJsonSerializer json)
|
public MovieProvider(IServerConfigurationManager config, IHttpClientFactory httpClientFactory, IFileSystem fileSystem, IJsonSerializer json)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
_httpClient = httpClient;
|
_httpClientFactory = httpClientFactory;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_json = json;
|
_json = json;
|
||||||
}
|
}
|
||||||
@ -78,7 +78,7 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
{
|
{
|
||||||
await EnsureMovieJson(movieId, cancellationToken).ConfigureAwait(false);
|
await EnsureMovieJson(movieId, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (HttpException ex)
|
catch (HttpRequestException ex)
|
||||||
{
|
{
|
||||||
if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
|
if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
@ -193,13 +193,9 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return _httpClient.GetResponse(new HttpRequestOptions
|
return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(new Uri(url), cancellationToken);
|
||||||
{
|
|
||||||
CancellationToken = cancellationToken,
|
|
||||||
Url = url
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -262,22 +258,15 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (var httpResponse = await _httpClient.SendAsync(
|
var httpClient = _httpClientFactory.CreateClient(NamedClient.Default);
|
||||||
new HttpRequestOptions
|
using (var httpResponse = await httpClient.GetAsync(new Uri(url), cancellationToken).ConfigureAwait(false))
|
||||||
{
|
|
||||||
Url = url,
|
|
||||||
CancellationToken = cancellationToken,
|
|
||||||
BufferContent = true
|
|
||||||
|
|
||||||
},
|
|
||||||
HttpMethod.Get).ConfigureAwait(false))
|
|
||||||
using (var response = httpResponse.Content)
|
using (var response = httpResponse.Content)
|
||||||
using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous))
|
using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous))
|
||||||
{
|
{
|
||||||
await response.CopyToAsync(fileStream, CancellationToken.None).ConfigureAwait(false);
|
await response.CopyToAsync(fileStream, CancellationToken.None).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (HttpException exception)
|
catch (HttpRequestException exception)
|
||||||
{
|
{
|
||||||
if (exception.StatusCode.HasValue && exception.StatusCode.Value == HttpStatusCode.NotFound)
|
if (exception.StatusCode.HasValue && exception.StatusCode.Value == HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
|
@ -4,6 +4,7 @@ using System.Globalization;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
@ -21,12 +22,12 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
{
|
{
|
||||||
public class SeasonProvider : IRemoteImageProvider, IHasOrder
|
public class SeasonProvider : IRemoteImageProvider, IHasOrder
|
||||||
{
|
{
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClientFactory _httpClientFactory;
|
||||||
private readonly IJsonSerializer _json;
|
private readonly IJsonSerializer _json;
|
||||||
|
|
||||||
public SeasonProvider(IHttpClient httpClient, IJsonSerializer json)
|
public SeasonProvider(IHttpClientFactory httpClientFactory, IJsonSerializer json)
|
||||||
{
|
{
|
||||||
_httpClient = httpClient;
|
_httpClientFactory = httpClientFactory;
|
||||||
_json = json;
|
_json = json;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +72,7 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
{
|
{
|
||||||
await SeriesProvider.Current.EnsureSeriesJson(id, cancellationToken).ConfigureAwait(false);
|
await SeriesProvider.Current.EnsureSeriesJson(id, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (HttpException ex)
|
catch (HttpRequestException ex)
|
||||||
{
|
{
|
||||||
if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
|
if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
@ -193,13 +194,9 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return _httpClient.GetResponse(new HttpRequestOptions
|
return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(new Uri(url), cancellationToken);
|
||||||
{
|
|
||||||
CancellationToken = cancellationToken,
|
|
||||||
Url = url
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,16 +27,16 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
public class SeriesProvider : IRemoteImageProvider, IHasOrder
|
public class SeriesProvider : IRemoteImageProvider, IHasOrder
|
||||||
{
|
{
|
||||||
private readonly IServerConfigurationManager _config;
|
private readonly IServerConfigurationManager _config;
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClientFactory _httpClientFactory;
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly IJsonSerializer _json;
|
private readonly IJsonSerializer _json;
|
||||||
|
|
||||||
private readonly SemaphoreSlim _ensureSemaphore = new SemaphoreSlim(1, 1);
|
private readonly SemaphoreSlim _ensureSemaphore = new SemaphoreSlim(1, 1);
|
||||||
|
|
||||||
public SeriesProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem, IJsonSerializer json)
|
public SeriesProvider(IServerConfigurationManager config, IHttpClientFactory httpClientFactory, IFileSystem fileSystem, IJsonSerializer json)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
_httpClient = httpClient;
|
_httpClientFactory = httpClientFactory;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_json = json;
|
_json = json;
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
{
|
{
|
||||||
await EnsureSeriesJson(id, cancellationToken).ConfigureAwait(false);
|
await EnsureSeriesJson(id, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (HttpException ex)
|
catch (HttpRequestException ex)
|
||||||
{
|
{
|
||||||
if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
|
if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
@ -211,13 +211,9 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return _httpClient.GetResponse(new HttpRequestOptions
|
return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(new Uri(url), cancellationToken);
|
||||||
{
|
|
||||||
CancellationToken = cancellationToken,
|
|
||||||
Url = url
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -307,22 +303,15 @@ namespace Jellyfin.Plugin.Fanart.Providers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (var httpResponse = await _httpClient.SendAsync(
|
var httpClient = _httpClientFactory.CreateClient(NamedClient.Default);
|
||||||
new HttpRequestOptions
|
using (var httpResponse = await httpClient.GetAsync(new Uri(url), cancellationToken).ConfigureAwait(false))
|
||||||
{
|
|
||||||
Url = url,
|
|
||||||
CancellationToken = cancellationToken,
|
|
||||||
BufferContent = true
|
|
||||||
|
|
||||||
},
|
|
||||||
HttpMethod.Get).ConfigureAwait(false))
|
|
||||||
using (var response = httpResponse.Content)
|
using (var response = httpResponse.Content)
|
||||||
using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous))
|
using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous))
|
||||||
{
|
{
|
||||||
await response.CopyToAsync(fileStream, CancellationToken.None).ConfigureAwait(false);
|
await response.CopyToAsync(fileStream, CancellationToken.None).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (HttpException exception)
|
catch (HttpRequestException exception)
|
||||||
{
|
{
|
||||||
if (exception.StatusCode.HasValue && exception.StatusCode.Value == HttpStatusCode.NotFound)
|
if (exception.StatusCode.HasValue && exception.StatusCode.Value == HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
---
|
---
|
||||||
name: "Fanart"
|
name: "Fanart"
|
||||||
guid: "170a157f-ac6c-437a-abdd-ca9c25cebd39"
|
guid: "170a157f-ac6c-437a-abdd-ca9c25cebd39"
|
||||||
version: "5.0.0.0"
|
version: "6.0.0.0"
|
||||||
targetAbi: "10.6.0.0"
|
targetAbi: "10.7.0.0"
|
||||||
|
framework: "net5.0"
|
||||||
overview: "Scrape poster images from Fanart"
|
overview: "Scrape poster images from Fanart"
|
||||||
description: "Scrape poster images for movies, shows, and artists in your library."
|
description: "Scrape poster images for movies, shows, and artists in your library."
|
||||||
category: "Metadata"
|
category: "Metadata"
|
||||||
|
Loading…
Reference in New Issue
Block a user