소스 검색

Merge pull request #2136 from Bond-009/warn12

More warnings (removed)
Vasily 5 년 전
부모
커밋
aca4d678a2
99개의 변경된 파일390개의 추가작업 그리고 289개의 파일을 삭제
  1. 1 1
      Emby.Naming/Emby.Naming.csproj
  2. 4 3
      Emby.Photos/Emby.Photos.csproj
  3. 1 0
      Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs
  4. 1 0
      Emby.Server.Implementations/Activity/ActivityManager.cs
  5. 1 0
      Emby.Server.Implementations/Activity/ActivityRepository.cs
  6. 5 8
      Emby.Server.Implementations/ApplicationHost.cs
  7. 1 0
      Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs
  8. 1 0
      Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs
  9. 1 0
      Emby.Server.Implementations/Channels/ChannelImageProvider.cs
  10. 1 0
      Emby.Server.Implementations/Channels/ChannelManager.cs
  11. 1 0
      Emby.Server.Implementations/Channels/ChannelPostScanTask.cs
  12. 1 0
      Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs
  13. 1 0
      Emby.Server.Implementations/Collections/CollectionImageProvider.cs
  14. 1 0
      Emby.Server.Implementations/Collections/CollectionManager.cs
  15. 1 1
      Emby.Server.Implementations/Cryptography/CryptographyProvider.cs
  16. 1 0
      Emby.Server.Implementations/Data/BaseSqliteRepository.cs
  17. 1 0
      Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs
  18. 1 0
      Emby.Server.Implementations/Data/ManagedConnection.cs
  19. 1 0
      Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs
  20. 1 0
      Emby.Server.Implementations/Data/SqliteExtensions.cs
  21. 1 0
      Emby.Server.Implementations/Data/SqliteUserDataRepository.cs
  22. 1 0
      Emby.Server.Implementations/Data/SqliteUserRepository.cs
  23. 1 0
      Emby.Server.Implementations/Devices/DeviceId.cs
  24. 1 0
      Emby.Server.Implementations/Devices/DeviceManager.cs
  25. 1 0
      Emby.Server.Implementations/Diagnostics/CommonProcess.cs
  26. 1 0
      Emby.Server.Implementations/Diagnostics/ProcessFactory.cs
  27. 1 0
      Emby.Server.Implementations/Dto/DtoService.cs
  28. 7 7
      Emby.Server.Implementations/Emby.Server.Implementations.csproj
  29. 1 0
      Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs
  30. 1 0
      Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
  31. 1 0
      Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
  32. 1 0
      Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs
  33. 1 0
      Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
  34. 1 0
      Emby.Server.Implementations/HttpServer/FileWriter.cs
  35. 1 1
      Emby.Server.Implementations/HttpServer/HttpListenerHost.cs
  36. 1 0
      Emby.Server.Implementations/HttpServer/HttpResultFactory.cs
  37. 1 0
      Emby.Server.Implementations/HttpServer/IHttpListener.cs
  38. 1 0
      Emby.Server.Implementations/HttpServer/RangeRequestWriter.cs
  39. 1 0
      Emby.Server.Implementations/HttpServer/Security/AuthService.cs
  40. 1 0
      Emby.Server.Implementations/HttpServer/Security/AuthorizationContext.cs
  41. 1 0
      Emby.Server.Implementations/HttpServer/Security/SessionContext.cs
  42. 1 0
      Emby.Server.Implementations/IO/ExtendedFileSystemInfo.cs
  43. 1 0
      Emby.Server.Implementations/IO/FileRefresher.cs
  44. 1 0
      Emby.Server.Implementations/IO/LibraryMonitor.cs
  45. 1 0
      Emby.Server.Implementations/IO/ManagedFileSystem.cs
  46. 1 0
      Emby.Server.Implementations/IO/MbLinkShortcutHandler.cs
  47. 1 0
      Emby.Server.Implementations/IO/StreamHelper.cs
  48. 1 0
      Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs
  49. 7 6
      Emby.Server.Implementations/Library/DefaultAuthenticationProvider.cs
  50. 1 0
      Emby.Server.Implementations/Library/ExclusiveLiveStream.cs
  51. 1 0
      Emby.Server.Implementations/Library/LibraryManager.cs
  52. 1 0
      Emby.Server.Implementations/Library/LiveStreamHelper.cs
  53. 1 0
      Emby.Server.Implementations/Library/MediaSourceManager.cs
  54. 1 0
      Emby.Server.Implementations/Library/MediaStreamSelector.cs
  55. 1 0
      Emby.Server.Implementations/Library/MusicManager.cs
  56. 1 0
      Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs
  57. 1 0
      Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs
  58. 1 0
      Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs
  59. 1 0
      Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs
  60. 1 0
      Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs
  61. 1 0
      Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs
  62. 1 0
      Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
  63. 1 0
      Emby.Server.Implementations/Library/Resolvers/VideoResolver.cs
  64. 1 0
      Emby.Server.Implementations/Library/SearchEngine.cs
  65. 1 0
      Emby.Server.Implementations/Library/UserDataManager.cs
  66. 2 1
      Emby.Server.Implementations/Library/UserManager.cs
  67. 1 0
      Emby.Server.Implementations/Library/UserViewManager.cs
  68. 1 1
      Jellyfin.Api/Jellyfin.Api.csproj
  69. 6 6
      Jellyfin.Server/Jellyfin.Server.csproj
  70. 1 0
      MediaBrowser.Common/Configuration/ConfigurationUpdateEventArgs.cs
  71. 1 0
      MediaBrowser.Common/Configuration/IConfigurationFactory.cs
  72. 1 0
      MediaBrowser.Common/Configuration/IConfigurationManager.cs
  73. 13 12
      MediaBrowser.Common/Cryptography/PasswordHash.cs
  74. 3 5
      MediaBrowser.Common/Events/EventHelper.cs
  75. 5 2
      MediaBrowser.Common/Extensions/BaseExtensions.cs
  76. 2 2
      MediaBrowser.Common/Extensions/CopyToExtensions.cs
  77. 26 0
      MediaBrowser.Common/Extensions/MethodNotAllowedException.cs
  78. 26 0
      MediaBrowser.Common/Extensions/RateLimitExceededException.cs
  79. 1 64
      MediaBrowser.Common/Extensions/ResourceNotFoundException.cs
  80. 6 6
      MediaBrowser.Common/Hex.cs
  81. 29 26
      MediaBrowser.Common/IApplicationHost.cs
  82. 12 5
      MediaBrowser.Common/MediaBrowser.Common.csproj
  83. 1 0
      MediaBrowser.Common/Net/CustomHeaderNames.cs
  84. 16 12
      MediaBrowser.Common/Net/HttpRequestOptions.cs
  85. 17 15
      MediaBrowser.Common/Net/HttpResponseInfo.cs
  86. 2 2
      MediaBrowser.Common/Net/IHttpClient.cs
  87. 6 5
      MediaBrowser.Common/Net/INetworkManager.cs
  88. 75 75
      MediaBrowser.Common/Plugins/BasePlugin.cs
  89. 15 14
      MediaBrowser.Common/Plugins/IPlugin.cs
  90. 14 0
      MediaBrowser.Common/Plugins/IPluginAssembly.cs
  91. 1 0
      MediaBrowser.Common/Progress/ActionableProgress.cs
  92. 1 0
      MediaBrowser.Common/Providers/SubtitleConfigurationFactory.cs
  93. 1 0
      MediaBrowser.Common/System/OperatingSystem.cs
  94. 5 5
      MediaBrowser.Common/Updates/IInstallationManager.cs
  95. 1 0
      MediaBrowser.Common/Updates/InstallationEventArgs.cs
  96. 1 0
      MediaBrowser.Common/Updates/InstallationFailedEventArgs.cs
  97. 6 1
      MediaBrowser.Controller/Authentication/AuthenticationResult.cs
  98. 0 1
      MediaBrowser.Controller/Entities/BaseItem.cs
  99. 8 2
      jellyfin.ruleset

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

