diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index d135acf9cf..17f32c0e6d 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1,4 +1,5 @@ using MediaBrowser.Model.Entities; +using MediaBrowser.Controller.Library; using System; using System.Collections.Generic; using System.Linq; @@ -7,6 +8,13 @@ namespace MediaBrowser.Controller.Entities { public abstract class BaseItem : BaseEntity, IHasProviderIds { + /// + /// We attach these to the item so that we only ever have to hit the file system once + /// (this includes the children of the containing folder) + /// Use ResolveArgs.FileSystemChildren to check for the existence of files instead of File.Exists + /// + public ItemResolveEventArgs ResolveArgs { get; set; } + public string SortName { get; set; } /// diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 0858500f0d..1e099e14d8 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -171,6 +171,10 @@ namespace MediaBrowser.Controller.Entities if (currentChild.IsChanged(child)) { changed = true; + //update resolve args and refresh meta + // Note - we are refreshing the existing child instead of the newly found one so the "Except" operation below + // will identify this item as the same one + currentChild.ResolveArgs = child.ResolveArgs; currentChild.RefreshMetadata(); //save it in repo... validChildren.Add(currentChild); diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 13010ad8ec..e7b8435bb9 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -129,6 +129,7 @@ namespace MediaBrowser.Controller if (item != null) { + item.ResolveArgs = args; return item; } } @@ -160,6 +161,7 @@ namespace MediaBrowser.Controller void RootFolder_ChildrenChanged(object sender, ChildrenChangedEventArgs e) { + Logger.LogDebugInfo("Root Folder Children Changed. Added: " + e.ItemsAdded.Count + " Removed: " + e.ItemsRemoved.Count()); //re-start the directory watchers DirectoryWatchers.Stop(); DirectoryWatchers.Start();