浏览代码

add scheduled task error handling

Luke Pulverenti 8 年之前
父节点
当前提交
11e33cd00c
共有 1 个文件被更改,包括 14 次插入6 次删除
  1. 14 6
      Emby.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs

+ 14 - 6
Emby.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs

@@ -282,9 +282,12 @@ namespace Emby.Common.Implementations.ScheduledTasks
                     throw new ArgumentNullException("value");
                 }
 
-                SaveTriggers(value);
+                // This null check is not great, but is needed to handle bad user input, or user mucking with the config file incorrectly
+                var triggerList = value.Where(i => i != null).ToArray();
 
-                InternalTriggers = value.Select(i => new Tuple<TaskTriggerInfo, ITaskTrigger>(i, GetTrigger(i))).ToArray();
+                SaveTriggers(triggerList);
+
+                InternalTriggers = triggerList.Select(i => new Tuple<TaskTriggerInfo, ITaskTrigger>(i, GetTrigger(i))).ToArray();
             }
         }
 
@@ -535,7 +538,8 @@ namespace Emby.Common.Implementations.ScheduledTasks
         /// <returns>IEnumerable{BaseTaskTrigger}.</returns>
         private Tuple<TaskTriggerInfo, ITaskTrigger>[] LoadTriggers()
         {
-            var settings = LoadTriggerSettings();
+            // This null check is not great, but is needed to handle bad user input, or user mucking with the config file incorrectly
+            var settings = LoadTriggerSettings().Where(i => i != null).ToArray();
 
             return settings.Select(i => new Tuple<TaskTriggerInfo, ITaskTrigger>(i, GetTrigger(i))).ToArray();
         }
@@ -544,8 +548,12 @@ namespace Emby.Common.Implementations.ScheduledTasks
         {
             try
             {
-                return JsonSerializer.DeserializeFromFile<IEnumerable<TaskTriggerInfo>>(GetConfigurationFilePath())
-                .ToArray();
+                var list = JsonSerializer.DeserializeFromFile<IEnumerable<TaskTriggerInfo>>(GetConfigurationFilePath());
+
+                if (list != null)
+                {
+                    return list.ToArray();
+                }
             }
             catch (FileNotFoundException)
             {
@@ -555,8 +563,8 @@ namespace Emby.Common.Implementations.ScheduledTasks
             catch (DirectoryNotFoundException)
             {
                 // File doesn't exist. No biggie. Return defaults.
-                return ScheduledTask.GetDefaultTriggers().ToArray();
             }
+            return ScheduledTask.GetDefaultTriggers().ToArray();
         }
 
         /// <summary>