From 6481688d2acc23b789dab6e8ad04a96e48c46064 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 3 May 2013 00:10:11 -0400 Subject: fixes #223 - New Content Localhost Popups Repeat 'Old' 'New Content' on Media Changes --- .../IO/DirectoryWatchers.cs | 58 +++++++------- .../Library/LibraryManager.cs | 89 ++++++++++++++-------- .../Library/LuceneSearchEngine.cs | 30 ++++---- .../ScheduledTasks/AudioImagesTask.cs | 2 +- .../ScheduledTasks/VideoImagesTask.cs | 2 +- 5 files changed, 104 insertions(+), 77 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs b/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs index d45952d6fd..51fbfd2198 100644 --- a/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs +++ b/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs @@ -103,7 +103,8 @@ namespace MediaBrowser.Server.Implementations.IO /// public void Start() { - LibraryManager.LibraryChanged += Instance_LibraryChanged; + LibraryManager.ItemAdded += LibraryManager_ItemAdded; + LibraryManager.ItemRemoved += LibraryManager_ItemRemoved; var pathsToWatch = new List { LibraryManager.RootFolder.Path }; @@ -137,6 +138,32 @@ namespace MediaBrowser.Server.Implementations.IO } } + /// + /// Handles the ItemRemoved event of the LibraryManager control. + /// + /// The source of the event. + /// The instance containing the event data. + void LibraryManager_ItemRemoved(object sender, ItemChangeEventArgs e) + { + if (e.Item.Parent is AggregateFolder) + { + StopWatchingPath(e.Item.Path); + } + } + + /// + /// Handles the ItemAdded event of the LibraryManager control. + /// + /// The source of the event. + /// The instance containing the event data. + void LibraryManager_ItemAdded(object sender, ItemChangeEventArgs e) + { + if (e.Item.Parent is AggregateFolder) + { + StartWatchingPath(e.Item.Path); + } + } + /// /// Examine a list of strings assumed to be file paths to see if it contains a parent of /// the provided path. @@ -231,32 +258,6 @@ namespace MediaBrowser.Server.Implementations.IO _fileSystemWatchers = new ConcurrentBag(watchers); } - /// - /// Handles the LibraryChanged event of the Kernel - /// - /// The source of the event. - /// The instance containing the event data. - void Instance_LibraryChanged(object sender, ChildrenChangedEventArgs e) - { - if (e.Folder is AggregateFolder && e.HasAddOrRemoveChange) - { - if (e.ItemsRemoved != null) - { - foreach (var item in e.ItemsRemoved.OfType()) - { - StopWatchingPath(item.Path); - } - } - if (e.ItemsAdded != null) - { - foreach (var item in e.ItemsAdded.OfType()) - { - StartWatchingPath(item.Path); - } - } - } - } - /// /// Handles the Error event of the watcher control. /// @@ -497,7 +498,8 @@ namespace MediaBrowser.Server.Implementations.IO /// public void Stop() { - LibraryManager.LibraryChanged -= Instance_LibraryChanged; + LibraryManager.ItemAdded -= LibraryManager_ItemAdded; + LibraryManager.ItemRemoved -= LibraryManager_ItemRemoved; FileSystemWatcher watcher; diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index b78aa88f3f..045b49aefa 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -69,24 +69,20 @@ namespace MediaBrowser.Server.Implementations.Library /// The item repository. public IItemRepository ItemRepository { get; set; } - #region LibraryChanged Event /// - /// Fires whenever any validation routine adds or removes items. The added and removed items are properties of the args. - /// *** Will fire asynchronously. *** + /// Occurs when [item added]. /// - public event EventHandler LibraryChanged; + public event EventHandler ItemAdded; /// - /// Reports the library changed. + /// Occurs when [item updated]. /// - /// The instance containing the event data. - public void ReportLibraryChanged(ChildrenChangedEventArgs args) - { - UpdateLibraryCache(args); + public event EventHandler ItemUpdated; - EventHelper.FireEventIfNotNull(LibraryChanged, this, args, _logger); - } - #endregion + /// + /// Occurs when [item removed]. + /// + public event EventHandler ItemRemoved; /// /// The _logger @@ -302,25 +298,6 @@ namespace MediaBrowser.Server.Implementations.Library return new ConcurrentDictionary(items.ToDictionary(i => i.Id)); } - /// - /// Updates the library cache. - /// - /// The instance containing the event data. - private void UpdateLibraryCache(ChildrenChangedEventArgs args) - { - UpdateItemInLibraryCache(args.Folder); - - foreach (var item in args.ItemsAdded) - { - UpdateItemInLibraryCache(item); - } - - foreach (var item in args.ItemsUpdated) - { - UpdateItemInLibraryCache(item); - } - } - /// /// Updates the item in library cache. /// @@ -1069,13 +1046,61 @@ namespace MediaBrowser.Server.Implementations.Library return comparer; } + /// + /// Creates the item. + /// + /// The item. + /// The cancellation token. + /// Task. + public async Task CreateItem(BaseItem item, CancellationToken cancellationToken) + { + await SaveItem(item, cancellationToken).ConfigureAwait(false); + + UpdateItemInLibraryCache(item); + + if (ItemAdded != null) + { + ItemAdded(this, new ItemChangeEventArgs { Item = item }); + } + } + + /// + /// Updates the item. + /// + /// The item. + /// The cancellation token. + /// Task. + public async Task UpdateItem(BaseItem item, CancellationToken cancellationToken) + { + await SaveItem(item, cancellationToken).ConfigureAwait(false); + + UpdateItemInLibraryCache(item); + + if (ItemUpdated != null) + { + ItemUpdated(this, new ItemChangeEventArgs { Item = item }); + } + } + + /// + /// Reports the item removed. + /// + /// The item. + public void ReportItemRemoved(BaseItem item) + { + if (ItemRemoved != null) + { + ItemRemoved(this, new ItemChangeEventArgs { Item = item }); + } + } + /// /// Saves the item. /// /// The item. /// The cancellation token. /// Task. - public Task SaveItem(BaseItem item, CancellationToken cancellationToken) + private Task SaveItem(BaseItem item, CancellationToken cancellationToken) { return ItemRepository.SaveItem(item, cancellationToken); } diff --git a/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs index ef9662d0b7..891965f12f 100644 --- a/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs +++ b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs @@ -43,21 +43,21 @@ namespace MediaBrowser.Server.Implementations.Library //BaseItem.LibraryManager.LibraryChanged += LibraryChanged; } - public void LibraryChanged(object source, ChildrenChangedEventArgs changeInformation) - { - Task.Run(() => - { - if (changeInformation.ItemsAdded.Count + changeInformation.ItemsUpdated.Count > 0) - { - LuceneSearch.AddUpdateLuceneIndex(changeInformation.ItemsAdded.Concat(changeInformation.ItemsUpdated)); - } - - if (changeInformation.ItemsRemoved.Count > 0) - { - LuceneSearch.RemoveFromLuceneIndex(changeInformation.ItemsRemoved); - } - }); - } + //public void LibraryChanged(object source, ChildrenChangedEventArgs changeInformation) + //{ + // Task.Run(() => + // { + // if (changeInformation.ItemsAdded.Count + changeInformation.ItemsUpdated.Count > 0) + // { + // LuceneSearch.AddUpdateLuceneIndex(changeInformation.ItemsAdded.Concat(changeInformation.ItemsUpdated)); + // } + + // if (changeInformation.ItemsRemoved.Count > 0) + // { + // LuceneSearch.RemoveFromLuceneIndex(changeInformation.ItemsRemoved); + // } + // }); + //} public void AddItemsToIndex(IEnumerable items) { diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/AudioImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/AudioImagesTask.cs index 4d323ebd0d..2d10917d3a 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/AudioImagesTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/AudioImagesTask.cs @@ -150,7 +150,7 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks // Image is already in the cache item.PrimaryImagePath = path; - await _libraryManager.SaveItem(item, cancellationToken).ConfigureAwait(false); + await _libraryManager.UpdateItem(item, cancellationToken).ConfigureAwait(false); } } diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs index 74307b0d5a..c1f3173ee0 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs @@ -187,7 +187,7 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks // Image is already in the cache item.PrimaryImagePath = path; - await _libraryManager.SaveItem(item, cancellationToken).ConfigureAwait(false); + await _libraryManager.UpdateItem(item, cancellationToken).ConfigureAwait(false); } } -- cgit v1.2.3