Create and use FormattingStreamWriter

Prevents bugs causes by system cultures with different formatting
This commit is contained in:
Bond_009 2024-08-30 17:10:28 +02:00
parent 2fe13f54ea
commit 3b94cfa837
5 changed files with 64 additions and 7 deletions

View File

@ -180,10 +180,7 @@ namespace MediaBrowser.Controller.Entities.TV
} }
public string FindSeriesPresentationUniqueKey() public string FindSeriesPresentationUniqueKey()
{ => Series?.PresentationUniqueKey;
var series = Series;
return series is null ? null : series.PresentationUniqueKey;
}
public string FindSeasonName() public string FindSeasonName()
{ {

View File

@ -430,8 +430,6 @@ namespace MediaBrowser.Controller.Entities
InternalItemsQuery query, InternalItemsQuery query,
ILibraryManager libraryManager) ILibraryManager libraryManager)
{ {
var user = query.User;
// This must be the last filter // This must be the last filter
if (!query.AdjacentTo.IsNullOrEmpty()) if (!query.AdjacentTo.IsNullOrEmpty())
{ {

View File

@ -1207,7 +1207,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
} }
// Generate concat configuration entries for each file and write to file // Generate concat configuration entries for each file and write to file
using StreamWriter sw = new StreamWriter(concatFilePath); Directory.CreateDirectory(Path.GetDirectoryName(concatFilePath));
using StreamWriter sw = new FormattingStreamWriter(concatFilePath, CultureInfo.InvariantCulture);
foreach (var path in files) foreach (var path in files)
{ {
var mediaInfoResult = GetMediaInfo( var mediaInfoResult = GetMediaInfo(

View File

@ -0,0 +1,38 @@
using System;
using System.IO;
namespace Jellyfin.Extensions;
/// <summary>
/// A custom StreamWriter which supports setting a IFormatProvider.
/// </summary>
public class FormattingStreamWriter : StreamWriter
{
private readonly IFormatProvider _formatProvider;
/// <summary>
/// Initializes a new instance of the <see cref="FormattingStreamWriter"/> class.
/// </summary>
/// <param name="stream">The stream to write to.</param>
/// <param name="formatProvider">The format provider to use.</param>
public FormattingStreamWriter(Stream stream, IFormatProvider formatProvider)
: base(stream)
{
_formatProvider = formatProvider;
}
/// <summary>
/// Initializes a new instance of the <see cref="FormattingStreamWriter"/> class.
/// </summary>
/// <param name="path">The complete file path to write to.</param>
/// <param name="formatProvider">The format provider to use.</param>
public FormattingStreamWriter(string path, IFormatProvider formatProvider)
: base(path)
{
_formatProvider = formatProvider;
}
/// <inheritdoc />
public override IFormatProvider FormatProvider
=> _formatProvider;
}

View File

@ -0,0 +1,23 @@
using System.Globalization;
using System.IO;
using System.Text;
using System.Threading;
using Xunit;
namespace Jellyfin.Extensions.Tests;
public static class FormattingStreamWriterTests
{
[Fact]
public static void Shuffle_Valid_Correct()
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE", false);
using (var ms = new MemoryStream())
using (var txt = new FormattingStreamWriter(ms, CultureInfo.InvariantCulture))
{
txt.Write("{0}", 3.14159);
txt.Close();
Assert.Equal("3.14159", Encoding.UTF8.GetString(ms.ToArray()));
}
}
}