From 12f20de68b3e988b27286a1f25175a2fe91db5a8 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 10 Jan 2017 15:44:02 -0500 Subject: [PATCH] update offline detection --- .../Data/CleanDatabaseScheduledTask.cs | 8 +++- MediaBrowser.Controller/Entities/BaseItem.cs | 17 --------- MediaBrowser.Controller/Entities/Folder.cs | 38 +++++++++---------- 3 files changed, 23 insertions(+), 40 deletions(-) diff --git a/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs b/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs index 5bc3a625f..2819a249f 100644 --- a/Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs +++ b/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; } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index c8f49820f..3651ba363 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/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); - } - /// /// Gets or sets the type of the location. /// diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 61747bd14..c8bdbd194 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -369,6 +369,11 @@ namespace MediaBrowser.Controller.Entities var validChildren = new List(); + var allLibraryPaths = LibraryManager + .GetVirtualFolders() + .SelectMany(i => i.Locations) + .ToList(); + if (locationType != LocationType.Remote && locationType != LocationType.Virtual) { IEnumerable 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 /// The path. /// true if the specified path is offline; otherwise, false. public static bool IsPathOffline(string path) + { + return IsPathOffline(path, LibraryManager.GetVirtualFolders().SelectMany(i => i.Locations).ToList()); + } + + public static bool IsPathOffline(string path, List allLibraryPaths) { if (FileSystem.FileExists(path)) { @@ -627,26 +634,15 @@ namespace MediaBrowser.Controller.Entities return false; } + if (allLibraryPaths.Contains(path, StringComparer.OrdinalIgnoreCase)) + { + return true; + } + path = System.IO.Path.GetDirectoryName(path); } - if (ContainsPath(LibraryManager.GetVirtualFolders(), originalPath)) - { - return true; - } - - return false; - } - - /// - /// Determines whether the specified folders contains path. - /// - /// The folders. - /// The path. - /// true if the specified folders contains path; otherwise, false. - private static bool ContainsPath(IEnumerable 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)