Browse Source

Fix the last few warnings

Enables TreatWarningsAsErrors for all projects
Bond_009 3 years ago
parent
commit
03f933aaa0
27 changed files with 353 additions and 303 deletions
  1. 12 26
      Emby.Server.Implementations/ApplicationHost.cs
  2. 1 1
      Emby.Server.Implementations/Data/BaseSqliteRepository.cs
  3. 0 5
      Emby.Server.Implementations/Emby.Server.Implementations.csproj
  4. 2 2
      Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs
  5. 67 0
      Emby.Server.Implementations/Images/BaseFolderImageProvider.cs
  6. 0 69
      Emby.Server.Implementations/Images/FolderImageProvider.cs
  7. 0 41
      Emby.Server.Implementations/Images/GenreImageProvider.cs
  8. 19 0
      Emby.Server.Implementations/Images/MusicAlbumImageProvider.cs
  9. 59 0
      Emby.Server.Implementations/Images/MusicGenreImageProvider.cs
  10. 19 0
      Emby.Server.Implementations/Images/PhotoAlbumImageProvider.cs
  11. 1 21
      Emby.Server.Implementations/Library/Resolvers/FolderResolver.cs
  12. 27 0
      Emby.Server.Implementations/Library/Resolvers/GenericFolderResolver.cs
  13. 1 1
      Emby.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs
  14. 1 1
      Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs
  15. 1 1
      Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs
  16. 1 1
      Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs
  17. 1 1
      Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs
  18. 1 1
      Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
  19. 1 1
      Emby.Server.Implementations/LiveTv/Listings/SchedulesDirectDtos/ImageDataDto.cs
  20. 50 50
      Emby.Server.Implementations/LiveTv/Listings/SchedulesDirectDtos/StationDto.cs
  21. 35 0
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunChannelCommands.cs
  22. 5 5
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs
  23. 0 66
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs
  24. 11 0
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/IHdHomerunChannelCommands.cs
  25. 38 0
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/LegacyHdHomerunChannelCommands.cs
  26. 0 5
      MediaBrowser.Controller/MediaBrowser.Controller.csproj
  27. 0 5
      MediaBrowser.Model/MediaBrowser.Model.csproj

+ 12 - 26
Emby.Server.Implementations/ApplicationHost.cs

@@ -306,7 +306,7 @@ namespace Emby.Server.Implementations
         /// <inheritdoc/>
         public string Name => ApplicationProductName;
 
-        private CertificateInfo CertificateInfo { get; set; }
+        private string CertificatePath { get; set; }
 
         public X509Certificate2 Certificate { get; private set; }
 
@@ -548,12 +548,8 @@ namespace Emby.Server.Implementations
                 HttpsPort = NetworkConfiguration.DefaultHttpsPort;
             }
 
-            CertificateInfo = new CertificateInfo
-            {
-                Path = networkConfiguration.CertificatePath,
-                Password = networkConfiguration.CertificatePassword
-            };
-            Certificate = GetCertificate(CertificateInfo);
+            CertificatePath = networkConfiguration.CertificatePath;
+            Certificate = GetCertificate(CertificatePath, networkConfiguration.CertificatePassword);
 
             RegisterServices();
 
@@ -729,30 +725,27 @@ namespace Emby.Server.Implementations
             logger.LogInformation("Application directory: {ApplicationPath}", appPaths.ProgramSystemPath);
         }
 
