Forráskód Böngészése

Merge pull request #6381 from Bond-009/nullable5

Enable nullable for DlnaManager
Bond-009 3 éve
szülő
commit
fc9f45b42d

+ 39 - 29
Emby.Dlna/DlnaManager.cs

@@ -1,7 +1,4 @@
-#nullable disable
-
 #pragma warning disable CS1591
 #pragma warning disable CS1591
-
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Globalization;
 using System.Globalization;
@@ -96,12 +93,14 @@ namespace Emby.Dlna
             }
             }
         }
         }
 
 
+        /// <inheritdoc />
         public DeviceProfile GetDefaultProfile()
         public DeviceProfile GetDefaultProfile()
         {
         {
             return new DefaultProfile();
             return new DefaultProfile();
         }
         }
 
 
-        public DeviceProfile GetProfile(DeviceIdentification deviceInfo)
+        /// <inheritdoc />
+        public DeviceProfile? GetProfile(DeviceIdentification deviceInfo)
         {
         {
             if (deviceInfo == null)
             if (deviceInfo == null)
             {
             {
@@ -111,13 +110,13 @@ namespace Emby.Dlna
             var profile = GetProfiles()
             var profile = GetProfiles()
                 .FirstOrDefault(i => i.Identification != null && IsMatch(deviceInfo, i.Identification));
                 .FirstOrDefault(i => i.Identification != null && IsMatch(deviceInfo, i.Identification));
 
 
-            if (profile != null)
+            if (profile == null)
             {
             {
-                _logger.LogDebug("Found matching device profile: {ProfileName}", profile.Name);
+                LogUnmatchedProfile(deviceInfo);
             }
             }
             else
             else
             {
             {
-                LogUnmatchedProfile(deviceInfo);
+                _logger.LogDebug("Found matching device profile: {ProfileName}", profile.Name);
             }
             }
 
 
             return profile;
             return profile;
@@ -187,7 +186,8 @@ namespace Emby.Dlna
             }
             }
         }
         }
 
 
-        public DeviceProfile GetProfile(IHeaderDictionary headers)
+        /// <inheritdoc />
+        public DeviceProfile? GetProfile(IHeaderDictionary headers)
         {
         {
             if (headers == null)
             if (headers == null)
             {
             {
@@ -195,15 +195,13 @@ namespace Emby.Dlna
             }
             }
 
 
             var profile = GetProfiles().FirstOrDefault(i => i.Identification != null && IsMatch(headers, i.Identification));
             var profile = GetProfiles().FirstOrDefault(i => i.Identification != null && IsMatch(headers, i.Identification));
-
-            if (profile != null)
+            if (profile == null)
             {
             {
-                _logger.LogDebug("Found matching device profile: {0}", profile.Name);
+                _logger.LogDebug("No matching device profile found. {@Headers}", headers);
             }
             }
             else
             else
             {
             {
-                var headerString = string.Join(", ", headers.Select(i => string.Format(CultureInfo.InvariantCulture, "{0}={1}", i.Key, i.Value)));
-                _logger.LogDebug("No matching device profile found. {0}", headerString);
+                _logger.LogDebug("Found matching device profile: {0}", profile.Name);
             }
             }
 
 
             return profile;
             return profile;
@@ -253,19 +251,19 @@ namespace Emby.Dlna
                 return xmlFies
                 return xmlFies
                     .Select(i => ParseProfileFile(i, type))
                     .Select(i => ParseProfileFile(i, type))
                     .Where(i => i != null)
                     .Where(i => i != null)
-                    .ToList();
+                    .ToList()!; // We just filtered out all the nulls
             }
             }
             catch (IOException)
             catch (IOException)
             {
             {
-                return new List<DeviceProfile>();
+                return Array.Empty<DeviceProfile>();
             }
             }
         }
         }
 
 
