Просмотр исходного кода

Enable nullable for MediaBrowser.XbmcMetadata project (#4612)

Co-authored-by: Cody Robibero <cody@robibe.ro>
Co-authored-by: Stepan <ste.martinek+git@gmail.com>
martinek-stepan 4 лет назад
Родитель
Сommit
cc92f7afe5

+ 1 - 1
Jellyfin.Data/Jellyfin.Data.csproj

@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <TargetFramework>net5.0</TargetFramework>

+ 1 - 1
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <!-- ProjectGuid is only included as a requirement for SonarQube analysis -->
   <PropertyGroup>

+ 18 - 3
MediaBrowser.Model/Providers/ExternalIdInfo.cs

@@ -5,17 +5,32 @@ namespace MediaBrowser.Model.Providers
     /// </summary>
     public class ExternalIdInfo
     {
+        /// <summary>
+        /// Represents the external id information for serialization to the client.
+        /// </summary>
+        /// <param name="name">Name of the external id provider (IE: IMDB, MusicBrainz, etc).</param>
+        /// <param name="key">Key for this id. This key should be unique across all providers.</param>
+        /// <param name="type">Specific media type for this id</param>
+        /// <param name="urlFormatString">URL format string.</param>
+        public ExternalIdInfo(string name, string key, ExternalIdMediaType? type, string urlFormatString)
+        {
+            Name = name;
+            Key = key;
+            Type = type;
+            UrlFormatString = urlFormatString;
+        }
+
         /// <summary>
         /// Gets or sets the display name of the external id provider (IE: IMDB, MusicBrainz, etc).
         /// </summary>
         // TODO: This should be renamed to ProviderName
-        public string? Name { get; set; }
+        public string Name { get; set; }
 
         /// <summary>
         /// Gets or sets the unique key for this id. This key should be unique across all providers.
         /// </summary>
         // TODO: This property is not actually unique across the concrete types at the moment. It should be updated to be unique.
-        public string? Key { get; set; }
+        public string Key { get; set; }
 
         /// <summary>
         /// Gets or sets the specific media type for this id. This is used to distinguish between the different
@@ -31,6 +46,6 @@ namespace MediaBrowser.Model.Providers
         /// <summary>
         /// Gets or sets the URL format string.
         /// </summary>
-        public string? UrlFormatString { get; set; }
+        public string UrlFormatString { get; set; }
     }
 }

+ 5 - 7
MediaBrowser.Providers/Manager/ProviderManager.cs

@@ -960,13 +960,11 @@ namespace MediaBrowser.Providers.Manager
         public IEnumerable<ExternalIdInfo> GetExternalIdInfos(IHasProviderIds item)
         {
             return GetExternalIds(item)
-                .Select(i => new ExternalIdInfo
-                {
-                    Name = i.ProviderName,
-                    Key = i.Key,
-                    Type = i.Type,
-                    UrlFormatString = i.UrlFormatString
-                });
+                .Select(i => new ExternalIdInfo(
+                    name: i.ProviderName,
+                    key: i.Key,
+                    type: i.Type,
+                    urlFormatString: i.UrlFormatString));
         }
 
         /// <inheritdoc/>

+ 1 - 1
MediaBrowser.XbmcMetadata/EntryPoint.cs

@@ -41,7 +41,7 @@ namespace MediaBrowser.XbmcMetadata
             return Task.CompletedTask;
         }
 
-        private void OnUserDataSaved(object sender, UserDataSaveEventArgs e)
+        private void OnUserDataSaved(object? sender, UserDataSaveEventArgs e)
         {
             if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed || e.SaveReason == UserDataSaveReason.UpdateUserRating)
             {

+ 1 - 0
MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj

@@ -19,6 +19,7 @@
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
     <GenerateDocumentationFile>true</GenerateDocumentationFile>
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
+    <Nullable>enable</Nullable>
   </PropertyGroup>
 
   <!-- Code Analyzers-->

+ 5 - 4
MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs

@@ -37,6 +37,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
             Logger = logger;
             _config = config;
             ProviderManager = providerManager;
+            _validProviderIds = new Dictionary<string, string>();
         }
 
         protected CultureInfo UsCulture { get; } = new CultureInfo("en-US");
