Browse Source

Fix all warnings in MediaBrowser.MediaEncoding (#9073)

Bond-009 2 years ago
parent
commit
81c8890b6d

+ 3 - 2
MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs

@@ -498,11 +498,12 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
             _logger.LogInformation("Starting {ProcessFileName} with args {ProcessArgs}", _ffprobePath, args);
 
+            var memoryStream = new MemoryStream();
+            await using (memoryStream.ConfigureAwait(false))
             using (var processWrapper = new ProcessWrapper(process, this))
             {
-                await using var memoryStream = new MemoryStream();
                 StartProcess(processWrapper);
-                await process.StandardOutput.BaseStream.CopyToAsync(memoryStream, cancellationToken);
+                await process.StandardOutput.BaseStream.CopyToAsync(memoryStream, cancellationToken).ConfigureAwait(false);
                 memoryStream.Seek(0, SeekOrigin.Begin);
                 InternalMediaInfoResult result;
                 try

+ 0 - 4
MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj

@@ -11,10 +11,6 @@
     <GenerateDocumentationFile>true</GenerateDocumentationFile>
   </PropertyGroup>
 
-  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
-    <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
-  </PropertyGroup>
-
   <ItemGroup>
     <Compile Include="..\SharedVersion.cs" />
   </ItemGroup>

+ 28 - 16
MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs

@@ -226,7 +226,13 @@ namespace MediaBrowser.MediaEncoding.Subtitles
                 await ExtractTextSubtitle(mediaSource, subtitleStream, outputCodec, outputPath, cancellationToken)
                         .ConfigureAwait(false);
 
-                return new SubtitleInfo(outputPath, MediaProtocol.File, outputFormat, false);
+                return new SubtitleInfo()
+                {
+                    Path = outputPath,
+                    Protocol = MediaProtocol.File,
+                    Format = outputFormat,
+                    IsExternal = false
+                };
             }
 
             var currentFormat = (Path.GetExtension(subtitleStream.Path) ?? subtitleStream.Codec)
@@ -240,11 +246,23 @@ namespace MediaBrowser.MediaEncoding.Subtitles
 
                 await ConvertTextSubtitleToSrt(subtitleStream, mediaSource, outputPath, cancellationToken).ConfigureAwait(false);
 
-                return new SubtitleInfo(outputPath, MediaProtocol.File, "srt", true);
+                return new SubtitleInfo()
+                {
+                    Path = outputPath,
+                    Protocol = MediaProtocol.File,
+                    Format = "srt",
+                    IsExternal = true
+                };
             }
 
             // It's possible that the subtitleStream and mediaSource don't share the same protocol (e.g. .STRM file with local subs)
-            return new SubtitleInfo(subtitleStream.Path, _mediaSourceManager.GetPathProtocol(subtitleStream.Path), currentFormat, true);
+            return new SubtitleInfo()
+            {
+                Path = subtitleStream.Path,
+                Protocol = _mediaSourceManager.GetPathProtocol(subtitleStream.Path),
+                Format = currentFormat,
+                IsExternal = true
+            };
         }
 
         private bool TryGetWriter(string format, [NotNullWhen(true)] out ISubtitleWriter? value)
@@ -728,23 +746,17 @@ namespace MediaBrowser.MediaEncoding.Subtitles
             }
         }
 
-        public readonly struct SubtitleInfo
+#pragma warning disable CA1034 // Nested types should not be visible
+        // Only public for the unit tests
+        public readonly record struct SubtitleInfo
         {
-            public SubtitleInfo(string path, MediaProtocol protocol, string format, bool isExternal)
-            {
-                Path = path;
-                Protocol = protocol;
-                Format = format;
-                IsExternal = isExternal;
-            }
-
-            public string Path { get; }
+            public string Path { get; init; }
 
-            public MediaProtocol Protocol { get; }
+            public MediaProtocol Protocol { get; init; }
 
-            public string Format { get; }
+            public string Format { get; init; }
 
-            public bool IsExternal { get; }
+            public bool IsExternal { get; init; }
         }
     }
 }

+ 29 - 5
tests/Jellyfin.MediaEncoding.Tests/Subtitles/SubtitleEncoderTests.cs

@@ -26,7 +26,13 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
                     Path = "/media/sub.ass",
                     IsExternal = true
                 },
-                new SubtitleEncoder.SubtitleInfo("/media/sub.ass", MediaProtocol.File, "ass", true));
+                new SubtitleEncoder.SubtitleInfo()
+                {
+                    Path = "/media/sub.ass",
+                    Protocol = MediaProtocol.File,
+                    Format = "ass",
+                    IsExternal = true
+                });
 
             data.Add(
                 new MediaSourceInfo()
@@ -38,7 +44,13 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
                     Path = "/media/sub.ssa",
                     IsExternal = true
                 },
-                new SubtitleEncoder.SubtitleInfo("/media/sub.ssa", MediaProtocol.File, "ssa", true));
+                new SubtitleEncoder.SubtitleInfo()
+                {
+                    Path = "/media/sub.ssa",
+                    Protocol = MediaProtocol.File,
+                    Format = "ssa",
+                    IsExternal = true
+                });
 
             data.Add(
                 new MediaSourceInfo()
@@ -50,7 +62,13 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
                     Path = "/media/sub.srt",
                     IsExternal = true
                 },
-                new SubtitleEncoder.SubtitleInfo("/media/sub.srt", MediaProtocol.File, "srt", true));
+                new SubtitleEncoder.SubtitleInfo()
+                {
+                    Path = "/media/sub.srt",
+                    Protocol = MediaProtocol.File,
+                    Format = "srt",
+                    IsExternal = true
+                });
 
             data.Add(
                 new MediaSourceInfo()
@@ -62,14 +80,20 @@ namespace Jellyfin.MediaEncoding.Subtitles.Tests
                     Path = "/media/sub.ass",
                     IsExternal = true
                 },
-                new SubtitleEncoder.SubtitleInfo("/media/sub.ass", MediaProtocol.File, "ass", true));
+                new SubtitleEncoder.SubtitleInfo()
+                {
+                    Path = "/media/sub.ass",
+                    Protocol = MediaProtocol.File,
+                    Format = "ass",
+                    IsExternal = true
+                });
 
             return data;
         }
 
         [Theory]
         [MemberData(nameof(GetReadableFile_Valid_TestData))]
-        internal async Task GetReadableFile_Valid_Success(MediaSourceInfo mediaSource, MediaStream subtitleStream, SubtitleEncoder.SubtitleInfo subtitleInfo)
+        public async Task GetReadableFile_Valid_Success(MediaSourceInfo mediaSource, MediaStream subtitleStream, SubtitleEncoder.SubtitleInfo subtitleInfo)
         {
             var fixture = new Fixture().Customize(new AutoMoqCustomization { ConfigureMembers = true });
             var subtitleEncoder = fixture.Create<SubtitleEncoder>();