Procházet zdrojové kódy

update offline detection

Luke Pulverenti před 8 roky
rodič
revize
12f20de68b

+ 6 - 2
Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs

@@ -137,6 +137,11 @@ namespace Emby.Server.Implementations.Data
             var numComplete = 0;
             var numItems = result.Count;
 
+            var allLibraryPaths = _libraryManager
+                .GetVirtualFolders()
+                .SelectMany(i => i.Locations)
+                .ToList();
+
             foreach (var item in result)
             {
                 cancellationToken.ThrowIfCancellationRequested();
@@ -170,9 +175,8 @@ namespace Emby.Server.Implementations.Data
                         continue;
                     }
 
-                    if (Folder.IsPathOffline(path))
+                    if (Folder.IsPathOffline(path, allLibraryPaths))
                     {
-                        await libraryItem.UpdateIsOffline(true).ConfigureAwait(false);
                         continue;
                     }
 

+ 0 - 17
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -272,9 +272,6 @@ namespace MediaBrowser.Controller.Entities
         [IgnoreDataMember]
         public virtual string Path { get; set; }
 
-        [IgnoreDataMember]
-        public bool IsOffline { get; set; }
-
         [IgnoreDataMember]
         public virtual SourceType SourceType { get; set; }
 
@@ -339,20 +336,6 @@ namespace MediaBrowser.Controller.Entities
             }
         }
 
-        public Task UpdateIsOffline(bool newValue)
-        {
-            var item = this;
-
-            if (item.IsOffline != newValue)
-            {
-                item.IsOffline = newValue;
-                // this is creating too many repeated db updates
-                //return item.UpdateToRepository(ItemUpdateType.None, CancellationToken.None);
-            }
-
-            return Task.FromResult(true);
-        }
-
         /// <summary>
         /// Gets or sets the type of the location.
         /// </summary>

+ 17 - 21
MediaBrowser.Controller/Entities/Folder.cs

@@ -369,6 +369,11 @@ namespace MediaBrowser.Controller.Entities
 
             var validChildren = new List<BaseItem>();
 
+            var allLibraryPaths = LibraryManager
+              .GetVirtualFolders()
+              .SelectMany(i => i.Locations)
+              .ToList();
+
             if (locationType != LocationType.Remote && locationType != LocationType.Virtual)
             {
                 IEnumerable<BaseItem> nonCachedChildren;
@@ -402,7 +407,6 @@ namespace MediaBrowser.Controller.Entities
 
                     if (currentChildren.TryGetValue(child.Id, out currentChild) && IsValidFromResolver(currentChild, child))
                     {
-                        await currentChild.UpdateIsOffline(false).ConfigureAwait(false);
                         validChildren.Add(currentChild);
 
                         continue;
@@ -429,9 +433,8 @@ namespace MediaBrowser.Controller.Entities
                         {
                         }
 
-                        else if (!string.IsNullOrEmpty(item.Path) && IsPathOffline(item.Path))
+                        else if (!string.IsNullOrEmpty(item.Path) && IsPathOffline(item.Path, allLibraryPaths))
                         {
-                            await item.UpdateIsOffline(true).ConfigureAwait(false);
                         }
                         else
                         {
@@ -446,7 +449,6 @@ namespace MediaBrowser.Controller.Entities
                             Logger.Debug("Removed item: " + item.Path);
 
                             item.SetParent(null);
-                            item.IsOffline = false;
                             await LibraryManager.DeleteItem(item, new DeleteOptions { DeleteFileLocation = false }).ConfigureAwait(false);
                             LibraryManager.ReportItemRemoved(item);
                         }
@@ -611,6 +613,11 @@ namespace MediaBrowser.Controller.Entities
         /// <param name="path">The path.</param>
         /// <returns><c>true</c> if the specified path is offline; otherwise, <c>false</c>.</returns>
         public static bool IsPathOffline(string path)
+        {
+            return IsPathOffline(path, LibraryManager.GetVirtualFolders().SelectMany(i => i.Locations).ToList());
+        }
+
+        public static bool IsPathOffline(string path, List<string> allLibraryPaths)
         {
             if (FileSystem.FileExists(path))
             {
@@ -627,26 +634,15 @@ namespace MediaBrowser.Controller.Entities
                     return false;
                 }
 
-                path = System.IO.Path.GetDirectoryName(path);
-            }
+                if (allLibraryPaths.Contains(path, StringComparer.OrdinalIgnoreCase))
+                {
+                    return true;
+                }
 
-            if (ContainsPath(LibraryManager.GetVirtualFolders(), originalPath))
-            {
-                return true;
+                path = System.IO.Path.GetDirectoryName(path);
             }
 
-            return false;
-        }
-
-        /// <summary>
-        /// Determines whether the specified folders contains path.
-        /// </summary>
-        /// <param name="folders">The folders.</param>
-        /// <param name="path">The path.</param>
-        /// <returns><c>true</c> if the specified folders contains path; otherwise, <c>false</c>.</returns>
-        private static bool ContainsPath(IEnumerable<VirtualFolderInfo> folders, string path)
-        {
-            return folders.SelectMany(i => i.Locations).Any(i => ContainsPath(i, path));
+            return allLibraryPaths.Any(i => ContainsPath(i, originalPath));
         }
 
         private static bool ContainsPath(string parent, string path)