-        private DeviceProfile ParseProfileFile(string path, DeviceProfileType type)
+        private DeviceProfile? ParseProfileFile(string path, DeviceProfileType type)
         {
         {
             lock (_profiles)
             lock (_profiles)
             {
             {
-                if (_profiles.TryGetValue(path, out Tuple<InternalProfileInfo, DeviceProfile> profileTuple))
+                if (_profiles.TryGetValue(path, out Tuple<InternalProfileInfo, DeviceProfile>? profileTuple))
                 {
                 {
                     return profileTuple.Item2;
                     return profileTuple.Item2;
                 }
                 }
@@ -293,7 +291,8 @@ namespace Emby.Dlna
             }
             }
         }
         }
 
 
-        public DeviceProfile GetProfile(string id)
+        /// <inheritdoc />
+        public DeviceProfile? GetProfile(string id)
         {
         {
             if (string.IsNullOrEmpty(id))
             if (string.IsNullOrEmpty(id))
             {
             {
@@ -322,6 +321,7 @@ namespace Emby.Dlna
             }
             }
         }
         }
 
 
+        /// <inheritdoc />
         public IEnumerable<DeviceProfileInfo> GetProfileInfos()
         public IEnumerable<DeviceProfileInfo> GetProfileInfos()
         {
         {
             return GetProfileInfosInternal().Select(i => i.Info);
             return GetProfileInfosInternal().Select(i => i.Info);
@@ -329,17 +329,14 @@ namespace Emby.Dlna
 
 
         private InternalProfileInfo GetInternalProfileInfo(FileSystemMetadata file, DeviceProfileType type)
         private InternalProfileInfo GetInternalProfileInfo(FileSystemMetadata file, DeviceProfileType type)
         {
         {
-            return new InternalProfileInfo
-            {
-                Path = file.FullName,
-
-                Info = new DeviceProfileInfo
+            return new InternalProfileInfo(
+                new DeviceProfileInfo
                 {
                 {
                     Id = file.FullName.ToLowerInvariant().GetMD5().ToString("N", CultureInfo.InvariantCulture),
                     Id = file.FullName.ToLowerInvariant().GetMD5().ToString("N", CultureInfo.InvariantCulture),
                     Name = _fileSystem.GetFileNameWithoutExtension(file),
                     Name = _fileSystem.GetFileNameWithoutExtension(file),
                     Type = type
                     Type = type
-                }
-            };
+                },
+                file.FullName);
         }
         }
 
 
         private async Task ExtractSystemProfilesAsync()
         private async Task ExtractSystemProfilesAsync()
@@ -359,7 +356,8 @@ namespace Emby.Dlna
                     systemProfilesPath,
                     systemProfilesPath,
                     Path.GetFileName(name.AsSpan()).Slice(namespaceName.Length));
                     Path.GetFileName(name.AsSpan()).Slice(namespaceName.Length));
 
 
-                using (var stream = _assembly.GetManifestResourceStream(name))
+                // The stream should exist as we just got its name from GetManifestResourceNames
+                using (var stream = _assembly.GetManifestResourceStream(name)!)
                 {
                 {
                     var fileInfo = _fileSystem.GetFileInfo(path);
                     var fileInfo = _fileSystem.GetFileInfo(path);
 
 
@@ -380,6 +378,7 @@ namespace Emby.Dlna
             Directory.CreateDirectory(UserProfilesPath);
             Directory.CreateDirectory(UserProfilesPath);
         }
         }
 
 
+        /// <inheritdoc />
         public void DeleteProfile(string id)
         public void DeleteProfile(string id)
         {
         {
             var info = GetProfileInfosInternal().First(i => string.Equals(id, i.Info.Id, StringComparison.OrdinalIgnoreCase));
             var info = GetProfileInfosInternal().First(i => string.Equals(id, i.Info.Id, StringComparison.OrdinalIgnoreCase));
@@ -397,6 +396,7 @@ namespace Emby.Dlna
             }
             }
         }
         }
 
 
+        /// <inheritdoc />
         public void CreateProfile(DeviceProfile profile)
         public void CreateProfile(DeviceProfile profile)
         {
         {
             profile = ReserializeProfile(profile);
             profile = ReserializeProfile(profile);
@@ -412,6 +412,7 @@ namespace Emby.Dlna
             SaveProfile(profile, path, DeviceProfileType.User);
             SaveProfile(profile, path, DeviceProfileType.User);
         }
         }
 
 
