mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Merge pull request #5307 from barronpm/using-declarations
This commit is contained in:
commit
f06f3450c1
@ -69,58 +69,52 @@ namespace MediaBrowser.Providers.Music
|
|||||||
|
|
||||||
private IEnumerable<RemoteSearchResult> GetResultsFromResponse(Stream stream)
|
private IEnumerable<RemoteSearchResult> GetResultsFromResponse(Stream stream)
|
||||||
{
|
{
|
||||||
using (var oReader = new StreamReader(stream, Encoding.UTF8))
|
using var oReader = new StreamReader(stream, Encoding.UTF8);
|
||||||
|
var settings = new XmlReaderSettings()
|
||||||
{
|
{
|
||||||
var settings = new XmlReaderSettings()
|
ValidationType = ValidationType.None,
|
||||||
{
|
CheckCharacters = false,
|
||||||
ValidationType = ValidationType.None,
|
IgnoreProcessingInstructions = true,
|
||||||
CheckCharacters = false,
|
IgnoreComments = true
|
||||||
IgnoreProcessingInstructions = true,
|
};
|
||||||
IgnoreComments = true
|
|
||||||
};
|
|
||||||
|
|
||||||
using (var reader = XmlReader.Create(oReader, settings))
|
using var reader = XmlReader.Create(oReader, settings);
|
||||||
{
|
reader.MoveToContent();
|
||||||
reader.MoveToContent();
|
reader.Read();
|
||||||
reader.Read();
|
|
||||||
|
|
||||||
// Loop through each element
|
// Loop through each element
|
||||||
while (!reader.EOF && reader.ReadState == ReadState.Interactive)
|
while (!reader.EOF && reader.ReadState == ReadState.Interactive)
|
||||||
|
{
|
||||||
|
if (reader.NodeType == XmlNodeType.Element)
|
||||||
|
{
|
||||||
|
switch (reader.Name)
|
||||||
{
|
{
|
||||||
if (reader.NodeType == XmlNodeType.Element)
|
case "artist-list":
|
||||||
{
|
{
|
||||||
switch (reader.Name)
|
if (reader.IsEmptyElement)
|
||||||
{
|
{
|
||||||
case "artist-list":
|
reader.Read();
|
||||||
{
|
continue;
|
||||||
if (reader.IsEmptyElement)
|
|
||||||
{
|
|
||||||
reader.Read();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
using (var subReader = reader.ReadSubtree())
|
|
||||||
{
|
|
||||||
return ParseArtistList(subReader).ToList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
reader.Skip();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using var subReader = reader.ReadSubtree();
|
||||||
|
return ParseArtistList(subReader).ToList();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
default:
|
||||||
{
|
{
|
||||||
reader.Read();
|
reader.Skip();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return Enumerable.Empty<RemoteSearchResult>();
|
else
|
||||||
|
{
|
||||||
|
reader.Read();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Enumerable.Empty<RemoteSearchResult>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<RemoteSearchResult> ParseArtistList(XmlReader reader)
|
private IEnumerable<RemoteSearchResult> ParseArtistList(XmlReader reader)
|
||||||
@ -145,13 +139,11 @@ namespace MediaBrowser.Providers.Music
|
|||||||
|
|
||||||
var mbzId = reader.GetAttribute("id");
|
var mbzId = reader.GetAttribute("id");
|
||||||
|
|
||||||
using (var subReader = reader.ReadSubtree())
|
using var subReader = reader.ReadSubtree();
|
||||||
|
var artist = ParseArtist(subReader, mbzId);
|
||||||
|
if (artist != null)
|
||||||
{
|
{
|
||||||
var artist = ParseArtist(subReader, mbzId);
|
yield return artist;
|
||||||
if (artist != null)
|
|
||||||
{
|
|
||||||
yield return artist;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -128,53 +128,49 @@ namespace MediaBrowser.Providers.Music
|
|||||||
|
|
||||||
private IEnumerable<RemoteSearchResult> GetResultsFromResponse(Stream stream)
|
private IEnumerable<RemoteSearchResult> GetResultsFromResponse(Stream stream)
|
||||||
{
|
{
|
||||||
using (var oReader = new StreamReader(stream, Encoding.UTF8))
|
using var oReader = new StreamReader(stream, Encoding.UTF8);
|
||||||
|
var settings = new XmlReaderSettings()
|
||||||
{
|
{
|
||||||
var settings = new XmlReaderSettings()
|
ValidationType = ValidationType.None,
|
||||||
|
CheckCharacters = false,
|
||||||
|
IgnoreProcessingInstructions = true,
|
||||||
|
IgnoreComments = true
|
||||||
|
};
|
||||||
|
|
||||||
|
using var reader = XmlReader.Create(oReader, settings);
|
||||||
|
var results = ReleaseResult.Parse(reader);
|
||||||
|
|
||||||
|
return results.Select(i =>
|
||||||
|
{
|
||||||
|
var result = new RemoteSearchResult
|
||||||
{
|
{
|
||||||
ValidationType = ValidationType.None,
|
Name = i.Title,
|
||||||
CheckCharacters = false,
|
ProductionYear = i.Year
|
||||||
IgnoreProcessingInstructions = true,
|
|
||||||
IgnoreComments = true
|
|
||||||
};
|
};
|
||||||
|
|
||||||
using (var reader = XmlReader.Create(oReader, settings))
|
if (i.Artists.Count > 0)
|
||||||
{
|
{
|
||||||
var results = ReleaseResult.Parse(reader);
|
result.AlbumArtist = new RemoteSearchResult
|
||||||
|
|
||||||
return results.Select(i =>
|
|
||||||
{
|
{
|
||||||
var result = new RemoteSearchResult
|
SearchProviderName = Name,
|
||||||
{
|
Name = i.Artists[0].Item1
|
||||||
Name = i.Title,
|
};
|
||||||
ProductionYear = i.Year
|
|
||||||
};
|
|
||||||
|
|
||||||
if (i.Artists.Count > 0)
|
result.AlbumArtist.SetProviderId(MetadataProvider.MusicBrainzArtist, i.Artists[0].Item2);
|
||||||
{
|
|
||||||
result.AlbumArtist = new RemoteSearchResult
|
|
||||||
{
|
|
||||||
SearchProviderName = Name,
|
|
||||||
Name = i.Artists[0].Item1
|
|
||||||
};
|
|
||||||
|
|
||||||
result.AlbumArtist.SetProviderId(MetadataProvider.MusicBrainzArtist, i.Artists[0].Item2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(i.ReleaseId))
|
|
||||||
{
|
|
||||||
result.SetProviderId(MetadataProvider.MusicBrainzAlbum, i.ReleaseId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(i.ReleaseGroupId))
|
|
||||||
{
|
|
||||||
result.SetProviderId(MetadataProvider.MusicBrainzReleaseGroup, i.ReleaseGroupId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(i.ReleaseId))
|
||||||
|
{
|
||||||
|
result.SetProviderId(MetadataProvider.MusicBrainzAlbum, i.ReleaseId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(i.ReleaseGroupId))
|
||||||
|
{
|
||||||
|
result.SetProviderId(MetadataProvider.MusicBrainzReleaseGroup, i.ReleaseGroupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@ -339,10 +335,8 @@ namespace MediaBrowser.Providers.Music
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
using (var subReader = reader.ReadSubtree())
|
using var subReader = reader.ReadSubtree();
|
||||||
{
|
return ParseReleaseList(subReader).ToList();
|
||||||
return ParseReleaseList(subReader).ToList();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -383,13 +377,11 @@ namespace MediaBrowser.Providers.Music
|
|||||||
|
|
||||||
var releaseId = reader.GetAttribute("id");
|
var releaseId = reader.GetAttribute("id");
|
||||||
|
|
||||||
using (var subReader = reader.ReadSubtree())
|
using var subReader = reader.ReadSubtree();
|
||||||
|
var release = ParseRelease(subReader, releaseId);
|
||||||
|
if (release != null)
|
||||||
{
|
{
|
||||||
var release = ParseRelease(subReader, releaseId);
|
yield return release;
|
||||||
if (release != null)
|
|
||||||
{
|
|
||||||
yield return release;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -460,14 +452,12 @@ namespace MediaBrowser.Providers.Music
|
|||||||
|
|
||||||
case "artist-credit":
|
case "artist-credit":
|
||||||
{
|
{
|
||||||
using (var subReader = reader.ReadSubtree())
|
using var subReader = reader.ReadSubtree();
|
||||||
{
|
var artist = ParseArtistCredit(subReader);
|
||||||
var artist = ParseArtistCredit(subReader);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(artist.Item1))
|
if (!string.IsNullOrEmpty(artist.Item1))
|
||||||
{
|
{
|
||||||
result.Artists.Add(artist);
|
result.Artists.Add(artist);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -505,12 +495,10 @@ namespace MediaBrowser.Providers.Music
|
|||||||
switch (reader.Name)
|
switch (reader.Name)
|
||||||
{
|
{
|
||||||
case "name-credit":
|
case "name-credit":
|
||||||
{
|
{
|
||||||
using (var subReader = reader.ReadSubtree())
|
using var subReader = reader.ReadSubtree();
|
||||||
{
|
return ParseArtistNameCredit(subReader);
|
||||||
return ParseArtistNameCredit(subReader);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
@ -545,10 +533,8 @@ namespace MediaBrowser.Providers.Music
|
|||||||
case "artist":
|
case "artist":
|
||||||
{
|
{
|
||||||
var id = reader.GetAttribute("id");
|
var id = reader.GetAttribute("id");
|
||||||
using (var subReader = reader.ReadSubtree())
|
using var subReader = reader.ReadSubtree();
|
||||||
{
|
return ParseArtistArtistCredit(subReader, id);
|
||||||
return ParseArtistArtistCredit(subReader, id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -647,47 +633,43 @@ namespace MediaBrowser.Providers.Music
|
|||||||
IgnoreComments = true
|
IgnoreComments = true
|
||||||
};
|
};
|
||||||
|
|
||||||
using (var reader = XmlReader.Create(oReader, settings))
|
using var reader = XmlReader.Create(oReader, settings);
|
||||||
|
reader.MoveToContent();
|
||||||
|
reader.Read();
|
||||||
|
|
||||||
|
// Loop through each element
|
||||||
|
while (!reader.EOF && reader.ReadState == ReadState.Interactive)
|
||||||
{
|
{
|
||||||
reader.MoveToContent();
|
if (reader.NodeType == XmlNodeType.Element)
|
||||||
reader.Read();
|
|
||||||
|
|
||||||
// Loop through each element
|
|
||||||
while (!reader.EOF && reader.ReadState == ReadState.Interactive)
|
|
||||||
{
|
{
|
||||||
if (reader.NodeType == XmlNodeType.Element)
|
switch (reader.Name)
|
||||||
{
|
{
|
||||||
switch (reader.Name)
|
case "release-group-list":
|
||||||
{
|
{
|
||||||
case "release-group-list":
|
if (reader.IsEmptyElement)
|
||||||
{
|
{
|
||||||
if (reader.IsEmptyElement)
|
reader.Read();
|
||||||
{
|
continue;
|
||||||
reader.Read();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
using (var subReader = reader.ReadSubtree())
|
|
||||||
{
|
|
||||||
return GetFirstReleaseGroupId(subReader);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
using var subReader = reader.ReadSubtree();
|
||||||
{
|
return GetFirstReleaseGroupId(subReader);
|
||||||
reader.Skip();
|
}
|
||||||
break;
|
|
||||||
}
|
default:
|
||||||
|
{
|
||||||
|
reader.Skip();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
reader.Read();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
return null;
|
{
|
||||||
|
reader.Read();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetFirstReleaseGroupId(XmlReader reader)
|
private string GetFirstReleaseGroupId(XmlReader reader)
|
||||||
|
@ -172,23 +172,19 @@ namespace MediaBrowser.Providers.Studios
|
|||||||
|
|
||||||
public IEnumerable<string> GetAvailableImages(string file)
|
public IEnumerable<string> GetAvailableImages(string file)
|
||||||
{
|
{
|
||||||
using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
|
using var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||||
|
using var reader = new StreamReader(fileStream);
|
||||||
|
var lines = new List<string>();
|
||||||
|
|
||||||
|
foreach (var line in reader.ReadAllLines())
|
||||||
{
|
{
|
||||||
using (var reader = new StreamReader(fileStream))
|
if (!string.IsNullOrWhiteSpace(line))
|
||||||
{
|
{
|
||||||
var lines = new List<string>();
|
lines.Add(line);
|
||||||
|
|
||||||
foreach (var line in reader.ReadAllLines())
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrWhiteSpace(line))
|
|
||||||
{
|
|
||||||
lines.Add(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return lines;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return lines;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,48 +187,46 @@ namespace MediaBrowser.Providers.Subtitles
|
|||||||
{
|
{
|
||||||
var saveInMediaFolder = libraryOptions.SaveSubtitlesWithMedia;
|
var saveInMediaFolder = libraryOptions.SaveSubtitlesWithMedia;
|
||||||
|
|
||||||
using (var stream = response.Stream)
|
using var stream = response.Stream;
|
||||||
using (var memoryStream = new MemoryStream())
|
using var memoryStream = new MemoryStream();
|
||||||
|
await stream.CopyToAsync(memoryStream).ConfigureAwait(false);
|
||||||
|
memoryStream.Position = 0;
|
||||||
|
|
||||||
|
var savePaths = new List<string>();
|
||||||
|
var saveFileName = Path.GetFileNameWithoutExtension(video.Path) + "." + response.Language.ToLowerInvariant();
|
||||||
|
|
||||||
|
if (response.IsForced)
|
||||||
{
|
{
|
||||||
await stream.CopyToAsync(memoryStream).ConfigureAwait(false);
|
saveFileName += ".forced";
|
||||||
memoryStream.Position = 0;
|
}
|
||||||
|
|
||||||
var savePaths = new List<string>();
|
saveFileName += "." + response.Format.ToLowerInvariant();
|
||||||
var saveFileName = Path.GetFileNameWithoutExtension(video.Path) + "." + response.Language.ToLowerInvariant();
|
|
||||||
|
|
||||||
if (response.IsForced)
|
if (saveInMediaFolder)
|
||||||
|
{
|
||||||
|
var mediaFolderPath = Path.GetFullPath(Path.Combine(video.ContainingFolderPath, saveFileName));
|
||||||
|
// TODO: Add some error handling to the API user: return BadRequest("Could not save subtitle, bad path.");
|
||||||
|
if (mediaFolderPath.StartsWith(video.ContainingFolderPath, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
saveFileName += ".forced";
|
savePaths.Add(mediaFolderPath);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
saveFileName += "." + response.Format.ToLowerInvariant();
|
var internalPath = Path.GetFullPath(Path.Combine(video.GetInternalMetadataPath(), saveFileName));
|
||||||
|
|
||||||
if (saveInMediaFolder)
|
// TODO: Add some error to the user: return BadRequest("Could not save subtitle, bad path.");
|
||||||
{
|
if (internalPath.StartsWith(video.GetInternalMetadataPath(), StringComparison.Ordinal))
|
||||||
var mediaFolderPath = Path.GetFullPath(Path.Combine(video.ContainingFolderPath, saveFileName));
|
{
|
||||||
// TODO: Add some error handling to the API user: return BadRequest("Could not save subtitle, bad path.");
|
savePaths.Add(internalPath);
|
||||||
if (mediaFolderPath.StartsWith(video.ContainingFolderPath, StringComparison.Ordinal))
|
}
|
||||||
{
|
|
||||||
savePaths.Add(mediaFolderPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var internalPath = Path.GetFullPath(Path.Combine(video.GetInternalMetadataPath(), saveFileName));
|
if (savePaths.Count > 0)
|
||||||
|
{
|
||||||
// TODO: Add some error to the user: return BadRequest("Could not save subtitle, bad path.");
|
await TrySaveToFiles(memoryStream, savePaths).ConfigureAwait(false);
|
||||||
if (internalPath.StartsWith(video.GetInternalMetadataPath(), StringComparison.Ordinal))
|
}
|
||||||
{
|
else
|
||||||
savePaths.Add(internalPath);
|
{
|
||||||
}
|
_logger.LogError("An uploaded subtitle could not be saved because the resulting paths were invalid.");
|
||||||
|
|
||||||
if (savePaths.Count > 0)
|
|
||||||
{
|
|
||||||
await TrySaveToFiles(memoryStream, savePaths).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_logger.LogError("An uploaded subtitle could not be saved because the resulting paths were invalid.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,10 +245,8 @@ namespace MediaBrowser.Providers.Subtitles
|
|||||||
Directory.CreateDirectory(Path.GetDirectoryName(savePath));
|
Directory.CreateDirectory(Path.GetDirectoryName(savePath));
|
||||||
|
|
||||||
// use FileShare.None as this bypasses dotnet bug dotnet/runtime#42790 .
|
// use FileShare.None as this bypasses dotnet bug dotnet/runtime#42790 .
|
||||||
using (var fs = new FileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.None, FileStreamBufferSize, true))
|
using var fs = new FileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.None, FileStreamBufferSize, true);
|
||||||
{
|
await stream.CopyToAsync(fs).ConfigureAwait(false);
|
||||||
await stream.CopyToAsync(fs).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user