aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-01-10 15:44:02 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-01-10 15:44:02 -0500
commit12f20de68b3e988b27286a1f25175a2fe91db5a8 (patch)
tree17ef190e0b6137b445a73560126484e04ebb53a6
parent911e5cb490d410f551a08391433af806de4f449b (diff)
update offline detection
-rw-r--r--Emby.Server.Implementations/Data/CleanDatabaseScheduledTask.cs8
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs17
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs38
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
@@ -273,9 +273,6 @@ namespace MediaBrowser.Controller.Entities
public virtual string Path { get; set; }
[IgnoreDataMember]
- public bool IsOffline { get; set; }
-
- [IgnoreDataMember]
public virtual SourceType SourceType { get; set; }
/// <summary>
@@ -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>
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<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);
}
@@ -612,6 +614,11 @@ namespace MediaBrowser.Controller.Entities
/// <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))
{
return false;
@@ -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)