+        /// <inheritdoc />
         public void UpdateProfile(DeviceProfile profile)
         public void UpdateProfile(DeviceProfile profile)
         {
         {
             profile = ReserializeProfile(profile);
             profile = ReserializeProfile(profile);
@@ -470,9 +471,11 @@ namespace Emby.Dlna
 
 
             var json = JsonSerializer.Serialize(profile, _jsonOptions);
             var json = JsonSerializer.Serialize(profile, _jsonOptions);
 
 
-            return JsonSerializer.Deserialize<DeviceProfile>(json, _jsonOptions);
+            // Output can't be null if the input isn't null
+            return JsonSerializer.Deserialize<DeviceProfile>(json, _jsonOptions)!;
         }
         }
 
 
+        /// <inheritdoc />
         public string GetServerDescriptionXml(IHeaderDictionary headers, string serverUuId, string serverAddress)
         public string GetServerDescriptionXml(IHeaderDictionary headers, string serverUuId, string serverAddress)
         {
         {
             var profile = GetDefaultProfile();
             var profile = GetDefaultProfile();
@@ -482,6 +485,7 @@ namespace Emby.Dlna
             return new DescriptionXmlBuilder(profile, serverUuId, serverAddress, _appHost.FriendlyName, serverId).GetXml();
             return new DescriptionXmlBuilder(profile, serverUuId, serverAddress, _appHost.FriendlyName, serverId).GetXml();
         }
         }
 
 
+        /// <inheritdoc />
         public ImageStream GetIcon(string filename)
         public ImageStream GetIcon(string filename)
         {
         {
             var format = filename.EndsWith(".png", StringComparison.OrdinalIgnoreCase)
             var format = filename.EndsWith(".png", StringComparison.OrdinalIgnoreCase)
@@ -499,9 +503,15 @@ namespace Emby.Dlna
 
 
         private class InternalProfileInfo
         private class InternalProfileInfo
         {
         {
-            internal DeviceProfileInfo Info { get; set; }
+            internal InternalProfileInfo(DeviceProfileInfo info, string path)
+            {
+                Info = info;
+                Path = path;
+            }
+
+            internal DeviceProfileInfo Info { get; }
 
 
-            internal string Path { get; set; }
+            internal string Path { get; }
         }
         }
     }
     }
 
 

+ 3 - 5
MediaBrowser.Controller/Dlna/IDlnaManager.cs

@@ -1,5 +1,3 @@
-#nullable disable
-
 #pragma warning disable CS1591
 #pragma warning disable CS1591
 
 
 using System.Collections.Generic;
 using System.Collections.Generic;
@@ -22,7 +20,7 @@ namespace MediaBrowser.Controller.Dlna
         /// </summary>
         /// </summary>
         /// <param name="headers">The headers.</param>
         /// <param name="headers">The headers.</param>
         /// <returns>DeviceProfile.</returns>
         /// <returns>DeviceProfile.</returns>
-        DeviceProfile GetProfile(IHeaderDictionary headers);
+        DeviceProfile? GetProfile(IHeaderDictionary headers);
 
 
         /// <summary>
         /// <summary>
         /// Gets the default profile.
         /// Gets the default profile.
@@ -53,14 +51,14 @@ namespace MediaBrowser.Controller.Dlna
         /// </summary>
         /// </summary>
         /// <param name="id">The identifier.</param>
         /// <param name="id">The identifier.</param>
         /// <returns>DeviceProfile.</returns>
         /// <returns>DeviceProfile.</returns>
-        DeviceProfile GetProfile(string id);
+        DeviceProfile? GetProfile(string id);
 
 
         /// <summary>
         /// <summary>
         /// Gets the profile.
         /// Gets the profile.
         /// </summary>
         /// </summary>
         /// <param name="deviceInfo">The device information.</param>
         /// <param name="deviceInfo">The device information.</param>
         /// <returns>DeviceProfile.</returns>
         /// <returns>DeviceProfile.</returns>
-        DeviceProfile GetProfile(DeviceIdentification deviceInfo);
+        DeviceProfile? GetProfile(DeviceIdentification deviceInfo);
 
 
         /// <summary>
         /// <summary>
         /// Gets the server description XML.
         /// Gets the server description XML.