Browse Source

improve clean db task

Luke Pulverenti 8 năm trước cách đây
mục cha
commit
203fc64a97

+ 28 - 4
Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs

@@ -9,6 +9,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
+using MediaBrowser.Common.Configuration;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Controller.Channels;
 using MediaBrowser.Controller.Entities.Audio;
@@ -22,13 +23,15 @@ namespace Emby.Server.Implementations.Data
         private readonly IItemRepository _itemRepo;
         private readonly ILogger _logger;
         private readonly IFileSystem _fileSystem;
+        private readonly IApplicationPaths _appPaths;
 
-        public CleanDatabaseScheduledTask(ILibraryManager libraryManager, IItemRepository itemRepo, ILogger logger, IFileSystem fileSystem)
+        public CleanDatabaseScheduledTask(ILibraryManager libraryManager, IItemRepository itemRepo, ILogger logger, IFileSystem fileSystem, IApplicationPaths appPaths)
         {
             _libraryManager = libraryManager;
             _itemRepo = itemRepo;
             _logger = logger;
             _fileSystem = fileSystem;
+            _appPaths = appPaths;
         }
 
         public string Name
@@ -150,13 +153,27 @@ namespace Emby.Server.Implementations.Data
 
                 try
                 {
-                    if (_fileSystem.FileExists(path) || _fileSystem.DirectoryExists(path))
+                    var isPathInLibrary = false;
+
+                    if (allLibraryPaths.Any(i => path.StartsWith(i, StringComparison.Ordinal)) || 
+                        allLibraryPaths.Contains(path, StringComparer.Ordinal) || 
+                        path.StartsWith(_appPaths.ProgramDataPath, StringComparison.Ordinal))
                     {
-                        continue;
+                        isPathInLibrary = true;
+
+                        if (_fileSystem.FileExists(path) || _fileSystem.DirectoryExists(path))
+                        {
+                            continue;
+                        }
                     }
 
                     var libraryItem = _libraryManager.GetItemById(item.Item1);
 
+                    if (libraryItem == null)
+                    {
+                        continue;
+                    }
+
                     if (libraryItem.IsTopParent)
                     {
                         continue;
@@ -180,7 +197,14 @@ namespace Emby.Server.Implementations.Data
                         continue;
                     }
 
-                    _logger.Info("Deleting item from database {0} because path no longer exists. type: {1} path: {2}", libraryItem.Name, libraryItem.GetType().Name, libraryItemPath ?? string.Empty);
+                    if (isPathInLibrary)
+                    {
+                        _logger.Info("Deleting item from database {0} because path no longer exists. type: {1} path: {2}", libraryItem.Name, libraryItem.GetType().Name, libraryItemPath ?? string.Empty);
+                    }
+                    else
+                    {
+                        _logger.Info("Deleting item from database {0} because path is no longer in the server library. type: {1} path: {2}", libraryItem.Name, libraryItem.GetType().Name, libraryItemPath ?? string.Empty);
+                    }
 
                     await libraryItem.OnFileDeleted().ConfigureAwait(false);
                 }