@@ -27,7 +27,7 @@
 
   <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
-    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.7" PrivateAssets="All" />
+    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" />
     <PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
     <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
     <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />

+ 4 - 3
Emby.Photos/Emby.Photos.csproj

@@ -26,9 +26,10 @@
 
   <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
-    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.7" />
-    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" />
-    <PackageReference Include="SerilogAnalyzer" Version="0.15.0" />
+    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" />
+    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
+    <PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
+    <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
   </ItemGroup>
 
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">

+ 1 - 0
Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Activity/ActivityManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Linq;

+ 1 - 0
Emby.Server.Implementations/Activity/ActivityRepository.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 5 - 8
Emby.Server.Implementations/ApplicationHost.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Concurrent;
@@ -177,11 +178,7 @@ namespace Emby.Server.Implementations
         /// Gets the plugins.
         /// </summary>
         /// <value>The plugins.</value>
-        public IPlugin[] Plugins
-        {
-            get => _plugins;
-            protected set => _plugins = value;
-        }
+        public IReadOnlyList<IPlugin> Plugins => _plugins;
 
         /// <summary>
         /// Gets or sets the logger factory.
@@ -1056,7 +1053,7 @@ namespace Emby.Server.Implementations
             }
 
             ConfigurationManager.AddParts(GetExports<IConfigurationFactory>());
-            Plugins = GetExports<IPlugin>()
+            _plugins = GetExports<IPlugin>()
                         .Select(LoadPlugin)
                         .Where(i => i != null)
                         .ToArray();
@@ -1705,9 +1702,9 @@ namespace Emby.Server.Implementations
         /// <param name="plugin">The plugin.</param>
         public void RemovePlugin(IPlugin plugin)
         {
-            var list = Plugins.ToList();
+            var list = _plugins.ToList();
             list.Remove(plugin);
-            Plugins = list.ToArray();
+            _plugins = list.ToArray();
         }
 
         /// <summary>

+ 1 - 0
Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System.Collections.Generic;
 using MediaBrowser.Common.Configuration;

+ 1 - 0
Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Channels/ChannelImageProvider.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System.Collections.Generic;
 using System.Linq;

+ 1 - 0
Emby.Server.Implementations/Channels/ChannelManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Concurrent;

+ 1 - 0
Emby.Server.Implementations/Channels/ChannelPostScanTask.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Linq;

+ 1 - 0
Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Collections/CollectionImageProvider.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Collections/CollectionManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 1
Emby.Server.Implementations/Cryptography/CryptographyProvider.cs

@@ -121,7 +121,7 @@ namespace Emby.Server.Implementations.Cryptography
         /// <summary>
         /// Releases unmanaged and - optionally - managed resources.
         /// </summary>
-        /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
+        /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
         protected virtual void Dispose(bool disposing)
         {
             if (_disposed)

+ 1 - 0
Emby.Server.Implementations/Data/BaseSqliteRepository.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Threading;

+ 1 - 0
Emby.Server.Implementations/Data/ManagedConnection.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Data/SqliteExtensions.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Data/SqliteUserDataRepository.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Data/SqliteUserRepository.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Devices/DeviceId.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Globalization;

+ 1 - 0
Emby.Server.Implementations/Devices/DeviceManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Diagnostics/CommonProcess.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Diagnostics;

+ 1 - 0
Emby.Server.Implementations/Diagnostics/ProcessFactory.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using MediaBrowser.Model.Diagnostics;
 

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

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

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

@@ -29,9 +29,9 @@
     <PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.2.0" />
     <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
     <PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="2.2.1" />
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.1" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.0.1" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.1" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.0" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.0" />
     <PackageReference Include="Mono.Nat" Version="2.0.0" />
     <PackageReference Include="ServiceStack.Text.Core" Version="5.7.0" />
     <PackageReference Include="sharpcompress" Version="0.24.0" />
@@ -51,10 +51,10 @@
 
   <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
-    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.7" />
-    <PackageReference Include="SerilogAnalyzer" Version="0.15.0" />
-    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" />
-    <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" />
+    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" />
+    <PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
+    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
+    <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
   </ItemGroup>
 
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">

+ 1 - 0
Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Linq;

+ 1 - 0
Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Linq;

+ 1 - 0
Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/HttpServer/FileWriter.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 1
Emby.Server.Implementations/HttpServer/HttpListenerHost.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;
@@ -218,7 +219,6 @@ namespace Emby.Server.Implementations.HttpServer
                 case FileNotFoundException _:
                 case ResourceNotFoundException _: return 404;
                 case MethodNotAllowedException _: return 405;
-                case RemoteServiceUnavailableException _: return 502;
                 default: return 500;
             }
         }

+ 1 - 0
Emby.Server.Implementations/HttpServer/HttpResultFactory.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/HttpServer/IHttpListener.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Threading;

+ 1 - 0
Emby.Server.Implementations/HttpServer/RangeRequestWriter.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/HttpServer/Security/AuthService.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Linq;

+ 1 - 0
Emby.Server.Implementations/HttpServer/Security/AuthorizationContext.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/HttpServer/Security/SessionContext.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using MediaBrowser.Controller.Entities;

+ 1 - 0
Emby.Server.Implementations/IO/ExtendedFileSystemInfo.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 namespace Emby.Server.Implementations.IO
 {

+ 1 - 0
Emby.Server.Implementations/IO/FileRefresher.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

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

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Concurrent;

+ 1 - 0
Emby.Server.Implementations/IO/ManagedFileSystem.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/IO/MbLinkShortcutHandler.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.IO;

+ 1 - 0
Emby.Server.Implementations/IO/StreamHelper.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Buffers;

+ 1 - 0
Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 7 - 6
Emby.Server.Implementations/Library/DefaultAuthenticationProvider.cs

@@ -70,9 +70,9 @@ namespace Emby.Server.Implementations.Library
                 byte[] calculatedHash = _cryptographyProvider.ComputeHash(
                     readyHash.Id,
                     passwordbytes,
-                    readyHash.Salt);
+                    readyHash.Salt.ToArray());
 
