Browse Source

Merge branch 'master' into dlnope_never_again

cvium 3 năm trước cách đây
mục cha
commit
2b02b53fc0
65 tập tin đã thay đổi với 132 bổ sung138 xóa
  1. 0 1
      .ci/azure-pipelines-abi.yml
  2. 0 1
      .ci/azure-pipelines-main.yml
  3. 0 1
      .ci/azure-pipelines-package.yml
  4. 0 1
      .ci/azure-pipelines-test.yml
  5. 1 2
      .github/workflows/codeql-analysis.yml
  6. 0 2
      .github/workflows/openapi.yml
  7. 4 1
      Directory.Build.props
  8. 1 1
      Emby.Dlna/Emby.Dlna.csproj
  9. 1 1
      Emby.Drawing/ImageProcessor.cs
  10. 2 0
      Emby.Naming/Common/NamingOptions.cs
  11. 1 1
      Emby.Naming/Emby.Naming.csproj
  12. 1 1
      Emby.Server.Implementations/Dto/DtoService.cs
  13. 5 5
      Emby.Server.Implementations/Emby.Server.Implementations.csproj
  14. 1 1
      Emby.Server.Implementations/IO/LibraryMonitor.cs
  15. 7 7
      Emby.Server.Implementations/Library/LibraryManager.cs
  16. 1 1
      Emby.Server.Implementations/Library/Validators/PeopleValidator.cs
  17. 4 4
      Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
  18. 6 6
      Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
  19. 1 1
      Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs
  20. 3 3
      Emby.Server.Implementations/LiveTv/LiveTvManager.cs
  21. 1 1
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs
  22. 3 3
      Emby.Server.Implementations/Localization/Core/vi.json
  23. 4 4
      Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs
  24. 4 4
      Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs
  25. 4 4
      Jellyfin.Api/Controllers/DynamicHlsController.cs
  26. 3 3
      Jellyfin.Api/Controllers/HlsSegmentController.cs
  27. 3 3
      Jellyfin.Api/Controllers/ImageByNameController.cs
  28. 1 1
      Jellyfin.Api/Controllers/SubtitleController.cs
  29. 1 1
      Jellyfin.Api/Helpers/ClassMigrationHelper.cs
  30. 1 1
      Jellyfin.Api/Helpers/StreamingHelpers.cs
  31. 2 0
      Jellyfin.Api/Helpers/TranscodingJobHelper.cs
  32. 2 2
      Jellyfin.Api/Jellyfin.Api.csproj
  33. 2 2
      Jellyfin.Data/Jellyfin.Data.csproj
  34. 1 1
      Jellyfin.Server.Implementations/Events/EventManager.cs
  35. 4 4
      Jellyfin.Server.Implementations/Jellyfin.Server.Implementations.csproj
  36. 4 4
      Jellyfin.Server/Jellyfin.Server.csproj
  37. 1 1
      Jellyfin.Server/Middleware/ResponseTimeMiddleware.cs
  38. 1 1
      Jellyfin.Server/Middleware/UrlDecodeQueryFeature.cs
  39. 1 1
      Jellyfin.Server/Program.cs
  40. 3 3
      MediaBrowser.Common/MediaBrowser.Common.csproj
  41. 1 1
      MediaBrowser.Controller/Entities/BaseItem.cs
  42. 3 1
      MediaBrowser.Controller/Entities/Folder.cs
  43. 2 2
      MediaBrowser.Controller/IO/FileData.cs
  44. 4 4
      MediaBrowser.Controller/MediaBrowser.Controller.csproj
  45. 1 1
      MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs
  46. 1 1
      MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs
  47. 2 2
      MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj
  48. 0 14
      MediaBrowser.Model/Dlna/DlnaMaps.cs
  49. 1 1
      MediaBrowser.Model/Dlna/StreamInfo.cs
  50. 3 3
      MediaBrowser.Model/MediaBrowser.Model.csproj
  51. 2 2
      MediaBrowser.Providers/Manager/ItemImageProvider.cs
  52. 3 3
      MediaBrowser.Providers/Manager/MetadataService.cs
  53. 3 3
      MediaBrowser.Providers/MediaBrowser.Providers.csproj
  54. 2 2
      MediaBrowser.Providers/MediaInfo/EmbeddedImageProvider.cs
  55. 1 1
      MediaBrowser.XbmcMetadata/EntryPoint.cs
  56. 1 1
      deployment/Dockerfile.centos.amd64
  57. 1 1
      deployment/Dockerfile.fedora.amd64
  58. 1 1
      deployment/Dockerfile.ubuntu.amd64
  59. 1 1
      deployment/Dockerfile.ubuntu.arm64
  60. 1 1
      deployment/Dockerfile.ubuntu.armhf
  61. 6 0
      jellyfin.ruleset
  62. 2 2
      tests/Jellyfin.Api.Tests/Jellyfin.Api.Tests.csproj
  63. 1 1
      tests/Jellyfin.Server.Integration.Tests/Controllers/DashboardControllerTests.cs
  64. 2 2
      tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj
  65. 2 2
      tests/Jellyfin.Server.Tests/Jellyfin.Server.Tests.csproj

+ 0 - 1
.ci/azure-pipelines-abi.yml

@@ -34,7 +34,6 @@ jobs:
         inputs:
           packageType: sdk
           version: ${{ parameters.DotNetSdkVersion }}
-          includePreviewVersions: true
 
       - task: DotNetCoreCLI@2
         displayName: 'Install ABI CompatibilityChecker Tool'

+ 0 - 1
.ci/azure-pipelines-main.yml

@@ -54,7 +54,6 @@ jobs:
         inputs:
           packageType: sdk
           version: ${{ parameters.DotNetSdkVersion }}
-          includePreviewVersions: true
 
       - task: DotNetCoreCLI@2
         displayName: 'Publish Server'

+ 0 - 1
.ci/azure-pipelines-package.yml

@@ -199,7 +199,6 @@ jobs:
     inputs:
       packageType: 'sdk'
       version: '6.0.x'
