mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-11-15 18:08:53 -07:00
Merge pull request #9070 from Bond-009/warn3
This commit is contained in:
commit
3ad6286c2c
@ -6,10 +6,6 @@
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Code analysers-->
|
||||
<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="3.3.3">
|
||||
|
@ -54,7 +54,8 @@ namespace Jellyfin.Server.Implementations.Users
|
||||
foreach (var resetFile in Directory.EnumerateFiles(_passwordResetFileBaseDir, $"{BaseResetFileName}*"))
|
||||
{
|
||||
SerializablePasswordReset spr;
|
||||
await using (var str = AsyncFile.OpenRead(resetFile))
|
||||
var str = AsyncFile.OpenRead(resetFile);
|
||||
await using (str.ConfigureAwait(false))
|
||||
{
|
||||
spr = await JsonSerializer.DeserializeAsync<SerializablePasswordReset>(str).ConfigureAwait(false)
|
||||
?? throw new ResourceNotFoundException($"Provided path ({resetFile}) is not valid.");
|
||||
@ -107,7 +108,8 @@ namespace Jellyfin.Server.Implementations.Users
|
||||
UserName = user.Username
|
||||
};
|
||||
|
||||
await using (FileStream fileStream = AsyncFile.OpenWrite(filePath))
|
||||
FileStream fileStream = AsyncFile.OpenWrite(filePath);
|
||||
await using (fileStream.ConfigureAwait(false))
|
||||
{
|
||||
await JsonSerializer.SerializeAsync(fileStream, spr).ConfigureAwait(false);
|
||||
}
|
||||
|
@ -264,7 +264,8 @@ namespace MediaBrowser.Providers.Manager
|
||||
var fileStreamOptions = AsyncFile.WriteOptions;
|
||||
fileStreamOptions.Mode = FileMode.Create;
|
||||
fileStreamOptions.PreallocationSize = source.Length;
|
||||
await using (var fs = new FileStream(path, fileStreamOptions))
|
||||
var fs = new FileStream(path, fileStreamOptions);
|
||||
await using (fs.ConfigureAwait(false))
|
||||
{
|
||||
await source.CopyToAsync(fs, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
@ -502,15 +502,17 @@ namespace MediaBrowser.Providers.Manager
|
||||
break;
|
||||
}
|
||||
|
||||
await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
await _providerManager.SaveImage(
|
||||
item,
|
||||
stream,
|
||||
response.Content.Headers.ContentType?.MediaType,
|
||||
type,
|
||||
null,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
await using (stream.ConfigureAwait(false))
|
||||
{
|
||||
await _providerManager.SaveImage(
|
||||
item,
|
||||
stream,
|
||||
response.Content.Headers.ContentType?.MediaType,
|
||||
type,
|
||||
null,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
result.UpdateType |= ItemUpdateType.ImageUpdate;
|
||||
return true;
|
||||
@ -626,14 +628,18 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
}
|
||||
|
||||
await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
await _providerManager.SaveImage(
|
||||
item,
|
||||
stream,
|
||||
response.Content.Headers.ContentType?.MediaType,
|
||||
imageType,
|
||||
null,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
await using (stream.ConfigureAwait(false))
|
||||
{
|
||||
await _providerManager.SaveImage(
|
||||
item,
|
||||
stream,
|
||||
response.Content.Headers.ContentType?.MediaType,
|
||||
imageType,
|
||||
null,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
result.UpdateType |= ItemUpdateType.ImageUpdate;
|
||||
}
|
||||
catch (HttpRequestException)
|
||||
|
@ -182,14 +182,17 @@ namespace MediaBrowser.Providers.Manager
|
||||
contentType = MimeTypes.GetMimeType(url);
|
||||
}
|
||||
|
||||
await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
await SaveImage(
|
||||
item,
|
||||
stream,
|
||||
contentType,
|
||||
type,
|
||||
imageIndex,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
await using (stream.ConfigureAwait(false))
|
||||
{
|
||||
await SaveImage(
|
||||
item,
|
||||
stream,
|
||||
contentType,
|
||||
type,
|
||||
imageIndex,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
@ -34,10 +34,6 @@
|
||||
<CodeAnalysisRuleSet>../jellyfin.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Code Analyzers-->
|
||||
<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="3.3.3">
|
||||
|
@ -140,7 +140,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||
|
||||
if (attachmentStream is not null)
|
||||
{
|
||||
return await ExtractAttachment(item, attachmentStream, mediaSource, cancellationToken);
|
||||
return await ExtractAttachment(item, attachmentStream, mediaSource, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
// Fall back to EmbeddedImage streams
|
||||
|
@ -557,7 +557,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var startIndex = currentStreams.Count == 0 ? 0 : (currentStreams.Select(i => i.Index).Max() + 1);
|
||||
var externalSubtitleStreams = await _subtitleResolver.GetExternalStreamsAsync(video, startIndex, options.DirectoryService, false, cancellationToken);
|
||||
var externalSubtitleStreams = await _subtitleResolver.GetExternalStreamsAsync(video, startIndex, options.DirectoryService, false, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var enableSubtitleDownloading = options.MetadataRefreshMode == MetadataRefreshMode.Default ||
|
||||
options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh;
|
||||
@ -611,7 +611,7 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||
// Rescan
|
||||
if (downloadedLanguages.Count > 0)
|
||||
{
|
||||
externalSubtitleStreams = await _subtitleResolver.GetExternalStreamsAsync(video, startIndex, options.DirectoryService, true, cancellationToken);
|
||||
externalSubtitleStreams = await _subtitleResolver.GetExternalStreamsAsync(video, startIndex, options.DirectoryService, true, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
@ -42,11 +43,8 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
||||
/// <inheritdoc />
|
||||
public IEnumerable<ImageType> GetSupportedImages(BaseItem item)
|
||||
{
|
||||
return new List<ImageType>
|
||||
{
|
||||
ImageType.Primary,
|
||||
ImageType.Disc
|
||||
};
|
||||
yield return ImageType.Primary;
|
||||
yield return ImageType.Disc;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@ -60,16 +58,19 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
||||
|
||||
var path = AudioDbAlbumProvider.GetAlbumInfoPath(_config.ApplicationPaths, id);
|
||||
|
||||
await using FileStream jsonStream = AsyncFile.OpenRead(path);
|
||||
var obj = await JsonSerializer.DeserializeAsync<AudioDbAlbumProvider.RootObject>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (obj is not null && obj.album is not null && obj.album.Count > 0)
|
||||
FileStream jsonStream = AsyncFile.OpenRead(path);
|
||||
await using (jsonStream.ConfigureAwait(false))
|
||||
{
|
||||
return GetImages(obj.album[0]);
|
||||
var obj = await JsonSerializer.DeserializeAsync<AudioDbAlbumProvider.RootObject>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (obj is not null && obj.album is not null && obj.album.Count > 0)
|
||||
{
|
||||
return GetImages(obj.album[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new List<RemoteImageInfo>();
|
||||
return Enumerable.Empty<RemoteImageInfo>();
|
||||
}
|
||||
|
||||
private IEnumerable<RemoteImageInfo> GetImages(AudioDbAlbumProvider.Album item)
|
||||
|
@ -68,14 +68,17 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
||||
|
||||
var path = GetAlbumInfoPath(_config.ApplicationPaths, id);
|
||||
|
||||
await using FileStream jsonStream = AsyncFile.OpenRead(path);
|
||||
var obj = await JsonSerializer.DeserializeAsync<RootObject>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (obj is not null && obj.album is not null && obj.album.Count > 0)
|
||||
FileStream jsonStream = AsyncFile.OpenRead(path);
|
||||
await using (jsonStream.ConfigureAwait(false))
|
||||
{
|
||||
result.Item = new MusicAlbum();
|
||||
result.HasMetadata = true;
|
||||
ProcessResult(result.Item, obj.album[0], info.MetadataLanguage);
|
||||
var obj = await JsonSerializer.DeserializeAsync<RootObject>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (obj is not null && obj.album is not null && obj.album.Count > 0)
|
||||
{
|
||||
result.Item = new MusicAlbum();
|
||||
result.HasMetadata = true;
|
||||
ProcessResult(result.Item, obj.album[0], info.MetadataLanguage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -173,13 +176,18 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||
|
||||
using var response = await _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken).ConfigureAwait(false);
|
||||
await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var fileStreamOptions = AsyncFile.WriteOptions;
|
||||
fileStreamOptions.Mode = FileMode.Create;
|
||||
fileStreamOptions.PreallocationSize = stream.Length;
|
||||
await using var xmlFileStream = new FileStream(path, fileStreamOptions);
|
||||
await stream.CopyToAsync(xmlFileStream, cancellationToken).ConfigureAwait(false);
|
||||
var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
await using (stream.ConfigureAwait(false))
|
||||
{
|
||||
var fileStreamOptions = AsyncFile.WriteOptions;
|
||||
fileStreamOptions.Mode = FileMode.Create;
|
||||
fileStreamOptions.PreallocationSize = stream.Length;
|
||||
var xmlFileStream = new FileStream(path, fileStreamOptions);
|
||||
await using (xmlFileStream.ConfigureAwait(false))
|
||||
{
|
||||
await stream.CopyToAsync(xmlFileStream, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetAlbumDataPath(IApplicationPaths appPaths, string musicBrainzReleaseGroupId)
|
||||
|
@ -62,12 +62,15 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
||||
|
||||
var path = AudioDbArtistProvider.GetArtistInfoPath(_config.ApplicationPaths, id);
|
||||
|
||||
await using FileStream jsonStream = AsyncFile.OpenRead(path);
|
||||
var obj = await JsonSerializer.DeserializeAsync<AudioDbArtistProvider.RootObject>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (obj is not null && obj.artists is not null && obj.artists.Count > 0)
|
||||
FileStream jsonStream = AsyncFile.OpenRead(path);
|
||||
await using (jsonStream.ConfigureAwait(false))
|
||||
{
|
||||
return GetImages(obj.artists[0]);
|
||||
var obj = await JsonSerializer.DeserializeAsync<AudioDbArtistProvider.RootObject>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (obj is not null && obj.artists is not null && obj.artists.Count > 0)
|
||||
{
|
||||
return GetImages(obj.artists[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,14 +67,17 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
||||
|
||||
var path = GetArtistInfoPath(_config.ApplicationPaths, id);
|
||||
|
||||
await using FileStream jsonStream = AsyncFile.OpenRead(path);
|
||||
var obj = await JsonSerializer.DeserializeAsync<RootObject>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (obj is not null && obj.artists is not null && obj.artists.Count > 0)
|
||||
FileStream jsonStream = AsyncFile.OpenRead(path);
|
||||
await using (jsonStream.ConfigureAwait(false))
|
||||
{
|
||||
result.Item = new MusicArtist();
|
||||
result.HasMetadata = true;
|
||||
ProcessResult(result.Item, obj.artists[0], info.MetadataLanguage);
|
||||
var obj = await JsonSerializer.DeserializeAsync<RootObject>(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (obj is not null && obj.artists is not null && obj.artists.Count > 0)
|
||||
{
|
||||
result.Item = new MusicArtist();
|
||||
result.HasMetadata = true;
|
||||
ProcessResult(result.Item, obj.artists[0], info.MetadataLanguage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -151,16 +154,21 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
||||
|
||||
using var response = await _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken).ConfigureAwait(false);
|
||||
response.EnsureSuccessStatusCode();
|
||||
await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
await using (stream.ConfigureAwait(false))
|
||||
{
|
||||
var path = GetArtistInfoPath(_config.ApplicationPaths, musicBrainzId);
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||
|
||||
var path = GetArtistInfoPath(_config.ApplicationPaths, musicBrainzId);
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||
|
||||
var fileStreamOptions = AsyncFile.WriteOptions;
|
||||
fileStreamOptions.Mode = FileMode.Create;
|
||||
fileStreamOptions.PreallocationSize = stream.Length;
|
||||
await using var xmlFileStream = new FileStream(path, fileStreamOptions);
|
||||
await stream.CopyToAsync(xmlFileStream, cancellationToken).ConfigureAwait(false);
|
||||
var fileStreamOptions = AsyncFile.WriteOptions;
|
||||
fileStreamOptions.Mode = FileMode.Create;
|
||||
fileStreamOptions.PreallocationSize = stream.Length;
|
||||
var xmlFileStream = new FileStream(path, fileStreamOptions);
|
||||
await using (xmlFileStream.ConfigureAwait(false))
|
||||
{
|
||||
await stream.CopyToAsync(xmlFileStream, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -137,29 +137,31 @@ namespace MediaBrowser.Providers.Plugins.Omdb
|
||||
var url = OmdbProvider.GetOmdbUrl(urlQuery.ToString());
|
||||
|
||||
using var response = await _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken).ConfigureAwait(false);
|
||||
await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (isSearch)
|
||||
var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
||||
await using (stream.ConfigureAwait(false))
|
||||
{
|
||||
var searchResultList = await JsonSerializer.DeserializeAsync<SearchResultList>(stream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
if (searchResultList?.Search is not null)
|
||||
if (isSearch)
|
||||
{
|
||||
var resultCount = searchResultList.Search.Count;
|
||||
var result = new RemoteSearchResult[resultCount];
|
||||
for (var i = 0; i < resultCount; i++)
|
||||
var searchResultList = await JsonSerializer.DeserializeAsync<SearchResultList>(stream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
if (searchResultList?.Search is not null)
|
||||
{
|
||||
result[i] = ResultToMetadataResult(searchResultList.Search[i], searchInfo, indexNumberEnd);
|
||||
}
|
||||
var resultCount = searchResultList.Search.Count;
|
||||
var result = new RemoteSearchResult[resultCount];
|
||||
for (var i = 0; i < resultCount; i++)
|
||||
{
|
||||
result[i] = ResultToMetadataResult(searchResultList.Search[i], searchInfo, indexNumberEnd);
|
||||
}
|
||||
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var result = await JsonSerializer.DeserializeAsync<SearchResult>(stream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
if (string.Equals(result?.Response, "true", StringComparison.OrdinalIgnoreCase))
|
||||
else
|
||||
{
|
||||
return new[] { ResultToMetadataResult(result, searchInfo, indexNumberEnd) };
|
||||
var result = await JsonSerializer.DeserializeAsync<SearchResult>(stream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
if (string.Equals(result?.Response, "true", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return new[] { ResultToMetadataResult(result, searchInfo, indexNumberEnd) };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -234,15 +234,21 @@ namespace MediaBrowser.Providers.Plugins.Omdb
|
||||
internal async Task<RootObject> GetRootObject(string imdbId, CancellationToken cancellationToken)
|
||||
{
|
||||
var path = await EnsureItemInfo(imdbId, cancellationToken).ConfigureAwait(false);
|
||||
await using var stream = AsyncFile.OpenRead(path);
|
||||
return await JsonSerializer.DeserializeAsync<RootObject>(stream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
var stream = AsyncFile.OpenRead(path);
|
||||
await using (stream.ConfigureAwait(false))
|
||||
{
|
||||
return await JsonSerializer.DeserializeAsync<RootObject>(stream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task<SeasonRootObject> GetSeasonRootObject(string imdbId, int seasonId, CancellationToken cancellationToken)
|
||||
{
|
||||
var path = await EnsureSeasonInfo(imdbId, seasonId, cancellationToken).ConfigureAwait(false);
|
||||
await using var stream = AsyncFile.OpenRead(path);
|
||||
return await JsonSerializer.DeserializeAsync<SeasonRootObject>(stream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
var stream = AsyncFile.OpenRead(path);
|
||||
await using (stream.ConfigureAwait(false))
|
||||
{
|
||||
return await JsonSerializer.DeserializeAsync<SeasonRootObject>(stream, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Gets OMDB URL.</summary>
|
||||
@ -317,8 +323,11 @@ namespace MediaBrowser.Providers.Plugins.Omdb
|
||||
imdbParam));
|
||||
|
||||
var rootObject = await _httpClientFactory.CreateClient(NamedClient.Default).GetFromJsonAsync<RootObject>(url, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
await using FileStream jsonFileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous);
|
||||
await JsonSerializer.SerializeAsync(jsonFileStream, rootObject, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
FileStream jsonFileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous);
|
||||
await using (jsonFileStream.ConfigureAwait(false))
|
||||
{
|
||||
await JsonSerializer.SerializeAsync(jsonFileStream, rootObject, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
@ -357,8 +366,11 @@ namespace MediaBrowser.Providers.Plugins.Omdb
|
||||
seasonId));
|
||||
|
||||
var rootObject = await _httpClientFactory.CreateClient(NamedClient.Default).GetFromJsonAsync<SeasonRootObject>(url, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
await using FileStream jsonFileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous);
|
||||
await JsonSerializer.SerializeAsync(jsonFileStream, rootObject, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
FileStream jsonFileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous);
|
||||
await using (jsonFileStream.ConfigureAwait(false))
|
||||
{
|
||||
await JsonSerializer.SerializeAsync(jsonFileStream, rootObject, _jsonOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
@ -138,9 +138,15 @@ namespace MediaBrowser.Providers.Plugins.StudioImages
|
||||
var httpClient = _httpClientFactory.CreateClient(NamedClient.Default);
|
||||
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(file));
|
||||
await using var response = await httpClient.GetStreamAsync(url, cancellationToken).ConfigureAwait(false);
|
||||
await using var fileStream = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous);
|
||||
await response.CopyToAsync(fileStream, cancellationToken).ConfigureAwait(false);
|
||||
var response = await httpClient.GetStreamAsync(url, cancellationToken).ConfigureAwait(false);
|
||||
await using (response.ConfigureAwait(false))
|
||||
{
|
||||
var fileStream = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous);
|
||||
await using (fileStream.ConfigureAwait(false))
|
||||
{
|
||||
await response.CopyToAsync(fileStream, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return file;
|
||||
|
@ -81,8 +81,8 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.BoxSets
|
||||
var backdrops = collection.Images.Backdrops;
|
||||
var remoteImages = new List<RemoteImageInfo>(posters.Count + backdrops.Count);
|
||||
|
||||
_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language, remoteImages);
|
||||
_tmdbClientManager.ConvertBackdropsToRemoteImageInfo(backdrops, language, remoteImages);
|
||||
remoteImages.AddRange(_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language));
|
||||
remoteImages.AddRange(_tmdbClientManager.ConvertBackdropsToRemoteImageInfo(backdrops, language));
|
||||
|
||||
return remoteImages;
|
||||
}
|
||||
|
@ -100,9 +100,9 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.Movies
|
||||
var logos = movie.Images.Logos;
|
||||
var remoteImages = new List<RemoteImageInfo>(posters.Count + backdrops.Count + logos.Count);
|
||||
|
||||
_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language, remoteImages);
|
||||
_tmdbClientManager.ConvertBackdropsToRemoteImageInfo(backdrops, language, remoteImages);
|
||||
_tmdbClientManager.ConvertLogosToRemoteImageInfo(logos, language, remoteImages);
|
||||
remoteImages.AddRange(_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language));
|
||||
remoteImages.AddRange(_tmdbClientManager.ConvertBackdropsToRemoteImageInfo(backdrops, language));
|
||||
remoteImages.AddRange(_tmdbClientManager.ConvertLogosToRemoteImageInfo(logos, language));
|
||||
|
||||
return remoteImages;
|
||||
}
|
||||
|
@ -69,12 +69,7 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.People
|
||||
return Enumerable.Empty<RemoteImageInfo>();
|
||||
}
|
||||
|
||||
var profiles = personResult.Images.Profiles;
|
||||
var remoteImages = new List<RemoteImageInfo>(profiles.Count);
|
||||
|
||||
_tmdbClientManager.ConvertProfilesToRemoteImageInfo(profiles, language, remoteImages);
|
||||
|
||||
return remoteImages;
|
||||
return _tmdbClientManager.ConvertProfilesToRemoteImageInfo(personResult.Images.Profiles, language);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
@ -89,11 +89,7 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.TV
|
||||
return Enumerable.Empty<RemoteImageInfo>();
|
||||
}
|
||||
|
||||
var remoteImages = new List<RemoteImageInfo>(stills.Count);
|
||||
|
||||
_tmdbClientManager.ConvertStillsToRemoteImageInfo(stills, language, remoteImages);
|
||||
|
||||
return remoteImages;
|
||||
return _tmdbClientManager.ConvertStillsToRemoteImageInfo(stills, language);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
@ -80,11 +80,7 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.TV
|
||||
return Enumerable.Empty<RemoteImageInfo>();
|
||||
}
|
||||
|
||||
var remoteImages = new List<RemoteImageInfo>(posters.Count);
|
||||
|
||||
_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language, remoteImages);
|
||||
|
||||
return remoteImages;
|
||||
return _tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
@ -83,9 +83,9 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.TV
|
||||
var logos = series.Images.Logos;
|
||||
var remoteImages = new List<RemoteImageInfo>(posters.Count + backdrops.Count + logos.Count);
|
||||
|
||||
_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language, remoteImages);
|
||||
_tmdbClientManager.ConvertBackdropsToRemoteImageInfo(backdrops, language, remoteImages);
|
||||
_tmdbClientManager.ConvertLogosToRemoteImageInfo(logos, language, remoteImages);
|
||||
remoteImages.AddRange(_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language));
|
||||
remoteImages.AddRange(_tmdbClientManager.ConvertBackdropsToRemoteImageInfo(backdrops, language));
|
||||
remoteImages.AddRange(_tmdbClientManager.ConvertLogosToRemoteImageInfo(logos, language));
|
||||
|
||||
return remoteImages;
|
||||
}
|
||||
|
@ -531,55 +531,45 @@ namespace MediaBrowser.Providers.Plugins.Tmdb
|
||||
/// </summary>
|
||||
/// <param name="images">The input images.</param>
|
||||
/// <param name="requestLanguage">The requested language.</param>
|
||||
/// <param name="results">The collection to add the remote images into.</param>
|
||||
public void ConvertPostersToRemoteImageInfo(List<ImageData> images, string requestLanguage, List<RemoteImageInfo> results)
|
||||
{
|
||||
ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.PosterSize, ImageType.Primary, requestLanguage, results);
|
||||
}
|
||||
/// <returns>The remote images.</returns>
|
||||
public IEnumerable<RemoteImageInfo> ConvertPostersToRemoteImageInfo(IReadOnlyList<ImageData> images, string requestLanguage)
|
||||
=> ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.PosterSize, ImageType.Primary, requestLanguage);
|
||||
|
||||
/// <summary>
|
||||
/// Converts backdrop <see cref="ImageData"/>s into <see cref="RemoteImageInfo"/>s.
|
||||
/// </summary>
|
||||
/// <param name="images">The input images.</param>
|
||||
/// <param name="requestLanguage">The requested language.</param>
|
||||
/// <param name="results">The collection to add the remote images into.</param>
|
||||
public void ConvertBackdropsToRemoteImageInfo(List<ImageData> images, string requestLanguage, List<RemoteImageInfo> results)
|
||||
{
|
||||
ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.BackdropSize, ImageType.Backdrop, requestLanguage, results);
|
||||
}
|
||||
/// <returns>The remote images.</returns>
|
||||
public IEnumerable<RemoteImageInfo> ConvertBackdropsToRemoteImageInfo(IReadOnlyList<ImageData> images, string requestLanguage)
|
||||
=> ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.BackdropSize, ImageType.Backdrop, requestLanguage);
|
||||
|
||||
/// <summary>
|
||||
/// Converts logo <see cref="ImageData"/>s into <see cref="RemoteImageInfo"/>s.
|
||||
/// </summary>
|
||||
/// <param name="images">The input images.</param>
|
||||
/// <param name="requestLanguage">The requested language.</param>
|
||||
/// <param name="results">The collection to add the remote images into.</param>
|
||||
public void ConvertLogosToRemoteImageInfo(List<ImageData> images, string requestLanguage, List<RemoteImageInfo> results)
|
||||
{
|
||||
ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.LogoSize, ImageType.Logo, requestLanguage, results);
|
||||
}
|
||||
/// <returns>The remote images.</returns>
|
||||
public IEnumerable<RemoteImageInfo> ConvertLogosToRemoteImageInfo(IReadOnlyList<ImageData> images, string requestLanguage)
|
||||
=> ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.LogoSize, ImageType.Logo, requestLanguage);
|
||||
|
||||
/// <summary>
|
||||
/// Converts profile <see cref="ImageData"/>s into <see cref="RemoteImageInfo"/>s.
|
||||
/// </summary>
|
||||
/// <param name="images">The input images.</param>
|
||||
/// <param name="requestLanguage">The requested language.</param>
|
||||
/// <param name="results">The collection to add the remote images into.</param>
|
||||
public void ConvertProfilesToRemoteImageInfo(List<ImageData> images, string requestLanguage, List<RemoteImageInfo> results)
|
||||
{
|
||||
ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.ProfileSize, ImageType.Primary, requestLanguage, results);
|
||||
}
|
||||
/// <returns>The remote images.</returns>
|
||||
public IEnumerable<RemoteImageInfo> ConvertProfilesToRemoteImageInfo(IReadOnlyList<ImageData> images, string requestLanguage)
|
||||
=> ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.ProfileSize, ImageType.Primary, requestLanguage);
|
||||
|
||||
/// <summary>
|
||||
/// Converts still <see cref="ImageData"/>s into <see cref="RemoteImageInfo"/>s.
|
||||
/// </summary>
|
||||
/// <param name="images">The input images.</param>
|
||||
/// <param name="requestLanguage">The requested language.</param>
|
||||
/// <param name="results">The collection to add the remote images into.</param>
|
||||
public void ConvertStillsToRemoteImageInfo(List<ImageData> images, string requestLanguage, List<RemoteImageInfo> results)
|
||||
{
|
||||
ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.StillSize, ImageType.Primary, requestLanguage, results);
|
||||
}
|
||||
/// <returns>The remote images.</returns>
|
||||
public IEnumerable<RemoteImageInfo> ConvertStillsToRemoteImageInfo(IReadOnlyList<ImageData> images, string requestLanguage)
|
||||
=> ConvertToRemoteImageInfo(images, Plugin.Instance.Configuration.StillSize, ImageType.Primary, requestLanguage);
|
||||
|
||||
/// <summary>
|
||||
/// Converts <see cref="ImageData"/>s into <see cref="RemoteImageInfo"/>s.
|
||||
@ -588,8 +578,8 @@ namespace MediaBrowser.Providers.Plugins.Tmdb
|
||||
/// <param name="size">The size of the image to fetch.</param>
|
||||
/// <param name="type">The type of the image.</param>
|
||||
/// <param name="requestLanguage">The requested language.</param>
|
||||
/// <param name="results">The collection to add the remote images into.</param>
|
||||
private void ConvertToRemoteImageInfo(List<ImageData> images, string size, ImageType type, string requestLanguage, List<RemoteImageInfo> results)
|
||||
/// <returns>The remote images.</returns>
|
||||
private IEnumerable<RemoteImageInfo> ConvertToRemoteImageInfo(IReadOnlyList<ImageData> images, string size, ImageType type, string requestLanguage)
|
||||
{
|
||||
// sizes provided are for original resolution, don't store them when downloading scaled images
|
||||
var scaleImage = !string.Equals(size, "original", StringComparison.OrdinalIgnoreCase);
|
||||
@ -598,7 +588,7 @@ namespace MediaBrowser.Providers.Plugins.Tmdb
|
||||
{
|
||||
var image = images[i];
|
||||
|
||||
results.Add(new RemoteImageInfo
|
||||
yield return new RemoteImageInfo
|
||||
{
|
||||
Url = GetUrl(size, image.FilePath),
|
||||
CommunityRating = image.VoteAverage,
|
||||
@ -609,7 +599,7 @@ namespace MediaBrowser.Providers.Plugins.Tmdb
|
||||
ProviderName = TmdbUtils.ProviderName,
|
||||
Type = type,
|
||||
RatingType = RatingType.Score
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -188,10 +188,16 @@ namespace MediaBrowser.Providers.Subtitles
|
||||
{
|
||||
var saveInMediaFolder = libraryOptions.SaveSubtitlesWithMedia;
|
||||
|
||||
await using var stream = response.Stream;
|
||||
await using var memoryStream = new MemoryStream();
|
||||
await stream.CopyToAsync(memoryStream).ConfigureAwait(false);
|
||||
memoryStream.Position = 0;
|
||||
var memoryStream = new MemoryStream();
|
||||
await using (memoryStream.ConfigureAwait(false))
|
||||
{
|
||||
var stream = response.Stream;
|
||||
await using (stream.ConfigureAwait(false))
|
||||
{
|
||||
await stream.CopyToAsync(memoryStream).ConfigureAwait(false);
|
||||
memoryStream.Position = 0;
|
||||
}
|
||||
}
|
||||
|
||||
var savePaths = new List<string>();
|
||||
var saveFileName = Path.GetFileNameWithoutExtension(video.Path) + "." + response.Language.ToLowerInvariant();
|
||||
|
Loading…
Reference in New Issue
Block a user