-        private X509Certificate2 GetCertificate(CertificateInfo info)
+        private X509Certificate2 GetCertificate(string path, string password)
         {
-            var certificateLocation = info?.Path;
-
-            if (string.IsNullOrWhiteSpace(certificateLocation))
+            if (string.IsNullOrWhiteSpace(path))
             {
                 return null;
             }
 
             try
             {
-                if (!File.Exists(certificateLocation))
+                if (!File.Exists(path))
                 {
                     return null;
                 }
 
                 // Don't use an empty string password
-                var password = string.IsNullOrWhiteSpace(info.Password) ? null : info.Password;
+                password = string.IsNullOrWhiteSpace(password) ? null : password;
 
-                var localCert = new X509Certificate2(certificateLocation, password, X509KeyStorageFlags.UserKeySet);
-                // localCert.PrivateKey = PrivateKey.CreateFromFile(pvk_file).RSA;
+                var localCert = new X509Certificate2(path, password, X509KeyStorageFlags.UserKeySet);
                 if (!localCert.HasPrivateKey)
                 {
-                    Logger.LogError("No private key included in SSL cert {CertificateLocation}.", certificateLocation);
+                    Logger.LogError("No private key included in SSL cert {CertificateLocation}.", path);
                     return null;
                 }
 
@@ -760,7 +753,7 @@ namespace Emby.Server.Implementations
             }
             catch (Exception ex)
             {
-                Logger.LogError(ex, "Error loading cert from {CertificateLocation}", certificateLocation);
+                Logger.LogError(ex, "Error loading cert from {CertificateLocation}", path);
                 return null;
             }
         }
@@ -882,7 +875,7 @@ namespace Emby.Server.Implementations
                     "http://" + i + ":" + HttpPort + "/"
                 };
 
-                if (CertificateInfo != null)
+                if (Certificate != null)
                 {
                     prefixes.Add("https://" + i + ":" + HttpsPort + "/");
                 }
@@ -946,7 +939,7 @@ namespace Emby.Server.Implementations
             var newPath = networkConfig.CertificatePath;
 
             if (!string.IsNullOrWhiteSpace(newPath)
-                && !string.Equals(CertificateInfo?.Path, newPath, StringComparison.Ordinal))
+                && !string.Equals(CertificatePath, newPath, StringComparison.Ordinal))
             {
                 if (File.Exists(newPath))
                 {
@@ -1293,11 +1286,4 @@ namespace Emby.Server.Implementations
             _disposed = true;
         }
     }
-
-    internal class CertificateInfo
-    {
-        public string Path { get; set; }
-
-        public string Password { get; set; }
-    }
 }

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

@@ -98,7 +98,7 @@ namespace Emby.Server.Implementations.Data
         /// <value>The write connection.</value>
         protected SQLiteDatabaseConnection WriteConnection { get; set; }
 
