浏览代码

Enable nullable for ItemDataProvider

Bond_009 3 年之前
父节点
当前提交
1ee58bf020
共有 1 个文件被更改,包括 10 次插入4 次删除
  1. 10 4
      Emby.Server.Implementations/LiveTv/EmbyTV/ItemDataProvider.cs

+ 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);
         }