ソースを参照

Merge pull request #6644 from Bond-009/nullable7

Claus Vium 3 年 前
コミット
4fb4ceab04

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

@@ -1,9 +1,8 @@
-#nullable disable
-
 #pragma warning disable CS1591
 
 using System;
 using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
 using System.IO;
 using System.Linq;
 using System.Text.Json;
@@ -18,7 +17,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
         private readonly string _dataPath;
         private readonly object _fileDataLock = new object();
         private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.Options;
-        private T[] _items;
+        private T[]? _items;
 
         public ItemDataProvider(
             ILogger logger,
@@ -34,6 +33,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
         protected Func<T, T, bool> EqualityComparer { get; }
 
+        [MemberNotNull(nameof(_items))]
         private void EnsureLoaded()
         {
             if (_items != null)
@@ -49,6 +49,12 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 {
                     var bytes = File.ReadAllBytes(_dataPath);
                     _items = JsonSerializer.Deserialize<T[]>(bytes, _jsonOptions);
+                    if (_items == null)
+                    {
+                        Logger.LogError("Error deserializing {Path}, data was null", _dataPath);
+                        _items = Array.Empty<T>();
+                    }
+
                     return;
                 }
                 catch (JsonException ex)
@@ -62,7 +68,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
         private void SaveList()
         {
-            Directory.CreateDirectory(Path.GetDirectoryName(_dataPath));
+            Directory.CreateDirectory(Path.GetDirectoryName(_dataPath) ?? throw new ArgumentException("Path can't be a root directory.", nameof(_dataPath)));
             var jsonString = JsonSerializer.Serialize(_items, _jsonOptions);
             File.WriteAllText(_dataPath, jsonString);
         }