-                if (calculatedHash.SequenceEqual(readyHash.Hash))
+                if (readyHash.Hash.SequenceEqual(calculatedHash))
                 {
                     success = true;
                 }
@@ -148,17 +148,18 @@ namespace Emby.Server.Implementations.Library
 
             // TODO: make use of iterations parameter?
             PasswordHash passwordHash = PasswordHash.Parse(user.Password);
+            var salt = passwordHash.Salt.ToArray();
             return new PasswordHash(
                 passwordHash.Id,
                 _cryptographyProvider.ComputeHash(
                     passwordHash.Id,
                     Encoding.UTF8.GetBytes(str),
-                    passwordHash.Salt),
-                passwordHash.Salt,
+                    salt),
+                salt,
                 passwordHash.Parameters.ToDictionary(x => x.Key, y => y.Value)).ToString();
         }
 
-        public byte[] GetHashed(User user, string str)
+        public ReadOnlySpan<byte> GetHashed(User user, string str)
         {
             if (string.IsNullOrEmpty(user.Password))
             {
@@ -170,7 +171,7 @@ namespace Emby.Server.Implementations.Library
             return _cryptographyProvider.ComputeHash(
                     passwordHash.Id,
                     Encoding.UTF8.GetBytes(str),
-                    passwordHash.Salt);
+                    passwordHash.Salt.ToArray());
         }
     }
 }

+ 1 - 0
Emby.Server.Implementations/Library/ExclusiveLiveStream.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Globalization;

+ 1 - 0
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Concurrent;

+ 1 - 0
Emby.Server.Implementations/Library/LiveStreamHelper.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Library/MediaSourceManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Library/MediaStreamSelector.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Library/MusicManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.IO;

+ 1 - 0
Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.IO;

+ 1 - 0
Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.IO;

+ 1 - 0
Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.IO;

+ 1 - 0
Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Library/Resolvers/VideoResolver.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;

+ 1 - 0
Emby.Server.Implementations/Library/SearchEngine.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
Emby.Server.Implementations/Library/UserDataManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Concurrent;

+ 2 - 1
Emby.Server.Implementations/Library/UserManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Concurrent;
@@ -485,7 +486,7 @@ namespace Emby.Server.Implementations.Library
                 var hash = _cryptoProvider.ComputeHash(
                     passwordHash.Id,
                     Encoding.UTF8.GetBytes(password),
-                    passwordHash.Salt);
+                    passwordHash.Salt.ToArray());
                 success = passwordHash.Hash.SequenceEqual(hash);
             }
 

+ 1 - 0
Emby.Server.Implementations/Library/UserViewManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 1
Jellyfin.Api/Jellyfin.Api.csproj

@@ -19,7 +19,7 @@
 
   <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
-    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.7" PrivateAssets="All" />
+    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" />
     <PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
     <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
     <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />

+ 6 - 6
Jellyfin.Server/Jellyfin.Server.csproj

@@ -27,10 +27,10 @@
 
   <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
-    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.7" />
-    <PackageReference Include="SerilogAnalyzer" Version="0.15.0" />
-    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" />
-    <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" />
+    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" />
+    <PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
+    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
+    <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
   </ItemGroup>
 
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
@@ -39,8 +39,8 @@
 
   <ItemGroup>
     <PackageReference Include="CommandLineParser" Version="2.6.0" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.1" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.0.1" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.0" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
     <PackageReference Include="Serilog.AspNetCore" Version="3.2.0" />
     <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
     <PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" />

+ 1 - 0
MediaBrowser.Common/Configuration/ConfigurationUpdateEventArgs.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 

+ 1 - 0
MediaBrowser.Common/Configuration/IConfigurationFactory.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 1 - 0
MediaBrowser.Common/Configuration/IConfigurationManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;