-      includePreviewVersions: true
 
   - task: DotNetCoreCLI@2
     displayName: 'Build Stable Nuget packages'

+ 0 - 1
.ci/azure-pipelines-test.yml

@@ -41,7 +41,6 @@ jobs:
         inputs:
           packageType: sdk
           version: ${{ parameters.DotNetSdkVersion }}
-          includePreviewVersions: true
 
       - task: SonarCloudPrepare@1
         displayName: 'Prepare analysis on SonarCloud'

+ 1 - 2
.github/workflows/codeql-analysis.yml

@@ -25,8 +25,7 @@ jobs:
       uses: actions/setup-dotnet@v1
       with:
         dotnet-version: '6.0.x'
-        include-prerelease: true
-        
+
     - name: Initialize CodeQL
       uses: github/codeql-action/init@v1
       with:

+ 0 - 2
.github/workflows/openapi.yml

@@ -20,7 +20,6 @@ jobs:
         uses: actions/setup-dotnet@v1
         with:
           dotnet-version: '6.0.x'
-          include-prerelease: true
       - name: Generate openapi.json
         run: dotnet test tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj -c Release --filter "Jellyfin.Server.Integration.Tests.OpenApiSpecTests"
       - name: Upload openapi.json
@@ -45,7 +44,6 @@ jobs:
         uses: actions/setup-dotnet@v1
         with:
           dotnet-version: '6.0.x'
-          include-prerelease: true
       - name: Generate openapi.json
         run: dotnet test tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj -c Release --filter "Jellyfin.Server.Integration.Tests.OpenApiSpecTests"
       - name: Upload openapi.json

+ 4 - 1
Directory.Build.props

@@ -3,10 +3,13 @@
 
   <PropertyGroup>
     <Nullable>enable</Nullable>
-    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
     <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)/jellyfin.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
 
+  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
+  </PropertyGroup>
+
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <AnalysisMode>AllEnabledByDefault</AnalysisMode>
   </PropertyGroup>

+ 1 - 1
Emby.Dlna/Emby.Dlna.csproj

@@ -72,7 +72,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
   </ItemGroup>
 
 </Project>

+ 1 - 1
Emby.Drawing/ImageProcessor.cs

@@ -26,7 +26,7 @@ namespace Emby.Drawing
     public sealed class ImageProcessor : IImageProcessor, IDisposable
     {
         // Increment this when there's a change requiring caches to be invalidated
-        private const string Version = "3";
+        private const char Version = '3';
 
         private static readonly HashSet<string> _transparentImageTypes
             = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { ".png", ".webp", ".gif" };

+ 2 - 0
Emby.Naming/Common/NamingOptions.cs

@@ -1,3 +1,5 @@
+#pragma warning disable CA1819
+
 using System;
 using System.Linq;
 using System.Text.RegularExpressions;

+ 1 - 1
Emby.Naming/Emby.Naming.csproj

@@ -38,7 +38,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
+    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.0" PrivateAssets="All" />
   </ItemGroup>
 
   <!-- Code Analyzers-->

+ 1 - 1
Emby.Server.Implementations/Dto/DtoService.cs

@@ -497,7 +497,7 @@ namespace Emby.Server.Implementations.Dto
             }
             catch (Exception ex)
             {
-                _logger.LogError(ex, "Error getting {imageType} image info for {path}", image.Type, image.Path);
+                _logger.LogError(ex, "Error getting {ImageType} image info for {Path}", image.Type, image.Path);
                 return null;
             }
         }

+ 5 - 5
Emby.Server.Implementations/Emby.Server.Implementations.csproj

@@ -25,11 +25,11 @@
   <ItemGroup>
     <PackageReference Include="DiscUtils.Udf" Version="0.16.13" />
     <PackageReference Include="Jellyfin.XmlTv" Version="10.6.2" />
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.0" />
     <PackageReference Include="Mono.Nat" Version="3.0.1" />
     <PackageReference Include="prometheus-net.DotNetRuntime" Version="4.2.2" />
     <PackageReference Include="sharpcompress" Version="0.30.0" />

+ 1 - 1
Emby.Server.Implementations/IO/LibraryMonitor.cs

@@ -276,7 +276,7 @@ namespace Emby.Server.Implementations.IO
                 }
                 catch (Exception ex)
                 {
-                    _logger.LogError(ex, "Error watching path: {path}", path);
+                    _logger.LogError(ex, "Error watching path: {Path}", path);
                 }
             });
         }

+ 7 - 7
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -492,7 +492,7 @@ namespace Emby.Server.Implementations.Library
             }
             catch (Exception ex)
             {
-                _logger.LogError(ex, "Error in {resolver} resolving {path}", resolver.GetType().Name, args.Path);
+                _logger.LogError(ex, "Error in {Resolver} resolving {Path}", resolver.GetType().Name, args.Path);
                 return null;
             }
         }
@@ -799,7 +799,7 @@ namespace Emby.Server.Implementations.Library
                     {
                         var userRootPath = _configurationManager.ApplicationPaths.DefaultUserViewsPath;
 
-                        _logger.LogDebug("Creating userRootPath at {path}", userRootPath);
+                        _logger.LogDebug("Creating userRootPath at {Path}", userRootPath);
                         Directory.CreateDirectory(userRootPath);
 
                         var newItemId = GetNewItemId(userRootPath, typeof(UserRootFolder));
@@ -810,7 +810,7 @@ namespace Emby.Server.Implementations.Library
                         }
                         catch (Exception ex)
                         {
-                            _logger.LogError(ex, "Error creating UserRootFolder {path}", newItemId);
+                            _logger.LogError(ex, "Error creating UserRootFolder {Path}", newItemId);
                         }
 
                         if (tmpItem == null)
@@ -827,7 +827,7 @@ namespace Emby.Server.Implementations.Library
                         }
 
                         _userRootFolder = tmpItem;
-                        _logger.LogDebug("Setting userRootFolder: {folder}", _userRootFolder);
+                        _logger.LogDebug("Setting userRootFolder: {Folder}", _userRootFolder);
                     }
                 }
             }