-        protected ManagedConnection GetConnection(bool _ = false)
+        protected ManagedConnection GetConnection(bool readOnly = false)
         {
             WriteLock.Wait();
             if (WriteConnection != null)

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

@@ -47,11 +47,6 @@
     <GenerateDocumentationFile>true</GenerateDocumentationFile>
     <!-- https://github.com/microsoft/ApplicationInsights-dotnet/issues/2047 -->
     <NoWarn>AD0001</NoWarn>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-  </PropertyGroup>
-
-  <PropertyGroup Condition=" '$(Configuration)' == 'Release'">
-    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
 
   <!-- Code Analyzers-->

+ 2 - 2
Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs

@@ -65,13 +65,13 @@ namespace Emby.Server.Implementations.Images
             if (SupportedImages.Contains(ImageType.Primary))
             {
                 var primaryResult = await FetchAsync(item, ImageType.Primary, options, cancellationToken).ConfigureAwait(false);
-                updateType = updateType | primaryResult;
+                updateType |= primaryResult;
             }
 
             if (SupportedImages.Contains(ImageType.Thumb))
             {
                 var thumbResult = await FetchAsync(item, ImageType.Thumb, options, cancellationToken).ConfigureAwait(false);
-                updateType = updateType | thumbResult;
+                updateType |= thumbResult;
             }
 
             return updateType;

+ 67 - 0
Emby.Server.Implementations/Images/BaseFolderImageProvider.cs

@@ -0,0 +1,67 @@
+#nullable disable
+
+#pragma warning disable CS1591
+
+using System.Collections.Generic;
+using Jellyfin.Data.Enums;
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Querying;
+
+namespace Emby.Server.Implementations.Images
+{
+    public abstract class BaseFolderImageProvider<T> : BaseDynamicImageProvider<T>
+        where T : Folder, new()
+    {
+        private readonly ILibraryManager _libraryManager;
+
+        public BaseFolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager)
+            : base(fileSystem, providerManager, applicationPaths, imageProcessor)
+        {
+            _libraryManager = libraryManager;
+        }
+
+        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
+        {
+            return _libraryManager.GetItemList(new InternalItemsQuery
+            {
+                Parent = item,
+                DtoOptions = new DtoOptions(true),
+                ImageTypes = new ImageType[] { ImageType.Primary },
+                OrderBy = new (string, SortOrder)[]
+                {
+                    (ItemSortBy.IsFolder, SortOrder.Ascending),
+                    (ItemSortBy.SortName, SortOrder.Ascending)
+                },
+                Limit = 1
+            });
+        }
+
+        protected override string CreateImage(BaseItem item, IReadOnlyCollection<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
+        {
+            return CreateSingleImage(itemsWithImages, outputPathWithoutExtension, ImageType.Primary);
+        }
+
+        protected override bool Supports(BaseItem item)
+        {
+            return item is T;
+        }
+
+        protected override bool HasChangedByDate(BaseItem item, ItemImageInfo image)
+        {
+            if (item is MusicAlbum)
+            {
+                return false;
+            }
+
+            return base.HasChangedByDate(item, image);
+        }
+    }
+}

+ 0 - 69
Emby.Server.Implementations/Images/FolderImageProvider.cs

@@ -2,69 +2,16 @@
 
 #pragma warning disable CS1591
 
-using System.Collections.Generic;
-using Jellyfin.Data.Enums;
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Controller.Drawing;
-using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.IO;
-using MediaBrowser.Model.Querying;
 
 namespace Emby.Server.Implementations.Images
 {
-    public abstract class BaseFolderImageProvider<T> : BaseDynamicImageProvider<T>
-        where T : Folder, new()
-    {
-        protected ILibraryManager _libraryManager;
-
-        public BaseFolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager)
-            : base(fileSystem, providerManager, applicationPaths, imageProcessor)
-        {
-            _libraryManager = libraryManager;
-        }
-
-        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
-        {
-            return _libraryManager.GetItemList(new InternalItemsQuery
-            {
-                Parent = item,
-                DtoOptions = new DtoOptions(true),
-                ImageTypes = new ImageType[] { ImageType.Primary },
-                OrderBy = new System.ValueTuple<string, SortOrder>[]
-                {
-                    new System.ValueTuple<string, SortOrder>(ItemSortBy.IsFolder, SortOrder.Ascending),
-                    new System.ValueTuple<string, SortOrder>(ItemSortBy.SortName, SortOrder.Ascending)
-                },
-                Limit = 1
-            });
-        }
-
-        protected override string CreateImage(BaseItem item, IReadOnlyCollection<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
-        {
-            return CreateSingleImage(itemsWithImages, outputPathWithoutExtension, ImageType.Primary);
-        }
-
-        protected override bool Supports(BaseItem item)
-        {
-            return item is T;
-        }
-
-        protected override bool HasChangedByDate(BaseItem item, ItemImageInfo image)
-        {
-            if (item is MusicAlbum)
-            {
-                return false;
-            }
-
-            return base.HasChangedByDate(item, image);
-        }
-    }
-
     public class FolderImageProvider : BaseFolderImageProvider<Folder>
     {
         public FolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager)
@@ -87,20 +34,4 @@ namespace Emby.Server.Implementations.Images
             return true;
         }
     }
-
-    public class MusicAlbumImageProvider : BaseFolderImageProvider<MusicAlbum>
-    {
-        public MusicAlbumImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager)
-            : base(fileSystem, providerManager, applicationPaths, imageProcessor, libraryManager)
-        {
-        }
-    }
-
-    public class PhotoAlbumImageProvider : BaseFolderImageProvider<PhotoAlbum>
-    {
-        public PhotoAlbumImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager)
-            : base(fileSystem, providerManager, applicationPaths, imageProcessor, libraryManager)
-        {
-        }
-    }
 }