+ 13 - 12
MediaBrowser.Common/Cryptography/PasswordHash.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;
@@ -15,24 +16,24 @@ namespace MediaBrowser.Common.Cryptography
     public class PasswordHash
     {
         private readonly Dictionary<string, string> _parameters;
+        private readonly byte[] _salt;
+        private readonly byte[] _hash;
 
         public PasswordHash(string id, byte[] hash)
             : this(id, hash, Array.Empty<byte>())
         {
-
         }
 
         public PasswordHash(string id, byte[] hash, byte[] salt)
             : this(id, hash, salt, new Dictionary<string, string>())
         {
-
         }
 
         public PasswordHash(string id, byte[] hash, byte[] salt, Dictionary<string, string> parameters)
         {
             Id = id;
-            Hash = hash;
-            Salt = salt;
+            _hash = hash;
+            _salt = salt;
             _parameters = parameters;
         }
 
@@ -45,25 +46,24 @@ namespace MediaBrowser.Common.Cryptography
         /// <summary>
         /// Gets the additional parameters used by the hash function.
         /// </summary>
-        /// <value></value>
         public IReadOnlyDictionary<string, string> Parameters => _parameters;
 
         /// <summary>
         /// Gets the salt used for hashing the password.
         /// </summary>
         /// <value>Returns the salt used for hashing the password.</value>
-        public byte[] Salt { get; }
+        public ReadOnlySpan<byte> Salt => _salt;
 
         /// <summary>
         /// Gets the hashed password.
         /// </summary>
         /// <value>Return the hashed password.</value>
-        public byte[] Hash { get; }
+        public ReadOnlySpan<byte> Hash => _hash;
 
         public static PasswordHash Parse(string hashString)
         {
-            string[] splitted = hashString.Split('$');
             // The string should at least contain the hash function and the hash itself
+            string[] splitted = hashString.Split('$');
             if (splitted.Length < 3)
             {
                 throw new ArgumentException("String doesn't contain enough segments", nameof(hashString));
@@ -77,7 +77,7 @@ namespace MediaBrowser.Common.Cryptography
 
             // Optional parameters
             Dictionary<string, string> parameters = new Dictionary<string, string>();
-            if (splitted[index].IndexOf('=') != -1)
+            if (splitted[index].IndexOf('=', StringComparison.Ordinal) != -1)
             {
                 foreach (string paramset in splitted[index++].Split(','))
                 {
@@ -98,6 +98,7 @@ namespace MediaBrowser.Common.Cryptography
 
             byte[] hash;
             byte[] salt;
+
             // Check if the string also contains a salt
             if (splitted.Length - index == 2)
             {
@@ -141,14 +142,14 @@ namespace MediaBrowser.Common.Cryptography
                 .Append(Id);
             SerializeParameters(str);
 
-            if (Salt.Length != 0)
+            if (_salt.Length != 0)
             {
                 str.Append('$')
-                    .Append(Hex.Encode(Salt, false));
+                    .Append(Hex.Encode(_salt, false));
             }
 
             return str.Append('$')
-                .Append(Hex.Encode(Hash, false)).ToString();
+                .Append(Hex.Encode(_hash, false)).ToString();
         }
     }
 }

+ 3 - 5
MediaBrowser.Common/Events/EventHelper.cs

@@ -1,15 +1,13 @@
-#pragma warning disable CS1591
-
 using System;
 using System.Threading.Tasks;
 using Microsoft.Extensions.Logging;
 
 namespace MediaBrowser.Common.Events
 {
-    // TODO: @bond Remove
     /// <summary>
-    /// Class EventHelper
+    /// Class EventHelper.
     /// </summary>
+    // TODO: @bond Remove
     public static class EventHelper
     {
         /// <summary>
@@ -40,7 +38,7 @@ namespace MediaBrowser.Common.Events
         /// <summary>
         /// Queues the event.
         /// </summary>
-        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="T">Argument type for the <c>handler</c>.</typeparam>
         /// <param name="handler">The handler.</param>
         /// <param name="sender">The sender.</param>
         /// <param name="args">The args.</param>

+ 5 - 2
MediaBrowser.Common/Extensions/BaseExtensions.cs

@@ -1,12 +1,12 @@
 using System;
+using System.Security.Cryptography;
 using System.Text;
 using System.Text.RegularExpressions;
-using System.Security.Cryptography;
 
 namespace MediaBrowser.Common.Extensions
 {
     /// <summary>
-    /// Class BaseExtensions
+    /// Class BaseExtensions.
     /// </summary>
     public static class BaseExtensions
     {
@@ -30,10 +30,13 @@ namespace MediaBrowser.Common.Extensions
         /// <returns><see cref="Guid" />.</returns>
         public static Guid GetMD5(this string str)
         {
+#pragma warning disable CA5351
             using (var provider = MD5.Create())
             {
                 return new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(str)));
             }
+
+#pragma warning restore CA5351
         }
     }
 }

+ 2 - 2
MediaBrowser.Common/Extensions/CopyToExtensions.cs

@@ -5,7 +5,7 @@ namespace MediaBrowser.Common.Extensions
     /// <summary>
     /// Provides <c>CopyTo</c> extensions methods for <see cref="IReadOnlyList{T}" />.
     /// </summary>
-    public static class CollectionExtensions
+    public static class CopyToExtensions
     {
         /// <summary>
         /// Copies all the elements of the current collection to the specified list
@@ -14,7 +14,7 @@ namespace MediaBrowser.Common.Extensions
         /// <param name="source">The current collection that is the source of the elements.</param>
         /// <param name="destination">The list that is the destination of the elements copied from the current collection.</param>
         /// <param name="index">A 32-bit integer that represents the index in <c>destination</c> at which copying begins.</param>
-        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="T">The type of the array.</typeparam>
         public static void CopyTo<T>(this IReadOnlyList<T> source, IList<T> destination, int index = 0)
         {
             for (int i = 0; i < source.Count; i++)

+ 26 - 0
MediaBrowser.Common/Extensions/MethodNotAllowedException.cs

@@ -0,0 +1,26 @@
+using System;
+
+namespace MediaBrowser.Common.Extensions
+{
+    /// <summary>
+    /// Class MethodNotAllowedException.
+    /// </summary>
+    public class MethodNotAllowedException : Exception
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MethodNotAllowedException" /> class.
+        /// </summary>
+        public MethodNotAllowedException()
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MethodNotAllowedException" /> class.
+        /// </summary>
+        /// <param name="message">The message.</param>
+        public MethodNotAllowedException(string message)
+            : base(message)
+        {
+        }
+    }
+}

+ 26 - 0
MediaBrowser.Common/Extensions/RateLimitExceededException.cs

@@ -0,0 +1,26 @@
+#pragma warning disable CS1591
+#pragma warning disable SA1600
+
+using System;
+
+namespace MediaBrowser.Common.Extensions
+{
+    public class RateLimitExceededException : Exception
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="RateLimitExceededException" /> class.
+        /// </summary>
+        public RateLimitExceededException()
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="RateLimitExceededException" /> class.
+        /// </summary>
+        /// <param name="message">The message.</param>
+        public RateLimitExceededException(string message)
+            : base(message)
+        {
+        }
+    }
+}

+ 1 - 64
MediaBrowser.Common/Extensions/ResourceNotFoundException.cs

@@ -1,11 +1,9 @@
-#pragma warning disable CS1591
-
 using System;
 
 namespace MediaBrowser.Common.Extensions
 {
     /// <summary>
-    /// Class ResourceNotFoundException
+    /// Class ResourceNotFoundException.
     /// </summary>
     public class ResourceNotFoundException : Exception
     {
@@ -14,7 +12,6 @@ namespace MediaBrowser.Common.Extensions
         /// </summary>
         public ResourceNotFoundException()
         {
-
         }
 
         /// <summary>
@@ -24,66 +21,6 @@ namespace MediaBrowser.Common.Extensions
         public ResourceNotFoundException(string message)
             : base(message)
         {
-
-        }
-    }
-
-    /// <summary>
-    /// Class MethodNotAllowedException
-    /// </summary>
-    public class MethodNotAllowedException : Exception
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="MethodNotAllowedException" /> class.
-        /// </summary>
-        public MethodNotAllowedException()
-        {
-
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="MethodNotAllowedException" /> class.
-        /// </summary>
-        /// <param name="message">The message.</param>
-        public MethodNotAllowedException(string message)
-            : base(message)
-        {
-
-        }
-    }
-
-    public class RemoteServiceUnavailableException : Exception
-    {
-        public RemoteServiceUnavailableException()
-        {
-
-        }
-
-        public RemoteServiceUnavailableException(string message)
-            : base(message)
-        {
-
-        }
-    }
-
-    public class RateLimitExceededException : Exception
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RateLimitExceededException" /> class.
-        /// </summary>
-        public RateLimitExceededException()
-        {
-
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RateLimitExceededException" /> class.
-        /// </summary>
-        /// <param name="message">The message.</param>
-        public RateLimitExceededException(string message)
-            : base(message)
-        {
-
         }
     }
 }

+ 6 - 6
MediaBrowser.Common/Hex.cs

@@ -14,11 +14,11 @@ namespace MediaBrowser.Common
         internal const int LastHexSymbol = 0x66; // 102: f
 
         /// <summary>
-        /// Map from an ASCII char to its hex value shifted,
+        /// Gets a map from an ASCII char to its hex value shifted,
         /// e.g. <c>b</c> -> 11. 0xFF means it's not a hex symbol.
         /// </summary>
-        /// <value></value>
-        internal static ReadOnlySpan<byte> HexLookup => new byte[] {
+        internal static ReadOnlySpan<byte> HexLookup => new byte[]
+        {
             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
@@ -29,10 +29,10 @@ namespace MediaBrowser.Common
         };
 
         /// <summary>
-        /// Encodes <c>bytes</c> as a hex string.
+        /// Encodes each element of the specified bytes as its hexadecimal string representation.
         /// </summary>
-        /// <param name="bytes"></param>
-        /// <param name="lowercase"></param>
+        /// <param name="bytes">An array of bytes.</param>
+        /// <param name="lowercase"><c>true</c> to use lowercase hexadecimal characters; otherwise <c>false</c>.</param>
         /// <returns><c>bytes</c> as a hex string.</returns>
         public static string Encode(ReadOnlySpan<byte> bytes, bool lowercase = true)
         {

+ 29 - 26
MediaBrowser.Common/IApplicationHost.cs

@@ -8,10 +8,15 @@ using Microsoft.Extensions.DependencyInjection;
 namespace MediaBrowser.Common
 {
     /// <summary>
-    /// An interface to be implemented by the applications hosting a kernel
+    /// An interface to be implemented by the applications hosting a kernel.
     /// </summary>
     public interface IApplicationHost
     {
+        /// <summary>
+        /// Occurs when [has pending restart changed].
+        /// </summary>
+        event EventHandler HasPendingRestartChanged;
+
         /// <summary>
         /// Gets the name.
         /// </summary>
@@ -25,13 +30,13 @@ namespace MediaBrowser.Common
         string SystemId { get; }
 
         /// <summary>
-        /// Gets or sets a value indicating whether this instance has pending kernel reload.
+        /// Gets a value indicating whether this instance has pending kernel reload.
         /// </summary>
         /// <value><c>true</c> if this instance has pending kernel reload; otherwise, <c>false</c>.</value>
         bool HasPendingRestart { get; }
 
         /// <summary>
-        /// Gets or sets a value indicating whether this instance is currently shutting down.
+        /// Gets a value indicating whether this instance is currently shutting down.
         /// </summary>
         /// <value><c>true</c> if this instance is shutting down; otherwise, <c>false</c>.</value>
         bool IsShuttingDown { get; }
@@ -43,26 +48,11 @@ namespace MediaBrowser.Common
         bool CanSelfRestart { get; }
 
         /// <summary>
-        /// Get the version class of the system.
+        /// Gets the version class of the system.
         /// </summary>
         /// <value><see cref="PackageVersionClass.Release" /> or <see cref="PackageVersionClass.Beta" />.</value>
         PackageVersionClass SystemUpdateLevel { get; }
 
-        /// <summary>
-        /// Occurs when [has pending restart changed].
-        /// </summary>
-        event EventHandler HasPendingRestartChanged;
-
-        /// <summary>
-        /// Notifies the pending restart.
-        /// </summary>
-        void NotifyPendingRestart();
-
-        /// <summary>
-        /// Restarts this instance.
-        /// </summary>
-        void Restart();
-
         /// <summary>
         /// Gets the application version.
         /// </summary>
@@ -87,6 +77,22 @@ namespace MediaBrowser.Common
         /// </summary>
         string ApplicationUserAgentAddress { get; }
 
+        /// <summary>
+        /// Gets the plugins.
+        /// </summary>
+        /// <value>The plugins.</value>
+        IReadOnlyList<IPlugin> Plugins { get; }
+
+        /// <summary>
+        /// Notifies the pending restart.
+        /// </summary>
+        void NotifyPendingRestart();
+
+        /// <summary>
+        /// Restarts this instance.
+        /// </summary>
+        void Restart();
+
         /// <summary>
         /// Gets the exports.
         /// </summary>
@@ -98,21 +104,16 @@ namespace MediaBrowser.Common
         /// <summary>
         /// Resolves this instance.
         /// </summary>
-        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="T">The <c>Type</c>.</typeparam>
         /// <returns>``0.</returns>
         T Resolve<T>();
 
         /// <summary>
         /// Shuts down.
         /// </summary>
+        /// <returns>A task.</returns>
         Task Shutdown();
 
-        /// <summary>
-        /// Gets the plugins.
-        /// </summary>
-        /// <value>The plugins.</value>
-        IPlugin[] Plugins { get; }
-
         /// <summary>
         /// Removes the plugin.
         /// </summary>
@@ -122,6 +123,8 @@ namespace MediaBrowser.Common
         /// <summary>
         /// Inits this instance.
         /// </summary>
+        /// <param name="serviceCollection">The service collection.</param>
+        /// <returns>A task.</returns>
         Task InitAsync(IServiceCollection serviceCollection);
 
         /// <summary>

+ 12 - 5
MediaBrowser.Common/MediaBrowser.Common.csproj

@@ -12,8 +12,8 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0" />
-    <PackageReference Include="Microsoft.Net.Http.Headers" Version="2.2.0" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.0" />
+    <PackageReference Include="Microsoft.Net.Http.Headers" Version="2.2.8" />
   </ItemGroup>
 
   <ItemGroup>
@@ -27,9 +27,16 @@
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
 
-  <PropertyGroup>
-    <!-- We need at least C# 7.1 for the "default literal" feature-->
-    <LangVersion>latest</LangVersion>
+  <!-- Code analyzers-->
+  <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <!-- <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" /> -->
+    <PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
+    <!-- <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" /> -->
+    <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
+  </ItemGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <CodeAnalysisRuleSet>../jellyfin.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 0
MediaBrowser.Common/Net/CustomHeaderNames.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 namespace MediaBrowser.Common.Net
 {

+ 16 - 12
MediaBrowser.Common/Net/HttpRequestOptions.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;
@@ -8,10 +9,21 @@ using Microsoft.Net.Http.Headers;
 namespace MediaBrowser.Common.Net
 {
     /// <summary>
-    /// Class HttpRequestOptions
+    /// Class HttpRequestOptions.
     /// </summary>
     public class HttpRequestOptions
     {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="HttpRequestOptions"/> class.
+        /// </summary>
+        public HttpRequestOptions()
+        {
+            RequestHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+
+            CacheMode = CacheMode.None;
+            DecompressionMethod = CompressionMethod.Deflate;
+        }
+
         /// <summary>
         /// Gets or sets the URL.
         /// </summary>
@@ -71,14 +83,17 @@ namespace MediaBrowser.Common.Net
         public string RequestContentType { get; set; }
 
         public string RequestContent { get; set; }
+
         public byte[] RequestContentBytes { get; set; }
 
         public bool BufferContent { get; set; }
 
         public bool LogErrorResponseBody { get; set; }
+
         public bool EnableKeepAlive { get; set; }
 
         public CacheMode CacheMode { get; set; }
+
         public TimeSpan CacheLength { get; set; }
 
         public bool EnableDefaultUserAgent { get; set; }
@@ -89,17 +104,6 @@ namespace MediaBrowser.Common.Net
 
             return value;
         }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpRequestOptions"/> class.
-        /// </summary>
-        public HttpRequestOptions()
-        {
-            RequestHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
-
-            CacheMode = CacheMode.None;
-            DecompressionMethod = CompressionMethod.Deflate;
-        }
     }
 
     public enum CacheMode

+ 17 - 15
MediaBrowser.Common/Net/HttpResponseInfo.cs

@@ -1,5 +1,3 @@
-#pragma warning disable CS1591
-
 using System;
 using System.IO;
 using System.Net;
@@ -8,10 +6,25 @@ using System.Net.Http.Headers;
 namespace MediaBrowser.Common.Net
 {
     /// <summary>
-    /// Class HttpResponseInfo
+    /// Class HttpResponseInfo.
     /// </summary>
     public class HttpResponseInfo : IDisposable
     {
+#pragma warning disable CS1591
+#pragma warning disable SA1600
+        public HttpResponseInfo()
+        {
+        }
+
+        public HttpResponseInfo(HttpResponseHeaders headers, HttpContentHeaders contentHeader)
+        {
+            Headers = headers;
+            ContentHeaders = contentHeader;
+        }
+
+#pragma warning restore CS1591
+#pragma warning restore SA1600
+
         /// <summary>
         /// Gets or sets the type of the content.
         /// </summary>
@@ -60,21 +73,10 @@ namespace MediaBrowser.Common.Net
         /// <value>The content headers.</value>
         public HttpContentHeaders ContentHeaders { get; set; }
 
-        public HttpResponseInfo()
-        {
-
-        }
-
-        public HttpResponseInfo(HttpResponseHeaders headers, HttpContentHeaders contentHeader)
-        {
-            Headers = headers;
-            ContentHeaders = contentHeader;
-        }
-
         /// <inheritdoc />
         public void Dispose()
         {
-            // Only IDisposable for backwards compatibility
+            // backwards compatibility
         }
     }
 }

+ 2 - 2
MediaBrowser.Common/Net/IHttpClient.cs

@@ -1,12 +1,12 @@
 using System;
 using System.IO;
-using System.Threading.Tasks;
 using System.Net.Http;
+using System.Threading.Tasks;
 
 namespace MediaBrowser.Common.Net
 {
     /// <summary>
-    /// Interface IHttpClient
+    /// Interface IHttpClient.
     /// </summary>
     public interface IHttpClient
     {

+ 6 - 5
MediaBrowser.Common/Net/INetworkManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;
@@ -11,20 +12,20 @@ namespace MediaBrowser.Common.Net
     {
         event EventHandler NetworkChanged;
 
+        Func<string[]> LocalSubnetsFn { get; set; }
+
         /// <summary>
-        /// Gets a random port number that is currently available
+        /// Gets a random port number that is currently available.
         /// </summary>
         /// <returns>System.Int32.</returns>
         int GetRandomUnusedTcpPort();
 
         int GetRandomUnusedUdpPort();
 
-        Func<string[]> LocalSubnetsFn { get; set; }
-
         /// <summary>
-        /// Returns MAC Address from first Network Card in Computer
+        /// Returns the MAC Address from first Network Card in Computer.
         /// </summary>
-        /// <returns>[string] MAC Address</returns>
+        /// <returns>The MAC Address.</returns>
         List<PhysicalAddress> GetMacAddresses();
 
         /// <summary>

+ 75 - 75
MediaBrowser.Common/Plugins/BasePlugin.cs

@@ -1,4 +1,4 @@
-#pragma warning disable CS1591
+#pragma warning disable SA1402
 
 using System;
 using System.IO;
@@ -8,10 +8,13 @@ using MediaBrowser.Model.Serialization;
 
 namespace MediaBrowser.Common.Plugins
 {
+    /// <summary>
+    /// Provides a common base class for all plugins.
+    /// </summary>
     public abstract class BasePlugin : IPlugin, IPluginAssembly
     {
         /// <summary>
-        /// Gets the name of the plugin
+        /// Gets the name of the plugin.
         /// </summary>
         /// <value>The name.</value>
         public abstract string Name { get; }
@@ -29,17 +32,23 @@ namespace MediaBrowser.Common.Plugins
         public virtual Guid Id { get; private set; }
 
         /// <summary>
-        /// Gets the plugin version
+        /// Gets the plugin version.
         /// </summary>
         /// <value>The version.</value>
         public Version Version { get; private set; }
 
         /// <summary>
-        /// Gets the path to the assembly file
+        /// Gets the path to the assembly file.
         /// </summary>
         /// <value>The assembly file path.</value>
         public string AssemblyFilePath { get; private set; }
 
+        /// <summary>
+        /// Gets the full path to the data folder, where the plugin can store any miscellaneous files needed.
+        /// </summary>
+        /// <value>The data folder path.</value>
+        public string DataFolderPath { get; private set; }
+
         /// <summary>
         /// Gets the plugin info.
         /// </summary>
@@ -62,9 +71,9 @@ namespace MediaBrowser.Common.Plugins
         /// </summary>
         public virtual void OnUninstalling()
         {
-
         }
 
+        /// <inheritdoc />
         public void SetAttributes(string assemblyFilePath, string dataFolderPath, Version assemblyVersion)
         {
             AssemblyFilePath = assemblyFilePath;
@@ -72,25 +81,48 @@ namespace MediaBrowser.Common.Plugins
             Version = assemblyVersion;
         }
 
+        /// <inheritdoc />
         public void SetId(Guid assemblyId)
         {
             Id = assemblyId;
         }
-
-        /// <summary>
-        /// Gets the full path to the data folder, where the plugin can store any miscellaneous files needed
-        /// </summary>
-        /// <value>The data folder path.</value>
-        public string DataFolderPath { get; private set; }
     }
 
     /// <summary>
-    /// Provides a common base class for all plugins
+    /// Provides a common base class for all plugins.
     /// </summary>
     /// <typeparam name="TConfigurationType">The type of the T configuration type.</typeparam>
     public abstract class BasePlugin<TConfigurationType> : BasePlugin, IHasPluginConfiguration
         where TConfigurationType : BasePluginConfiguration
     {
+        /// <summary>
+        /// The configuration sync lock.
+        /// </summary>
+        private readonly object _configurationSyncLock = new object();
+
+        /// <summary>
+        /// The save lock.
+        /// </summary>
+        private readonly object _configurationSaveLock = new object();
+
+        private Action<string> _directoryCreateFn;
+
+        /// <summary>
+        /// The configuration.
+        /// </summary>
+        private TConfigurationType _configuration;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="BasePlugin{TConfigurationType}" /> class.
+        /// </summary>
+        /// <param name="applicationPaths">The application paths.</param>
+        /// <param name="xmlSerializer">The XML serializer.</param>
+        protected BasePlugin(IApplicationPaths applicationPaths, IXmlSerializer xmlSerializer)
+        {
+            ApplicationPaths = applicationPaths;
+            XmlSerializer = xmlSerializer;
+        }
+
         /// <summary>
         /// Gets the application paths.
         /// </summary>
@@ -104,34 +136,19 @@ namespace MediaBrowser.Common.Plugins
         protected IXmlSerializer XmlSerializer { get; private set; }
 
         /// <summary>
-        /// Gets the type of configuration this plugin uses
+        /// Gets the type of configuration this plugin uses.
         /// </summary>
         /// <value>The type of the configuration.</value>
         public Type ConfigurationType => typeof(TConfigurationType);
 
-        private Action<string> _directoryCreateFn;
-        public void SetStartupInfo(Action<string> directoryCreateFn)
-        {
-            // hack alert, until the .net core transition is complete
-            _directoryCreateFn = directoryCreateFn;
-        }
-
         /// <summary>
-        /// Gets the name the assembly file
+        /// Gets the name the assembly file.
         /// </summary>
         /// <value>The name of the assembly file.</value>
         protected string AssemblyFileName => Path.GetFileName(AssemblyFilePath);
 
         /// <summary>
-        /// The _configuration sync lock
-        /// </summary>
-        private readonly object _configurationSyncLock = new object();
-        /// <summary>
-        /// The _configuration
-        /// </summary>
-        private TConfigurationType _configuration;
-        /// <summary>
-        /// Gets the plugin's configuration
+        /// Gets or sets the plugin's configuration.
         /// </summary>
         /// <value>The configuration.</value>
         public TConfigurationType Configuration
@@ -149,55 +166,54 @@ namespace MediaBrowser.Common.Plugins
                         }
                     }
                 }
+
                 return _configuration;
             }
-            protected set => _configuration = value;
-        }
 
-        private TConfigurationType LoadConfiguration()
-        {
-            var path = ConfigurationFilePath;
-
-            try
-            {
-                return (TConfigurationType)XmlSerializer.DeserializeFromFile(typeof(TConfigurationType), path);
-            }
-            catch
-            {
-                return (TConfigurationType)Activator.CreateInstance(typeof(TConfigurationType));
-            }
+            protected set => _configuration = value;
         }
 
         /// <summary>
-        /// Gets the name of the configuration file. Subclasses should override
+        /// Gets the name of the configuration file. Subclasses should override.
         /// </summary>
         /// <value>The name of the configuration file.</value>
         public virtual string ConfigurationFileName => Path.ChangeExtension(AssemblyFileName, ".xml");
 
         /// <summary>
-        /// Gets the full path to the configuration file
+        /// Gets the full path to the configuration file.
         /// </summary>
         /// <value>The configuration file path.</value>
         public string ConfigurationFilePath => Path.Combine(ApplicationPaths.PluginConfigurationsPath, ConfigurationFileName);
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="BasePlugin{TConfigurationType}" /> class.
+        /// Gets the plugin's configuration.
         /// </summary>
-        /// <param name="applicationPaths">The application paths.</param>
-        /// <param name="xmlSerializer">The XML serializer.</param>
-        protected BasePlugin(IApplicationPaths applicationPaths, IXmlSerializer xmlSerializer)
+        /// <value>The configuration.</value>
+        BasePluginConfiguration IHasPluginConfiguration.Configuration => Configuration;
+
+        /// <inheritdoc />
+        public void SetStartupInfo(Action<string> directoryCreateFn)
         {
-            ApplicationPaths = applicationPaths;
-            XmlSerializer = xmlSerializer;
+            // hack alert, until the .net core transition is complete
+            _directoryCreateFn = directoryCreateFn;
         }
 
-        /// <summary>
-        /// The _save lock
-        /// </summary>
-        private readonly object _configurationSaveLock = new object();
+        private TConfigurationType LoadConfiguration()
+        {
+            var path = ConfigurationFilePath;
+
+            try
+            {
+                return (TConfigurationType)XmlSerializer.DeserializeFromFile(typeof(TConfigurationType), path);
+            }
+            catch
+            {
+                return (TConfigurationType)Activator.CreateInstance(typeof(TConfigurationType));
+            }
+        }
 
         /// <summary>
-        /// Saves the current configuration to the file system
+        /// Saves the current configuration to the file system.
         /// </summary>
         public virtual void SaveConfiguration()
         {
@@ -209,12 +225,7 @@ namespace MediaBrowser.Common.Plugins
             }
         }
 
-        /// <summary>
-        /// Completely overwrites the current configuration with a new copy
-        /// Returns true or false indicating success or failure
-        /// </summary>
-        /// <param name="configuration">The configuration.</param>
-        /// <exception cref="ArgumentNullException">configuration</exception>
+        /// <inheritdoc />
         public virtual void UpdateConfiguration(BasePluginConfiguration configuration)
         {
             if (configuration == null)
@@ -227,12 +238,7 @@ namespace MediaBrowser.Common.Plugins
             SaveConfiguration();
         }
 
-        /// <summary>
-        /// Gets the plugin's configuration
-        /// </summary>
-        /// <value>The configuration.</value>
-        BasePluginConfiguration IHasPluginConfiguration.Configuration => Configuration;
-
+        /// <inheritdoc />
         public override PluginInfo GetPluginInfo()
         {
             var info = base.GetPluginInfo();
@@ -242,10 +248,4 @@ namespace MediaBrowser.Common.Plugins
             return info;
         }
     }
-
-    public interface IPluginAssembly
-    {
-        void SetAttributes(string assemblyFilePath, string dataFolderPath, Version assemblyVersion);
-        void SetId(Guid assemblyId);
-    }
 }

+ 15 - 14
MediaBrowser.Common/Plugins/IPlugin.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using MediaBrowser.Model.Plugins;
@@ -6,12 +7,12 @@ using MediaBrowser.Model.Plugins;
 namespace MediaBrowser.Common.Plugins
 {
     /// <summary>
-    /// Interface IPlugin
+    /// Interface IPlugin.
     /// </summary>
     public interface IPlugin
     {
         /// <summary>
-        /// Gets the name of the plugin
+        /// Gets the name of the plugin.
         /// </summary>
         /// <value>The name.</value>
         string Name { get; }
@@ -29,19 +30,19 @@ namespace MediaBrowser.Common.Plugins
         Guid Id { get; }
 
         /// <summary>
-        /// Gets the plugin version
+        /// Gets the plugin version.
         /// </summary>
         /// <value>The version.</value>
         Version Version { get; }
 
         /// <summary>
-        /// Gets the path to the assembly file
+        /// Gets the path to the assembly file.
         /// </summary>
         /// <value>The assembly file path.</value>
         string AssemblyFilePath { get; }
 
         /// <summary>
-        /// Gets the full path to the data folder, where the plugin can store any miscellaneous files needed
+        /// Gets the full path to the data folder, where the plugin can store any miscellaneous files needed.
         /// </summary>
         /// <value>The data folder path.</value>
         string DataFolderPath { get; }
@@ -61,24 +62,24 @@ namespace MediaBrowser.Common.Plugins
     public interface IHasPluginConfiguration
     {
         /// <summary>
-        /// Gets the type of configuration this plugin uses
+        /// Gets the type of configuration this plugin uses.
         /// </summary>
         /// <value>The type of the configuration.</value>
         Type ConfigurationType { get; }
 
         /// <summary>
-        /// Completely overwrites the current configuration with a new copy
-        /// Returns true or false indicating success or failure
+        /// Gets the plugin's configuration.
         /// </summary>
-        /// <param name="configuration">The configuration.</param>
-        /// <exception cref="ArgumentNullException">configuration</exception>
-        void UpdateConfiguration(BasePluginConfiguration configuration);
+        /// <value>The configuration.</value>
+        BasePluginConfiguration Configuration { get; }
 
         /// <summary>
-        /// Gets the plugin's configuration
+        /// Completely overwrites the current configuration with a new copy
+        /// Returns true or false indicating success or failure.
         /// </summary>
-        /// <value>The configuration.</value>
-        BasePluginConfiguration Configuration { get; }
+        /// <param name="configuration">The configuration.</param>
+        /// <exception cref="ArgumentNullException"><c>configuration</c> is <c>null</c>.</exception>
+        void UpdateConfiguration(BasePluginConfiguration configuration);
 
         void SetStartupInfo(Action<string> directoryCreateFn);
     }

+ 14 - 0
MediaBrowser.Common/Plugins/IPluginAssembly.cs

@@ -0,0 +1,14 @@
+#pragma warning disable CS1591
+#pragma warning disable SA1600
+
+using System;
+
+namespace MediaBrowser.Common.Plugins
+{
+    public interface IPluginAssembly
+    {
+        void SetAttributes(string assemblyFilePath, string dataFolderPath, Version assemblyVersion);
+
+        void SetId(Guid assemblyId);
+    }
+}

+ 1 - 0
MediaBrowser.Common/Progress/ActionableProgress.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 

+ 1 - 0
MediaBrowser.Common/Providers/SubtitleConfigurationFactory.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System.Collections.Generic;
 using MediaBrowser.Common.Configuration;

+ 1 - 0
MediaBrowser.Common/System/OperatingSystem.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Runtime.InteropServices;

+ 5 - 5
MediaBrowser.Common/Updates/IInstallationManager.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 using System.Collections.Generic;
@@ -103,17 +104,16 @@ namespace MediaBrowser.Common.Updates
         Task InstallPackage(PackageVersionInfo package, CancellationToken cancellationToken = default);
 
         /// <summary>
-        /// Uninstalls a plugin
+        /// Uninstalls a plugin.
         /// </summary>
         /// <param name="plugin">The plugin.</param>
-        /// <exception cref="ArgumentException"></exception>
         void UninstallPlugin(IPlugin plugin);
 
         /// <summary>
-        /// Cancels the installation
+        /// Cancels the installation.
         /// </summary>
-        /// <param name="id">The id of the package that is being installed</param>
-        /// <returns>Returns true if the install was cancelled</returns>
+        /// <param name="id">The id of the package that is being installed.</param>
+        /// <returns>Returns true if the install was cancelled.</returns>
         bool CancelInstallation(Guid id);
     }
 }

+ 1 - 0
MediaBrowser.Common/Updates/InstallationEventArgs.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using MediaBrowser.Model.Updates;
 

+ 1 - 0
MediaBrowser.Common/Updates/InstallationFailedEventArgs.cs

@@ -1,4 +1,5 @@
 #pragma warning disable CS1591
+#pragma warning disable SA1600
 
 using System;
 

+ 6 - 1
MediaBrowser.Controller/Authentication/AuthenticationResult.cs

@@ -1,14 +1,19 @@
+#pragma warning disable CS1591
+#pragma warning disable SA1600
+
 using MediaBrowser.Controller.Session;
 using MediaBrowser.Model.Dto;
 
-
 namespace MediaBrowser.Controller.Authentication
 {
     public class AuthenticationResult
     {
         public UserDto User { get; set; }
+
         public SessionInfo SessionInfo { get; set; }
+
         public string AccessToken { get; set; }
+
         public string ServerId { get; set; }
     }
 }

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

@@ -19,7 +19,6 @@ using MediaBrowser.Controller.Sorting;
 using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Extensions;
 using MediaBrowser.Model.Globalization;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Library;

+ 8 - 2
jellyfin.ruleset

@@ -35,6 +35,8 @@
     <Rule Id="CA1032" Action="Info" />
     <!-- disable warning CA1062: Validate arguments of public methods -->
     <Rule Id="CA1062" Action="Info" />
+    <!-- disable warning CA1716: Identifiers should not match keywords -->
+    <Rule Id="CA1716" Action="Info" />
     <!-- disable warning CA1720: Identifiers should not contain type names -->
     <Rule Id="CA1720" Action="Info" />
     <!-- disable warning CA1812: internal class that is apparently never instantiated.
@@ -43,14 +45,18 @@
     <Rule Id="CA1812" Action="Info" />
     <!-- disable warning CA1822: Member does not access instance data and can be marked as static -->
     <Rule Id="CA1822" Action="Info" />
+    <!-- disable warning CA2000: Dispose objects before losing scope -->
+    <Rule Id="CA2000" Action="Info" />
 
     <!-- disable warning CA1054: Change the type of parameter url from string to System.Uri -->
     <Rule Id="CA1054" Action="None" />
+    <!-- disable warning CA1055: URI return values should not be strings -->
+    <Rule Id="CA1055" Action="None" />
+    <!-- disable warning CA1056: URI properties should not be strings -->
+    <Rule Id="CA1056" Action="None" />
     <!-- disable warning CA1303: Do not pass literals as localized parameters -->
     <Rule Id="CA1303" Action="None" />
     <!-- disable warning CA1308: Normalize strings to uppercase -->
     <Rule Id="CA1308" Action="None" />
-    <!-- disable warning CA2000: Dispose objects before losing scope -->
-    <Rule Id="CA2000" Action="None" />
   </Rules>
 </RuleSet>