@@ -1213,7 +1213,7 @@ namespace Emby.Server.Implementations.Library
                         }
                         catch (Exception ex)
                         {
-                            _logger.LogError(ex, "Error resolving shortcut file {file}", i);
+                            _logger.LogError(ex, "Error resolving shortcut file {File}", i);
                             return null;
                         }
                     })
@@ -1698,7 +1698,7 @@ namespace Emby.Server.Implementations.Library
 
                     if (video == null)
                     {
-                        _logger.LogError("Intro resolver returned null for {path}.", info.Path);
+                        _logger.LogError("Intro resolver returned null for {Path}.", info.Path);
                     }
                     else
                     {
@@ -1717,7 +1717,7 @@ namespace Emby.Server.Implementations.Library
                 }
                 catch (Exception ex)
                 {
-                    _logger.LogError(ex, "Error resolving path {path}.", info.Path);
+                    _logger.LogError(ex, "Error resolving path {Path}.", info.Path);
                 }
             }
             else

+ 1 - 1
Emby.Server.Implementations/Library/Validators/PeopleValidator.cs

@@ -78,7 +78,7 @@ namespace Emby.Server.Implementations.Library.Validators
                 }
                 catch (Exception ex)
                 {
-                    _logger.LogError(ex, "Error validating IBN entry {person}", person);
+                    _logger.LogError(ex, "Error validating IBN entry {Person}", person);
                 }
 
                 // Update progress

+ 4 - 4
Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -1308,16 +1308,16 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 await recorder.Record(directStreamProvider, mediaStreamInfo, recordPath, duration, onStarted, activeRecordingInfo.CancellationTokenSource.Token).ConfigureAwait(false);
 
                 recordingStatus = RecordingStatus.Completed;
-                _logger.LogInformation("Recording completed: {recordPath}", recordPath);
+                _logger.LogInformation("Recording completed: {RecordPath}", recordPath);
             }
             catch (OperationCanceledException)
             {
-                _logger.LogInformation("Recording stopped: {recordPath}", recordPath);
+                _logger.LogInformation("Recording stopped: {RecordPath}", recordPath);
                 recordingStatus = RecordingStatus.Completed;
             }
             catch (Exception ex)
             {
-                _logger.LogError(ex, "Error recording to {recordPath}", recordPath);
+                _logger.LogError(ex, "Error recording to {RecordPath}", recordPath);
                 recordingStatus = RecordingStatus.Error;
             }
 
@@ -1404,7 +1404,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 }
                 catch (Exception ex)
                 {
-                    _logger.LogError(ex, "Error deleting 0-byte failed recording file {path}", path);
+                    _logger.LogError(ex, "Error deleting 0-byte failed recording file {Path}", path);
                 }
             }
         }

+ 6 - 6
Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs

@@ -225,13 +225,13 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             {
                 try
                 {
-                    _logger.LogInformation("Stopping ffmpeg recording process for {path}", _targetPath);
+                    _logger.LogInformation("Stopping ffmpeg recording process for {Path}", _targetPath);
 
                     _process.StandardInput.WriteLine("q");
                 }
                 catch (Exception ex)
                 {
-                    _logger.LogError(ex, "Error stopping recording transcoding job for {path}", _targetPath);
+                    _logger.LogError(ex, "Error stopping recording transcoding job for {Path}", _targetPath);
                 }
 
                 if (_hasExited)
@@ -241,7 +241,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
                 try
                 {
-                    _logger.LogInformation("Calling recording process.WaitForExit for {path}", _targetPath);
+                    _logger.LogInformation("Calling recording process.WaitForExit for {Path}", _targetPath);
 
                     if (_process.WaitForExit(10000))
                     {
@@ -250,7 +250,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 }
                 catch (Exception ex)
                 {
-                    _logger.LogError(ex, "Error waiting for recording process to exit for {path}", _targetPath);
+                    _logger.LogError(ex, "Error waiting for recording process to exit for {Path}", _targetPath);
                 }
 
                 if (_hasExited)
@@ -260,13 +260,13 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
                 try
                 {
-                    _logger.LogInformation("Killing ffmpeg recording process for {path}", _targetPath);
+                    _logger.LogInformation("Killing ffmpeg recording process for {Path}", _targetPath);
 
                     _process.Kill();
                 }
                 catch (Exception ex)
                 {
-                    _logger.LogError(ex, "Error killing recording transcoding job for {path}", _targetPath);
+                    _logger.LogError(ex, "Error killing recording transcoding job for {Path}", _targetPath);
                 }
             }
         }

+ 1 - 1
Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs

@@ -393,7 +393,7 @@ namespace Emby.Server.Implementations.LiveTv
             }
             catch (Exception ex)
             {
-                _logger.LogError(ex, "Error getting image info for {name}", info.Name);
+                _logger.LogError(ex, "Error getting image info for {Name}", info.Name);
             }
 
             return null;

+ 3 - 3
Emby.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -1054,7 +1054,7 @@ namespace Emby.Server.Implementations.LiveTv
             {
                 cancellationToken.ThrowIfCancellationRequested();
 
-                _logger.LogDebug("Refreshing guide from {name}", service.Name);
+                _logger.LogDebug("Refreshing guide from {Name}", service.Name);
 
                 try
                 {
@@ -1135,7 +1135,7 @@ namespace Emby.Server.Implementations.LiveTv
                 }
                 catch (Exception ex)
                 {
-                    _logger.LogError(ex, "Error getting channel information for {name}", channelInfo.Item2.Name);
+                    _logger.LogError(ex, "Error getting channel information for {Name}", channelInfo.Item2.Name);
                 }
 
                 numComplete++;
@@ -1248,7 +1248,7 @@ namespace Emby.Server.Implementations.LiveTv
                 }
                 catch (Exception ex)
                 {
-                    _logger.LogError(ex, "Error getting programs for channel {name}", currentChannel.Name);
+                    _logger.LogError(ex, "Error getting programs for channel {Name}", currentChannel.Name);
                 }
 
                 numComplete++;