+ 0 - 41
Emby.Server.Implementations/Images/GenreImageProvider.cs

@@ -8,7 +8,6 @@ using MediaBrowser.Common.Configuration;
 using MediaBrowser.Controller.Drawing;
 using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
@@ -19,46 +18,6 @@ using MediaBrowser.Model.Querying;
 
 namespace Emby.Server.Implementations.Images
 {
-    /// <summary>
-    /// Class MusicGenreImageProvider.
-    /// </summary>
-    public class MusicGenreImageProvider : BaseDynamicImageProvider<MusicGenre>
-    {
-        /// <summary>
-        /// The library manager.
-        /// </summary>
-        private readonly ILibraryManager _libraryManager;
-
-        public MusicGenreImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
-        {
-            _libraryManager = libraryManager;
-        }
-
-        /// <summary>
-        /// Get children objects used to create an music genre image.
-        /// </summary>
-        /// <param name="item">The music genre used to create the image.</param>
-        /// <returns>Any relevant children objects.</returns>
-        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
-        {
-            return _libraryManager.GetItemList(new InternalItemsQuery
-            {
-                Genres = new[] { item.Name },
-                IncludeItemTypes = new[]
-                {
-                    nameof(MusicAlbum),
-                    nameof(MusicVideo),
-                    nameof(Audio)
-                },
-                OrderBy = new[] { (ItemSortBy.Random, SortOrder.Ascending) },
-                Limit = 4,
-                Recursive = true,
-                ImageTypes = new[] { ImageType.Primary },
-                DtoOptions = new DtoOptions(false)
-            });
-        }
-    }
-
     /// <summary>
     /// Class GenreImageProvider.
     /// </summary>

+ 19 - 0
Emby.Server.Implementations/Images/MusicAlbumImageProvider.cs

@@ -0,0 +1,19 @@
+#pragma warning disable CS1591
+
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.IO;
+
+namespace Emby.Server.Implementations.Images
+{
+    public class MusicAlbumImageProvider : BaseFolderImageProvider<MusicAlbum>
+    {
+        public MusicAlbumImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager)
+            : base(fileSystem, providerManager, applicationPaths, imageProcessor, libraryManager)
+        {
+        }
+    }
+}

+ 59 - 0
Emby.Server.Implementations/Images/MusicGenreImageProvider.cs

@@ -0,0 +1,59 @@
+#nullable disable
+
+#pragma warning disable CS1591
+
+using System.Collections.Generic;
+using Jellyfin.Data.Enums;
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Querying;
+
+namespace Emby.Server.Implementations.Images
+{
+    /// <summary>
+    /// Class MusicGenreImageProvider.
+    /// </summary>
+    public class MusicGenreImageProvider : BaseDynamicImageProvider<MusicGenre>
+    {
+        /// <summary>
+        /// The library manager.
+        /// </summary>
+        private readonly ILibraryManager _libraryManager;
+
+        public MusicGenreImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
+        {
+            _libraryManager = libraryManager;
+        }
+
+        /// <summary>
+        /// Get children objects used to create an music genre image.
+        /// </summary>
+        /// <param name="item">The music genre used to create the image.</param>
+        /// <returns>Any relevant children objects.</returns>
+        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
+        {
+            return _libraryManager.GetItemList(new InternalItemsQuery
+            {
+                Genres = new[] { item.Name },
+                IncludeItemTypes = new[]
+                {
+                    nameof(MusicAlbum),
+                    nameof(MusicVideo),
+                    nameof(Audio)
+                },
+                OrderBy = new[] { (ItemSortBy.Random, SortOrder.Ascending) },
+                Limit = 4,
+                Recursive = true,
+                ImageTypes = new[] { ImageType.Primary },
+                DtoOptions = new DtoOptions(false)
+            });
+        }
+    }
+}