@@ -72,7 +73,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
                 throw new ArgumentException("The metadata file was empty or null.", nameof(metadataFile));
             }
 
-            _validProviderIds = _validProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+            _validProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
 
             var idInfos = ProviderManager.GetExternalIdInfos(item.Item);
 
@@ -376,7 +377,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
                                 }
 
                                 return null;
-                            }).Where(i => i.HasValue).Select(i => i.Value).ToArray();
+                            }).OfType<MetadataField>().ToArray();
                         }
 
                         break;
@@ -711,10 +712,10 @@ namespace MediaBrowser.XbmcMetadata.Parsers
 
                 default:
                     string readerName = reader.Name;
-                    if (_validProviderIds.TryGetValue(readerName, out string providerIdValue))
+                    if (_validProviderIds.TryGetValue(readerName, out string? providerIdValue))
                     {
                         var id = reader.ReadElementContentAsString();
-                        if (!string.IsNullOrWhiteSpace(id))
+                        if (!string.IsNullOrWhiteSpace(providerIdValue) && !string.IsNullOrWhiteSpace(id))
                         {
                             item.SetProviderId(providerIdValue, id);
                         }

+ 2 - 2
MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs

@@ -39,8 +39,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
             {
                 case "id":
                     {
-                        string imdbId = reader.GetAttribute("IMDB");
-                        string tmdbId = reader.GetAttribute("TMDB");
+                        string? imdbId = reader.GetAttribute("IMDB");
+                        string? tmdbId = reader.GetAttribute("TMDB");
 
                         if (string.IsNullOrWhiteSpace(imdbId))
                         {

+ 3 - 3
MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs

@@ -40,9 +40,9 @@ namespace MediaBrowser.XbmcMetadata.Parsers
             {
                 case "id":
                     {
-                        string imdbId = reader.GetAttribute("IMDB");
-                        string tmdbId = reader.GetAttribute("TMDB");
-                        string tvdbId = reader.GetAttribute("TVDB");
+                        string? imdbId = reader.GetAttribute("IMDB");
+                        string? tmdbId = reader.GetAttribute("TMDB");
+                        string? tvdbId = reader.GetAttribute("TVDB");
 
                         if (string.IsNullOrWhiteSpace(tvdbId))
                         {

+ 1 - 1
MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs

@@ -74,6 +74,6 @@ namespace MediaBrowser.XbmcMetadata.Providers
 
         protected abstract void Fetch(MetadataResult<T> result, string path, CancellationToken cancellationToken);
 
-        protected abstract FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService);
+        protected abstract FileSystemMetadata? GetXmlFile(ItemInfo info, IDirectoryService directoryService);
     }
 }

+ 1 - 1
MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs

@@ -50,7 +50,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
         }
 
         /// <inheritdoc />
-        protected override FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService)
+        protected override FileSystemMetadata? GetXmlFile(ItemInfo info, IDirectoryService directoryService)
         {
             return MovieNfoSaver.GetMovieSavePaths(info)
                 .Select(directoryService.GetFile)

+ 2 - 1
MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs

@@ -200,7 +200,8 @@ namespace MediaBrowser.XbmcMetadata.Savers
 
         private void SaveToFile(Stream stream, string path)
         {
-            Directory.CreateDirectory(Path.GetDirectoryName(path));
+            var directory = Path.GetDirectoryName(path) ?? throw new ArgumentException($"Provided path ({path}) is not valid.", nameof(path));
+            Directory.CreateDirectory(directory);
 
             // On Windows, savint the file will fail if the file is hidden or readonly
             FileSystem.SetAttributes(path, false, false);

+ 1 - 1
MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs

@@ -41,7 +41,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
 
         /// <inheritdoc />
         protected override string GetLocalSavePath(BaseItem item)
-            => GetMovieSavePaths(new ItemInfo(item)).FirstOrDefault();
+            => GetMovieSavePaths(new ItemInfo(item)).FirstOrDefault() ?? Path.ChangeExtension(item.Path, ".nfo");
 
         internal static IEnumerable<string> GetMovieSavePaths(ItemInfo item)
         {