+ 1 - 1
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs

@@ -82,7 +82,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 
             Directory.CreateDirectory(Path.GetDirectoryName(TempFilePath));
 
-            Logger.LogInformation("Opening HDHR UDP Live stream from {host}", uri.Host);
+            Logger.LogInformation("Opening HDHR UDP Live stream from {Host}", uri.Host);
 
             var remoteAddress = IPAddress.Parse(uri.Host);
             IPAddress localAddress = null;

+ 3 - 3
Emby.Server.Implementations/Localization/Core/vi.json

@@ -62,11 +62,11 @@
     "PluginUninstalledWithName": "{0} đã được gỡ bỏ",
     "PluginInstalledWithName": "{0} đã được cài đặt",
     "Plugin": "Plugin",
-    "NotificationOptionVideoPlaybackStopped": "Phát lại video đã dừng",
+    "NotificationOptionVideoPlaybackStopped": "Đã dừng phát lại video",
     "NotificationOptionVideoPlayback": "Đã bắt đầu phát lại video",
     "NotificationOptionUserLockedOut": "Người dùng bị khóa",
     "NotificationOptionTaskFailed": "Lỗi tác vụ đã lên lịch",
-    "NotificationOptionServerRestartRequired": "Yêu cầu khởi động lại Server",
+    "NotificationOptionServerRestartRequired": "Yêu cầu khởi động lại máy chủ",
     "NotificationOptionPluginUpdateInstalled": "Cập nhật Plugin đã được cài đặt",
     "NotificationOptionPluginUninstalled": "Đã gỡ bỏ Plugin",
     "NotificationOptionPluginInstalled": "Đã cài đặt Plugin",
@@ -75,7 +75,7 @@
     "NotificationOptionInstallationFailed": "Cài đặt thất bại",
     "NotificationOptionCameraImageUploaded": "Đã tải lên hình ảnh máy ảnh",
     "NotificationOptionAudioPlaybackStopped": "Phát lại âm thanh đã dừng",
-    "NotificationOptionAudioPlayback": "Phát lại âm thanh đã bắt đầu",
+    "NotificationOptionAudioPlayback": "Đã bắt đầu phát lại âm thanh",
     "NotificationOptionApplicationUpdateInstalled": "Bản cập nhật ứng dụng đã được cài đặt",
     "NotificationOptionApplicationUpdateAvailable": "Bản cập nhật ứng dụng hiện sẵn có",
     "NewVersionIsAvailable": "Một phiên bản mới của Jellyfin Server sẵn có để tải.",

+ 4 - 4
Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs

@@ -161,11 +161,11 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
                     }
                     catch (UnauthorizedAccessException ex)
                     {
-                        _logger.LogError(ex, "Error deleting directory {path}", directory);
+                        _logger.LogError(ex, "Error deleting directory {Path}", directory);
                     }
                     catch (IOException ex)
                     {
-                        _logger.LogError(ex, "Error deleting directory {path}", directory);
+                        _logger.LogError(ex, "Error deleting directory {Path}", directory);
                     }
                 }
             }
@@ -179,11 +179,11 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
             }
             catch (UnauthorizedAccessException ex)
             {
-                _logger.LogError(ex, "Error deleting file {path}", path);
+                _logger.LogError(ex, "Error deleting file {Path}", path);
             }
             catch (IOException ex)
             {
-                _logger.LogError(ex, "Error deleting file {path}", path);
+                _logger.LogError(ex, "Error deleting file {Path}", path);
             }
         }
     }

+ 4 - 4
Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs

@@ -141,11 +141,11 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
                     }
                     catch (UnauthorizedAccessException ex)
                     {
-                        _logger.LogError(ex, "Error deleting directory {path}", directory);
+                        _logger.LogError(ex, "Error deleting directory {Path}", directory);
                     }
                     catch (IOException ex)
                     {
-                        _logger.LogError(ex, "Error deleting directory {path}", directory);
+                        _logger.LogError(ex, "Error deleting directory {Path}", directory);
                     }
                 }
             }
@@ -159,11 +159,11 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
             }
             catch (UnauthorizedAccessException ex)
             {
-                _logger.LogError(ex, "Error deleting file {path}", path);
+                _logger.LogError(ex, "Error deleting file {Path}", path);
             }
             catch (IOException ex)
             {
-                _logger.LogError(ex, "Error deleting file {path}", path);
+                _logger.LogError(ex, "Error deleting file {Path}", path);
             }
         }
     }

+ 4 - 4
Jellyfin.Api/Controllers/DynamicHlsController.cs

@@ -1794,7 +1794,7 @@ namespace Jellyfin.Api.Controllers
                 return;
             }
 
-            _logger.LogDebug("Deleting partial HLS file {path}", path);
+            _logger.LogDebug("Deleting partial HLS file {Path}", path);
 
             try
             {
@@ -1802,15 +1802,15 @@ namespace Jellyfin.Api.Controllers
             }
             catch (IOException ex)
             {
-                _logger.LogError(ex, "Error deleting partial stream file(s) {path}", path);
+                _logger.LogError(ex, "Error deleting partial stream file(s) {Path}", path);
 
                 var task = Task.Delay(100);
-                Task.WaitAll(task);
+                task.Wait();
                 DeleteFile(path, retryCount + 1);
             }
             catch (Exception ex)
             {
-                _logger.LogError(ex, "Error deleting partial stream file(s) {path}", path);
+                _logger.LogError(ex, "Error deleting partial stream file(s) {Path}", path);
             }
         }
 

+ 3 - 3
Jellyfin.Api/Controllers/HlsSegmentController.cs

@@ -64,7 +64,7 @@ namespace Jellyfin.Api.Controllers
             var transcodePath = _serverConfigurationManager.GetTranscodePath();
             file = Path.GetFullPath(Path.Combine(transcodePath, file));
             var fileDir = Path.GetDirectoryName(file);