+ 19 - 0
Emby.Server.Implementations/Images/PhotoAlbumImageProvider.cs

@@ -0,0 +1,19 @@
+#pragma warning disable CS1591
+
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.IO;
+
+namespace Emby.Server.Implementations.Images
+{
+    public class PhotoAlbumImageProvider : BaseFolderImageProvider<PhotoAlbum>
+    {
+        public PhotoAlbumImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager)
+            : base(fileSystem, providerManager, applicationPaths, imageProcessor, libraryManager)
+        {
+        }
+    }
+}

+ 1 - 21
Emby.Server.Implementations/Library/Resolvers/FolderResolver.cs

@@ -9,7 +9,7 @@ namespace Emby.Server.Implementations.Library.Resolvers
     /// <summary>
     /// Class FolderResolver.
     /// </summary>
-    public class FolderResolver : FolderResolver<Folder>
+    public class FolderResolver : GenericFolderResolver<Folder>
     {
         /// <summary>
         /// Gets the priority.
@@ -32,24 +32,4 @@ namespace Emby.Server.Implementations.Library.Resolvers
             return null;
         }
     }
-
-    /// <summary>
-    /// Class FolderResolver.
-    /// </summary>
-    /// <typeparam name="TItemType">The type of the T item type.</typeparam>
-    public abstract class FolderResolver<TItemType> : ItemResolver<TItemType>
-        where TItemType : Folder, new()
-    {
-        /// <summary>
-        /// Sets the initial item values.
-        /// </summary>
-        /// <param name="item">The item.</param>
-        /// <param name="args">The args.</param>
-        protected override void SetInitialItemValues(TItemType item, ItemResolveArgs args)
-        {
-            base.SetInitialItemValues(item, args);
-
-            item.IsRoot = args.Parent == null;
-        }
-    }
 }

+ 27 - 0
Emby.Server.Implementations/Library/Resolvers/GenericFolderResolver.cs

@@ -0,0 +1,27 @@
+#nullable disable
+
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
+
+namespace Emby.Server.Implementations.Library.Resolvers
+{
+    /// <summary>
+    /// Class FolderResolver.
+    /// </summary>
+    /// <typeparam name="TItemType">The type of the T item type.</typeparam>
+    public abstract class GenericFolderResolver<TItemType> : ItemResolver<TItemType>
+        where TItemType : Folder, new()
+    {
+        /// <summary>
+        /// Sets the initial item values.
+        /// </summary>
+        /// <param name="item">The item.</param>
+        /// <param name="args">The args.</param>
+        protected override void SetInitialItemValues(TItemType item, ItemResolveArgs args)
+        {
+            base.SetInitialItemValues(item, args);
+
+            item.IsRoot = args.Parent == null;
+        }
+    }
+}

+ 1 - 1
Emby.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs

@@ -12,7 +12,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
     /// <summary>
     /// Class BoxSetResolver.
     /// </summary>
-    public class BoxSetResolver : FolderResolver<BoxSet>
+    public class BoxSetResolver : GenericFolderResolver<BoxSet>
     {
         /// <summary>
         /// Resolves the specified args.

+ 1 - 1
Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs

@@ -12,7 +12,7 @@ namespace Emby.Server.Implementations.Library.Resolvers
     /// <summary>
     /// Class PhotoAlbumResolver.
     /// </summary>
-    public class PhotoAlbumResolver : FolderResolver<PhotoAlbum>
+    public class PhotoAlbumResolver : GenericFolderResolver<PhotoAlbum>
     {
         private readonly IImageProcessor _imageProcessor;
         private readonly ILibraryManager _libraryManager;

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

@@ -16,7 +16,7 @@ namespace Emby.Server.Implementations.Library.Resolvers
     /// <summary>
     /// <see cref="IItemResolver"/> for <see cref="Playlist"/> library items.
     /// </summary>
-    public class PlaylistResolver : FolderResolver<Playlist>
+    public class PlaylistResolver : GenericFolderResolver<Playlist>
     {
         private string[] _musicPlaylistCollectionTypes =
         {

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

@@ -13,7 +13,7 @@ using MediaBrowser.Model.IO;
 
 namespace Emby.Server.Implementations.Library.Resolvers
 {
-    public class SpecialFolderResolver : FolderResolver<Folder>
+    public class SpecialFolderResolver : GenericFolderResolver<Folder>
     {
         private readonly IFileSystem _fileSystem;
         private readonly IServerApplicationPaths _appPaths;

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

@@ -12,7 +12,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
     /// <summary>
     /// Class SeasonResolver.
     /// </summary>
-    public class SeasonResolver : FolderResolver<Season>
+    public class SeasonResolver : GenericFolderResolver<Season>
     {
         private readonly ILibraryManager _libraryManager;
         private readonly ILocalizationManager _localization;

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

@@ -18,7 +18,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
     /// <summary>
     /// Class SeriesResolver.
     /// </summary>
-    public class SeriesResolver : FolderResolver<Series>
+    public class SeriesResolver : GenericFolderResolver<Series>
     {
         private readonly ILogger<SeriesResolver> _logger;
         private readonly ILibraryManager _libraryManager;

+ 1 - 1
Emby.Server.Implementations/LiveTv/Listings/SchedulesDirectDtos/ImageDataDto.cs

@@ -37,7 +37,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings.SchedulesDirectDtos
         /// Gets or sets the aspect.
         /// </summary>
         [JsonPropertyName("aspect")]
-        public string aspect { get; set; }
+        public string Aspect { get; set; }
 
         /// <summary>
         /// Gets or sets the category.

+ 50 - 50
Emby.Server.Implementations/LiveTv/Listings/SchedulesDirectDtos/StationDto.cs

@@ -6,62 +6,62 @@ using System.Text.Json.Serialization;
 namespace Emby.Server.Implementations.LiveTv.Listings.SchedulesDirectDtos
 {
     /// <summary>
-            /// Station dto.
-            /// </summary>
-            public class StationDto
-            {
-                /// <summary>
-                /// Gets or sets the station id.
-                /// </summary>
-                [JsonPropertyName("stationID")]
-                public string StationId { get; set; }
+    /// Station dto.
+    /// </summary>
+    public class StationDto
+    {
+        /// <summary>
+        /// Gets or sets the station id.
+        /// </summary>
+        [JsonPropertyName("stationID")]
+        public string StationId { get; set; }
 
-                /// <summary>
-                /// Gets or sets the name.
-                /// </summary>
-                [JsonPropertyName("name")]
-                public string Name { get; set; }
+        /// <summary>
+        /// Gets or sets the name.
+        /// </summary>
+        [JsonPropertyName("name")]
+        public string Name { get; set; }
 
-                /// <summary>
-                /// Gets or sets the callsign.
-                /// </summary>
-                [JsonPropertyName("callsign")]
-                public string Callsign { get; set; }
+        /// <summary>
+        /// Gets or sets the callsign.
+        /// </summary>
+        [JsonPropertyName("callsign")]
+        public string Callsign { get; set; }
 
-                /// <summary>
-                /// Gets or sets the broadcast language.
-                /// </summary>
-                [JsonPropertyName("broadcastLanguage")]
-                public List<string> BroadcastLanguage { get; set; }
+        /// <summary>
+        /// Gets or sets the broadcast language.
+        /// </summary>
+        [JsonPropertyName("broadcastLanguage")]
+        public List<string> BroadcastLanguage { get; set; }
 
-                /// <summary>
-                /// Gets or sets the description language.
-                /// </summary>
-                [JsonPropertyName("descriptionLanguage")]
-                public List<string> DescriptionLanguage { get; set; }
+        /// <summary>
+        /// Gets or sets the description language.
+        /// </summary>
+        [JsonPropertyName("descriptionLanguage")]
+        public List<string> DescriptionLanguage { get; set; }
 
-                /// <summary>
-                /// Gets or sets the broadcaster.
-                /// </summary>
-                [JsonPropertyName("broadcaster")]
-                public BroadcasterDto Broadcaster { get; set; }
+        /// <summary>
+        /// Gets or sets the broadcaster.
+        /// </summary>
+        [JsonPropertyName("broadcaster")]
+        public BroadcasterDto Broadcaster { get; set; }
 
-                /// <summary>
-                /// Gets or sets the affiliate.
-                /// </summary>
-                [JsonPropertyName("affiliate")]
-                public string Affiliate { get; set; }
+        /// <summary>
+        /// Gets or sets the affiliate.
+        /// </summary>
+        [JsonPropertyName("affiliate")]
+        public string Affiliate { get; set; }
 
-                /// <summary>
-                /// Gets or sets the logo.
-                /// </summary>
-                [JsonPropertyName("logo")]
-                public LogoDto Logo { get; set; }
+        /// <summary>
+        /// Gets or sets the logo.
+        /// </summary>
+        [JsonPropertyName("logo")]
+        public LogoDto Logo { get; set; }
 
-                /// <summary>
-                /// Gets or set a value indicating whether it is commercial free.
-                /// </summary>
-                [JsonPropertyName("isCommercialFree")]
-                public bool? IsCommercialFree { get; set; }
-            }
+        /// <summary>
+        /// Gets or sets a value indicating whether it is commercial free.
+        /// </summary>
+        [JsonPropertyName("isCommercialFree")]
+        public bool? IsCommercialFree { get; set; }
+    }
 }

+ 35 - 0
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunChannelCommands.cs

@@ -0,0 +1,35 @@
+#pragma warning disable CS1591
+
+using System;
+using System.Collections.Generic;
+
+namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
+{
+    public class HdHomerunChannelCommands : IHdHomerunChannelCommands
+    {
+        private string? _channel;
+        private string? _profile;
+
+        public HdHomerunChannelCommands(string? channel, string? profile)
+        {
+            _channel = channel;
+            _profile = profile;
+        }
+
+        public IEnumerable<(string, string)> GetCommands()
+        {
+            if (!string.IsNullOrEmpty(_channel))
+            {
+                if (!string.IsNullOrEmpty(_profile)
+                    && !string.Equals(_profile, "native", StringComparison.OrdinalIgnoreCase))
+                {
+                    yield return ("vchannel", $"{_channel} transcode={_profile}");
+                }
+                else
+                {
+                    yield return ("vchannel", _channel);
+                }
+            }
+        }
+    }
+}

+ 5 - 5
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs

@@ -87,11 +87,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
             return lineup.Where(i => !i.DRM).ToList();
         }
 
-        private class HdHomerunChannelInfo : ChannelInfo
-        {
-            public bool IsLegacyTuner { get; set; }
-        }
-
         protected override async Task<List<ChannelInfo>> GetChannelsInternal(TunerHostInfo tuner, CancellationToken cancellationToken)
         {
             var lineup = await GetLineup(tuner, cancellationToken).ConfigureAwait(false);
@@ -715,5 +710,10 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 
             return hostInfo;
         }
+
+        private class HdHomerunChannelInfo : ChannelInfo
+        {
+            public bool IsLegacyTuner { get; set; }
+        }
     }
 }

+ 0 - 66
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs

@@ -5,12 +5,10 @@
 using System;
 using System.Buffers;
 using System.Buffers.Binary;
-using System.Collections.Generic;
 using System.Globalization;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
-using System.Text.RegularExpressions;
 using System.Threading;
 using System.Threading.Tasks;
 using MediaBrowser.Common;
@@ -18,70 +16,6 @@ using MediaBrowser.Controller.LiveTv;
 
 namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
 {
-    public interface IHdHomerunChannelCommands
-    {
-        IEnumerable<(string, string)> GetCommands();
-    }
-
-    public class LegacyHdHomerunChannelCommands : IHdHomerunChannelCommands
-    {
-        private string _channel;
-        private string _program;
-
-        public LegacyHdHomerunChannelCommands(string url)
-        {
-            // parse url for channel and program
-            var regExp = new Regex(@"\/ch([0-9]+)-?([0-9]*)");
-            var match = regExp.Match(url);
-            if (match.Success)
-            {
-                _channel = match.Groups[1].Value;
-                _program = match.Groups[2].Value;
-            }
-        }
-
-        public IEnumerable<(string, string)> GetCommands()
-        {
-            if (!string.IsNullOrEmpty(_channel))
-            {
-                yield return ("channel", _channel);
-            }
-
-            if (!string.IsNullOrEmpty(_program))
-            {
-                yield return ("program", _program);
-            }
-        }
-    }
-
-    public class HdHomerunChannelCommands : IHdHomerunChannelCommands
-    {
-        private string _channel;
-        private string _profile;
-
-        public HdHomerunChannelCommands(string channel, string profile)
-        {
-            _channel = channel;
-            _profile = profile;
-        }
-
-        public IEnumerable<(string, string)> GetCommands()
-        {
-            if (!string.IsNullOrEmpty(_channel))
-            {
-                if (!string.IsNullOrEmpty(_profile)
-                    && !string.Equals(_profile, "native", StringComparison.OrdinalIgnoreCase))
-                {
-                    yield return ("vchannel", $"{_channel} transcode={_profile}");
-                }
-                else
-                {
-                    yield return ("vchannel", _channel);
-                }
-            }
-        }
-    }
-
     public sealed class HdHomerunManager : IDisposable
     {
         public const int HdHomeRunPort = 65001;

+ 11 - 0
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/IHdHomerunChannelCommands.cs

@@ -0,0 +1,11 @@
+#pragma warning disable CS1591
+
+using System.Collections.Generic;
+
+namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
+{
+    public interface IHdHomerunChannelCommands
+    {
+        IEnumerable<(string, string)> GetCommands();
+    }
+}

+ 38 - 0
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/LegacyHdHomerunChannelCommands.cs

@@ -0,0 +1,38 @@
+#pragma warning disable CS1591
+
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+
+namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
+{
+    public class LegacyHdHomerunChannelCommands : IHdHomerunChannelCommands
+    {
+        private string? _channel;
+        private string? _program;
+
+        public LegacyHdHomerunChannelCommands(string url)
+        {
+            // parse url for channel and program
+            var regExp = new Regex(@"\/ch([0-9]+)-?([0-9]*)");
+            var match = regExp.Match(url);
+            if (match.Success)
+            {
+                _channel = match.Groups[1].Value;
+                _program = match.Groups[2].Value;
+            }
+        }
+
+        public IEnumerable<(string, string)> GetCommands()
+        {
+            if (!string.IsNullOrEmpty(_channel))
+            {
+                yield return ("channel", _channel);
+            }
+
+            if (!string.IsNullOrEmpty(_program))
+            {
+                yield return ("program", _program);
+            }
+        }
+    }
+}

+ 0 - 5
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -39,11 +39,6 @@
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
     <IncludeSymbols>true</IncludeSymbols>
     <SymbolPackageFormat>snupkg</SymbolPackageFormat>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-  </PropertyGroup>
-
-  <PropertyGroup Condition=" '$(Configuration)' == 'Release'">
-    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
 
   <PropertyGroup Condition=" '$(Stability)'=='Unstable'">

+ 0 - 5
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -21,11 +21,6 @@
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
     <IncludeSymbols>true</IncludeSymbols>
     <SymbolPackageFormat>snupkg</SymbolPackageFormat>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-  </PropertyGroup>
-
-  <PropertyGroup Condition=" '$(Configuration)' == 'Release'">
-    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
 
   <PropertyGroup Condition=" '$(Stability)'=='Unstable'">