-            if (string.IsNullOrEmpty(fileDir) || !fileDir.StartsWith(transcodePath))
+            if (string.IsNullOrEmpty(fileDir) || !fileDir.StartsWith(transcodePath, StringComparison.InvariantCulture))
             {
                 return BadRequest("Invalid segment.");
             }
@@ -90,7 +90,7 @@ namespace Jellyfin.Api.Controllers
             var transcodePath = _serverConfigurationManager.GetTranscodePath();
             file = Path.GetFullPath(Path.Combine(transcodePath, file));
             var fileDir = Path.GetDirectoryName(file);
-            if (string.IsNullOrEmpty(fileDir) || !fileDir.StartsWith(transcodePath) || Path.GetExtension(file) != ".m3u8")
+            if (string.IsNullOrEmpty(fileDir) || !fileDir.StartsWith(transcodePath, StringComparison.InvariantCulture) || Path.GetExtension(file) != ".m3u8")
             {
                 return BadRequest("Invalid segment.");
             }
@@ -144,7 +144,7 @@ namespace Jellyfin.Api.Controllers
 
             file = Path.GetFullPath(Path.Combine(transcodeFolderPath, file));
             var fileDir = Path.GetDirectoryName(file);
-            if (string.IsNullOrEmpty(fileDir) || !fileDir.StartsWith(transcodeFolderPath))
+            if (string.IsNullOrEmpty(fileDir) || !fileDir.StartsWith(transcodeFolderPath, StringComparison.InvariantCulture))
             {
                 return BadRequest("Invalid segment.");
             }

+ 3 - 3
Jellyfin.Api/Controllers/ImageByNameController.cs

@@ -82,7 +82,7 @@ namespace Jellyfin.Api.Controllers
                 return NotFound();
             }
 
-            if (!path.StartsWith(_applicationPaths.GeneralPath))
+            if (!path.StartsWith(_applicationPaths.GeneralPath, StringComparison.InvariantCulture))
             {
                 return BadRequest("Invalid image path.");
             }
@@ -177,7 +177,7 @@ namespace Jellyfin.Api.Controllers
 
                 if (!string.IsNullOrEmpty(path) && System.IO.File.Exists(path))
                 {
-                    if (!path.StartsWith(basePath))
+                    if (!path.StartsWith(basePath, StringComparison.InvariantCulture))
                     {
                         return BadRequest("Invalid image path.");
                     }
@@ -196,7 +196,7 @@ namespace Jellyfin.Api.Controllers
 
                 if (!string.IsNullOrEmpty(path) && System.IO.File.Exists(path))
                 {
-                    if (!path.StartsWith(basePath))
+                    if (!path.StartsWith(basePath, StringComparison.InvariantCulture))
                     {
                         return BadRequest("Invalid image path.");
                     }

+ 1 - 1
Jellyfin.Api/Controllers/SubtitleController.cs

@@ -528,7 +528,7 @@ namespace Jellyfin.Api.Controllers
 
                 if (fontFile != null && fileSize != null && fileSize > 0)
                 {
-                    _logger.LogDebug("Fallback font size is {fileSize} Bytes", fileSize);
+                    _logger.LogDebug("Fallback font size is {FileSize} Bytes", fileSize);
                     return PhysicalFile(fontFile.FullName, MimeTypes.GetMimeType(fontFile.FullName));
                 }
                 else

+ 1 - 1
Jellyfin.Api/Helpers/ClassMigrationHelper.cs

@@ -19,7 +19,7 @@ namespace Jellyfin.Api.Helpers
             // If any this null throw an exception.
             if (source == null || destination == null)
             {
-                throw new Exception("Source or/and Destination Objects are null");
+                throw new ArgumentException("Source or/and Destination Objects are null");
             }
 
             // Getting the Types of the objects.

+ 1 - 1
Jellyfin.Api/Helpers/StreamingHelpers.cs

@@ -148,7 +148,7 @@ namespace Jellyfin.Api.Helpers
 
                     mediaSource = string.IsNullOrEmpty(streamingRequest.MediaSourceId)
                         ? mediaSources[0]
-                        : mediaSources.Find(i => string.Equals(i.Id, streamingRequest.MediaSourceId, StringComparison.InvariantCulture));
+                        : mediaSources.Find(i => string.Equals(i.Id, streamingRequest.MediaSourceId, StringComparison.Ordinal));
 
                     if (mediaSource == null && Guid.Parse(streamingRequest.MediaSourceId) == streamingRequest.Id)
                     {

+ 2 - 0
Jellyfin.Api/Helpers/TranscodingJobHelper.cs

@@ -283,6 +283,7 @@ namespace Jellyfin.Api.Helpers
 
             lock (job.ProcessLock!)
             {
+                #pragma warning disable CA1849 // Can't await in lock block
                 job.TranscodingThrottler?.Stop().GetAwaiter().GetResult();
 
                 var process = job.Process;
@@ -308,6 +309,7 @@ namespace Jellyfin.Api.Helpers
                     {
                     }
                 }
+                #pragma warning restore CA1849
             }
 
             if (delete(job.Path!))

+ 2 - 2
Jellyfin.Api/Jellyfin.Api.csproj

@@ -13,8 +13,8 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
     <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
     <PackageReference Include="Swashbuckle.AspNetCore.ReDoc" Version="6.2.3" />
   </ItemGroup>

+ 2 - 2
Jellyfin.Data/Jellyfin.Data.csproj

@@ -24,7 +24,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
+    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.0" PrivateAssets="All" />
   </ItemGroup>
 
   <!-- Code analysers-->
@@ -35,7 +35,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
Jellyfin.Server.Implementations/Events/EventManager.cs

@@ -57,7 +57,7 @@ namespace Jellyfin.Server.Implementations.Events
                 }
                 catch (Exception e)
                 {
-                    _logger.LogError(e, "Uncaught exception in EventConsumer {type}: ", service.GetType());
+                    _logger.LogError(e, "Uncaught exception in EventConsumer {Type}: ", service.GetType());
                 }
             }
         }

+ 4 - 4
Jellyfin.Server.Implementations/Jellyfin.Server.Implementations.csproj

@@ -19,13 +19,13 @@
 
   <ItemGroup>
     <PackageReference Include="System.Linq.Async" Version="5.0.0" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0-rc.2*">
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0-rc.2*">
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>

+ 4 - 4
Jellyfin.Server/Jellyfin.Server.csproj

@@ -31,10 +31,10 @@
 
   <ItemGroup>
     <PackageReference Include="CommandLineParser" Version="2.8.0" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="6.0.0" />
     <PackageReference Include="prometheus-net" Version="5.0.1" />
     <PackageReference Include="prometheus-net.AspNetCore" Version="5.0.1" />
     <PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />

+ 1 - 1
Jellyfin.Server/Middleware/ResponseTimeMiddleware.cs

@@ -68,7 +68,7 @@ namespace Jellyfin.Server.Middleware
             if (_enableWarning && watch.ElapsedMilliseconds > _warningThreshold)
             {
                 _logger.LogWarning(
-                    "Slow HTTP Response from {url} to {remoteIp} in {elapsed:g} with Status Code {statusCode}",
+                    "Slow HTTP Response from {Url} to {RemoteIp} in {Elapsed:g} with Status Code {StatusCode}",
                     context.Request.GetDisplayUrl(),
                     context.GetNormalizedRemoteIp(),
                     watch.Elapsed,

+ 1 - 1
Jellyfin.Server/Middleware/UrlDecodeQueryFeature.cs

@@ -51,7 +51,7 @@ namespace Jellyfin.Server.Middleware
                     return;
                 }
 
-                if (!key.Contains('='))
+                if (!key.Contains('=', StringComparison.Ordinal))
                 {
                     _store = value;
                     return;

+ 1 - 1
Jellyfin.Server/Program.cs

@@ -675,7 +675,7 @@ namespace Jellyfin.Server
 
         private static string NormalizeCommandLineArgument(string arg)
         {
-            if (!arg.Contains(" ", StringComparison.OrdinalIgnoreCase))
+            if (!arg.Contains(' ', StringComparison.Ordinal))
             {
                 return arg;
             }

+ 3 - 3
MediaBrowser.Common/MediaBrowser.Common.csproj

@@ -19,9 +19,9 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.0" PrivateAssets="All" />
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -1452,7 +1452,7 @@ namespace MediaBrowser.Controller.Entities
                 }
                 catch (Exception ex)
                 {
-                    Logger.LogError(ex, "Error refreshing owned items for {path}", Path ?? Name);
+                    Logger.LogError(ex, "Error refreshing owned items for {Path}", Path ?? Name);
                 }
             }
 

+ 3 - 1
MediaBrowser.Controller/Entities/Folder.cs

@@ -303,7 +303,7 @@ namespace MediaBrowser.Controller.Entities
                 if (dictionary.ContainsKey(id))
                 {
                     Logger.LogError(
-                        "Found folder containing items with duplicate id. Path: {path}, Child Name: {ChildName}",
+                        "Found folder containing items with duplicate id. Path: {Path}, Child Name: {ChildName}",
                         Path ?? Name,
                         child.Path ?? child.Name);
                 }
@@ -1013,6 +1013,7 @@ namespace MediaBrowser.Controller.Entities
                 items = CollapseBoxSetItemsIfNeeded(items, query, this, user, ConfigurationManager, CollectionManager);
             }
 
+            #pragma warning disable CA1309
             if (!string.IsNullOrEmpty(query.NameStartsWithOrGreater))
             {
                 items = items.Where(i => string.Compare(query.NameStartsWithOrGreater, i.SortName, StringComparison.InvariantCultureIgnoreCase) < 1);
@@ -1027,6 +1028,7 @@ namespace MediaBrowser.Controller.Entities
             {
                 items = items.Where(i => string.Compare(query.NameLessThan, i.SortName, StringComparison.InvariantCultureIgnoreCase) == 1);
             }
+            #pragma warning restore CA1309
 
             // This must be the last filter
             if (!string.IsNullOrEmpty(query.AdjacentTo))

+ 2 - 2
MediaBrowser.Controller/IO/FileData.cs

@@ -69,7 +69,7 @@ namespace MediaBrowser.Controller.IO
                         if (string.IsNullOrEmpty(newPath))
                         {
                             // invalid shortcut - could be old or target could just be unavailable
-                            logger.LogWarning("Encountered invalid shortcut: " + fullName);
+                            logger.LogWarning("Encountered invalid shortcut: {Path}", fullName);
                             continue;
                         }
 
@@ -83,7 +83,7 @@ namespace MediaBrowser.Controller.IO
                     }
                     catch (Exception ex)
                     {
-                        logger.LogError(ex, "Error resolving shortcut from {path}", fullName);
+                        logger.LogError(ex, "Error resolving shortcut from {Path}", fullName);
                     }
                 }
                 else if (flattenFolderDepth > 0 && isDirectory)

+ 4 - 4
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -15,10 +15,10 @@
 
   <ItemGroup>
     <PackageReference Include="Diacritics" Version="3.3.4" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
-    <PackageReference Include="System.Threading.Tasks.Dataflow" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
+    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.0" PrivateAssets="All" />
+    <PackageReference Include="System.Threading.Tasks.Dataflow" Version="6.0.0" />
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs

@@ -412,7 +412,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
                 {
                     var actors = reader.ReadInnerXml();
 
-                    if (actors.Contains("<", StringComparison.Ordinal))
+                    if (actors.Contains('<', StringComparison.Ordinal))
                     {
                         // This is one of the mis-named "Actors" full nodes created by MB2
                         // Create a reader and pass it to the persons node processor

+ 1 - 1
MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs

@@ -144,7 +144,7 @@ namespace MediaBrowser.LocalMetadata.Savers
             }
             catch (Exception ex)
             {
-                Logger.LogError(ex, "Error setting hidden attribute on {path}", path);
+                Logger.LogError(ex, "Error setting hidden attribute on {Path}", path);
             }
         }
 

+ 2 - 2
MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj

@@ -24,8 +24,8 @@
   <ItemGroup>
     <PackageReference Include="BDInfo" Version="0.7.6.1" />
     <PackageReference Include="libse" Version="3.6.2" />
-    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0-rc.2*" />
-    <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
+    <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
     <PackageReference Include="UTF.Unknown" Version="2.5.0" />
   </ItemGroup>
 

+ 0 - 14
MediaBrowser.Model/Dlna/DlnaMaps.cs

@@ -6,20 +6,6 @@ namespace MediaBrowser.Model.Dlna
 {
     public static class DlnaMaps
     {
-        private static readonly string DefaultStreaming =
-            FlagsToString(DlnaFlags.StreamingTransferMode |
-                           DlnaFlags.BackgroundTransferMode |
-                           DlnaFlags.ConnectionStall |
-                           DlnaFlags.ByteBasedSeek |
-                           DlnaFlags.DlnaV15);
-
-        private static readonly string DefaultInteractive =
-            FlagsToString(DlnaFlags.InteractiveTransferMode |
-                        DlnaFlags.BackgroundTransferMode |
-                        DlnaFlags.ConnectionStall |
-                        DlnaFlags.ByteBasedSeek |
-                        DlnaFlags.DlnaV15);
-
         public static string FlagsToString(DlnaFlags flags)
         {
             return string.Format(CultureInfo.InvariantCulture, "{0:X8}{1:D24}", (ulong)flags, 0);

+ 1 - 1
MediaBrowser.Model/Dlna/StreamInfo.cs

@@ -794,7 +794,7 @@ namespace MediaBrowser.Model.Dlna
                 }
 
                 // strip spaces to avoid having to encode h264 profile names
-                list.Add(new NameValuePair(pair.Key, pair.Value.Replace(" ", string.Empty)));
+                list.Add(new NameValuePair(pair.Key, pair.Value.Replace(" ", string.Empty, StringComparison.Ordinal)));
             }
 
             if (!item.IsDirectStream)

+ 3 - 3
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -29,10 +29,10 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.0" PrivateAssets="All" />
+    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0" />
     <PackageReference Include="System.Globalization" Version="4.3.0" />
-    <PackageReference Include="System.Text.Json" Version="6.0.0-rc.2*" />
+    <PackageReference Include="System.Text.Json" Version="6.0.0" />
   </ItemGroup>
 
   <ItemGroup>

+ 2 - 2
MediaBrowser.Providers/Manager/ItemImageProvider.cs

@@ -215,7 +215,7 @@ namespace MediaBrowser.Providers.Manager
             catch (Exception ex)
             {
                 result.ErrorMessage = ex.Message;
-                _logger.LogError(ex, "Error in {provider}", provider.Name);
+                _logger.LogError(ex, "Error in {Provider}", provider.Name);
             }
         }
 
@@ -331,7 +331,7 @@ namespace MediaBrowser.Providers.Manager
             catch (Exception ex)
             {
                 result.ErrorMessage = ex.Message;
-                _logger.LogError(ex, "Error in {provider}", provider.Name);
+                _logger.LogError(ex, "Error in {Provider}", provider.Name);
             }
         }
 

+ 3 - 3
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -713,7 +713,7 @@ namespace MediaBrowser.Providers.Manager
                 }
                 catch (Exception ex)
                 {
-                    Logger.LogError(ex, "Error in {provider}", provider.Name);
+                    Logger.LogError(ex, "Error in {Provider}", provider.Name);
 
                     // If a local provider fails, consider that a failure
                     refreshResult.ErrorMessage = ex.Message;
@@ -785,7 +785,7 @@ namespace MediaBrowser.Providers.Manager
             catch (Exception ex)
             {
                 refreshResult.ErrorMessage = ex.Message;
-                Logger.LogError(ex, "Error in {provider}", provider.Name);
+                Logger.LogError(ex, "Error in {Provider}", provider.Name);
             }
         }
 
@@ -837,7 +837,7 @@ namespace MediaBrowser.Providers.Manager
                 {
                     refreshResult.Failures++;
                     refreshResult.ErrorMessage = ex.Message;
-                    Logger.LogError(ex, "Error in {provider}", provider.Name);
+                    Logger.LogError(ex, "Error in {Provider}", provider.Name);
                 }
             }
 

+ 3 - 3
MediaBrowser.Providers/MediaBrowser.Providers.csproj

@@ -16,9 +16,9 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     <PackageReference Include="OptimizedPriorityQueue" Version="5.0.0" />
     <PackageReference Include="PlaylistsNET" Version="1.1.3" />

+ 2 - 2
MediaBrowser.Providers/MediaInfo/EmbeddedImageProvider.cs

@@ -125,7 +125,7 @@ namespace MediaBrowser.Providers.MediaInfo
 
             if (attachmentStream != null)
             {
-                return await ExtractAttachment(item, cancellationToken, attachmentStream, mediaSource);
+                return await ExtractAttachment(item, attachmentStream, mediaSource, cancellationToken);
             }
 
             // Fall back to EmbeddedImage streams
@@ -169,7 +169,7 @@ namespace MediaBrowser.Providers.MediaInfo
             };
         }
 
-        private async Task<DynamicImageResponse> ExtractAttachment(Video item, CancellationToken cancellationToken, MediaAttachment attachmentStream, MediaSourceInfo mediaSource)
+        private async Task<DynamicImageResponse> ExtractAttachment(Video item, MediaAttachment attachmentStream, MediaSourceInfo mediaSource, CancellationToken cancellationToken)
         {
             var extension = string.IsNullOrEmpty(attachmentStream.MimeType)
                 ? Path.GetExtension(attachmentStream.FileName)

+ 1 - 1
MediaBrowser.XbmcMetadata/EntryPoint.cs

@@ -71,7 +71,7 @@ namespace MediaBrowser.XbmcMetadata
             }
             catch (Exception ex)
             {
-                _logger.LogError(ex, "Error saving metadata for {path}", item.Path ?? item.Name);
+                _logger.LogError(ex, "Error saving metadata for {Path}", item.Path ?? item.Name);
             }
         }
     }

+ 1 - 1
deployment/Dockerfile.centos.amd64

@@ -13,7 +13,7 @@ RUN yum update -yq \
   && yum install -yq @buildsys-build rpmdevtools yum-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel git wget
 
 # Install DotNET SDK
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/20283373-1d83-4879-8278-0afb7fd4035e/56f204f174743b29a656499ad0fc93c3/dotnet-sdk-6.0.100-rc.2.21505.57-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/17b6759f-1af0-41bc-ab12-209ba0377779/e8d02195dbf1434b940e0f05ae086453/dotnet-sdk-6.0.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 1 - 1
deployment/Dockerfile.fedora.amd64

@@ -12,7 +12,7 @@ RUN dnf update -yq \
   && dnf install -yq @buildsys-build rpmdevtools git dnf-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel systemd wget
 
 # Install DotNET SDK
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/20283373-1d83-4879-8278-0afb7fd4035e/56f204f174743b29a656499ad0fc93c3/dotnet-sdk-6.0.100-rc.2.21505.57-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/17b6759f-1af0-41bc-ab12-209ba0377779/e8d02195dbf1434b940e0f05ae086453/dotnet-sdk-6.0.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 1 - 1
deployment/Dockerfile.ubuntu.amd64

@@ -17,7 +17,7 @@ RUN apt-get update -yqq \
     libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0
 
 # Install dotnet repository
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/20283373-1d83-4879-8278-0afb7fd4035e/56f204f174743b29a656499ad0fc93c3/dotnet-sdk-6.0.100-rc.2.21505.57-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/17b6759f-1af0-41bc-ab12-209ba0377779/e8d02195dbf1434b940e0f05ae086453/dotnet-sdk-6.0.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 1 - 1
deployment/Dockerfile.ubuntu.arm64

@@ -16,7 +16,7 @@ RUN apt-get update -yqq \
     mmv build-essential lsb-release
 
 # Install dotnet repository
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/20283373-1d83-4879-8278-0afb7fd4035e/56f204f174743b29a656499ad0fc93c3/dotnet-sdk-6.0.100-rc.2.21505.57-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/17b6759f-1af0-41bc-ab12-209ba0377779/e8d02195dbf1434b940e0f05ae086453/dotnet-sdk-6.0.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 1 - 1
deployment/Dockerfile.ubuntu.armhf

@@ -16,7 +16,7 @@ RUN apt-get update -yqq \
     mmv build-essential lsb-release
 
 # Install dotnet repository
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/20283373-1d83-4879-8278-0afb7fd4035e/56f204f174743b29a656499ad0fc93c3/dotnet-sdk-6.0.100-rc.2.21505.57-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/17b6759f-1af0-41bc-ab12-209ba0377779/e8d02195dbf1434b940e0f05ae086453/dotnet-sdk-6.0.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 6 - 0
jellyfin.ruleset

@@ -42,6 +42,8 @@
     <Rule Id="CA1305" Action="Error" />
     <!-- error on CA1725: Parameter names should match base declaration -->
     <Rule Id="CA1725" Action="Error" />
+    <!-- error on CA1725: Call async methods when in an async method -->
+    <Rule Id="CA1727" Action="Error" />
     <!-- error on CA2016: Forward the CancellationToken parameter to methods that take one
         or pass in 'CancellationToken.None' explicitly to indicate intentionally not propagating the token -->
     <Rule Id="CA2016" Action="Error" />
@@ -77,6 +79,8 @@
     <Rule Id="CA1822" Action="Info" />
     <!-- disable warning CA2000: Dispose objects before losing scope -->
     <Rule Id="CA2000" Action="Info" />
+    <!-- disable warning CA2253: Named placeholders should not be numeric values -->
+    <Rule Id="CA2253" Action="Info" />
     <!-- disable warning CA5394: Do not use insecure randomness -->
     <Rule Id="CA5394" Action="Info" />
 
@@ -90,6 +94,8 @@
     <Rule Id="CA1303" Action="None" />
     <!-- disable warning CA1308: Normalize strings to uppercase -->
     <Rule Id="CA1308" Action="None" />
+    <!-- disable warning CA1848: Use the LoggerMessage delegates -->
+    <Rule Id="CA1848" Action="None" />
     <!-- disable warning CA2101: Specify marshaling for P/Invoke string arguments -->
     <Rule Id="CA2101" Action="None" />
     <!-- disable warning CA2234: Pass System.Uri objects instead of strings -->

+ 2 - 2
tests/Jellyfin.Api.Tests/Jellyfin.Api.Tests.csproj

@@ -15,8 +15,8 @@
     <PackageReference Include="AutoFixture" Version="4.17.0" />
     <PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
     <PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
-    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />

+ 1 - 1
tests/Jellyfin.Server.Integration.Tests/Controllers/DashboardControllerTests.cs

@@ -40,7 +40,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
             Assert.Equal(HttpStatusCode.OK, response.StatusCode);
             Assert.Equal(MediaTypeNames.Text.Html, response.Content.Headers.ContentType?.MediaType);
             StreamReader reader = new StreamReader(typeof(TestPlugin).Assembly.GetManifestResourceStream("Jellyfin.Server.Integration.Tests.TestPage.html")!);
-            Assert.Equal(await response.Content.ReadAsStringAsync(), reader.ReadToEnd());
+            Assert.Equal(await response.Content.ReadAsStringAsync().ConfigureAwait(false), await reader.ReadToEndAsync().ConfigureAwait(false));
         }
 
         [Fact]

+ 2 - 2
tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj

@@ -9,8 +9,8 @@
     <PackageReference Include="AutoFixture" Version="4.17.0" />
     <PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
     <PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
-    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />

+ 2 - 2
tests/Jellyfin.Server.Tests/Jellyfin.Server.Tests.csproj

@@ -10,8 +10,8 @@
     <PackageReference Include="AutoFixture" Version="4.17.0" />
     <PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
     <PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
-    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.0-rc.2*" />
-    <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0-rc.2*" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />