diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-03 00:10:11 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-03 00:10:11 -0400 |
| commit | 6481688d2acc23b789dab6e8ad04a96e48c46064 (patch) | |
| tree | ddc3fcb30fcc9187563e9cb297e9ae938f0581c0 /MediaBrowser.ServerApplication/EntryPoints | |
| parent | b79840e20f068f087d845e4abf1e817d211a1783 (diff) | |
fixes #223 - New Content Localhost Popups Repeat 'Old' 'New Content' on Media Changes
Diffstat (limited to 'MediaBrowser.ServerApplication/EntryPoints')
| -rw-r--r-- | MediaBrowser.ServerApplication/EntryPoints/NewItemNotifier.cs | 135 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs | 95 |
2 files changed, 83 insertions, 147 deletions
diff --git a/MediaBrowser.ServerApplication/EntryPoints/NewItemNotifier.cs b/MediaBrowser.ServerApplication/EntryPoints/NewItemNotifier.cs deleted file mode 100644 index da39520c9a..0000000000 --- a/MediaBrowser.ServerApplication/EntryPoints/NewItemNotifier.cs +++ /dev/null @@ -1,135 +0,0 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Plugins; -using MediaBrowser.Model.Logging; -using MediaBrowser.ServerApplication.Controls; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Windows; -using System.Windows.Controls.Primitives; - -namespace MediaBrowser.ServerApplication.EntryPoints -{ - /// <summary> - /// Class NewItemNotifier - /// </summary> - public class NewItemNotifier - { - /// <summary> - /// Holds the list of new items to display when the NewItemTimer expires - /// </summary> - private readonly List<BaseItem> _newlyAddedItems = new List<BaseItem>(); - - /// <summary> - /// The amount of time to wait before showing a new item notification - /// This allows us to group items together into one notification - /// </summary> - private const int NewItemDelay = 60000; - - /// <summary> - /// The current new item timer - /// </summary> - /// <value>The new item timer.</value> - private Timer NewItemTimer { get; set; } - - /// <summary> - /// The _library manager - /// </summary> - private readonly ILibraryManager _libraryManager; - - /// <summary> - /// The _logger - /// </summary> - private readonly ILogger _logger; - - /// <summary> - /// Initializes a new instance of the <see cref="NewItemNotifier" /> class. - /// </summary> - /// <param name="libraryManager">The library manager.</param> - /// <param name="logManager">The log manager.</param> - public NewItemNotifier(ILibraryManager libraryManager, ILogManager logManager) - { - _logger = logManager.GetLogger("NewItemNotifier"); - _libraryManager = libraryManager; - } - - /// <summary> - /// Runs this instance. - /// </summary> - public void Run() - { - _libraryManager.LibraryChanged += libraryManager_LibraryChanged; - } - - /// <summary> - /// Handles the LibraryChanged event of the libraryManager control. - /// </summary> - /// <param name="sender">The source of the event.</param> - /// <param name="e">The <see cref="ChildrenChangedEventArgs" /> instance containing the event data.</param> - void libraryManager_LibraryChanged(object sender, ChildrenChangedEventArgs e) - { - var newItems = e.ItemsAdded.Where(i => !i.IsFolder).ToList(); - - // Use a timer to prevent lots of these notifications from showing in a short period of time - if (newItems.Count > 0) - { - lock (_newlyAddedItems) - { - _newlyAddedItems.AddRange(newItems); - - if (NewItemTimer == null) - { - NewItemTimer = new Timer(NewItemTimerCallback, null, NewItemDelay, Timeout.Infinite); - } - else - { - NewItemTimer.Change(NewItemDelay, Timeout.Infinite); - } - } - } - } - - /// <summary> - /// Called when the new item timer expires - /// </summary> - /// <param name="state">The state.</param> - private void NewItemTimerCallback(object state) - { - List<BaseItem> newItems; - - // Lock the list and release all resources - lock (_newlyAddedItems) - { - newItems = _newlyAddedItems.ToList(); - _newlyAddedItems.Clear(); - - NewItemTimer.Dispose(); - NewItemTimer = null; - } - - // Show the notification - if (newItems.Count > 0) - { - Application.Current.Dispatcher.InvokeAsync(() => - { - var window = Application.Current.Windows.OfType<MainWindow>().First(); - - window.Dispatcher.InvokeAsync(() => window.MbTaskbarIcon.ShowCustomBalloon(new ItemUpdateNotification(_logger) - { - DataContext = newItems[0] - - }, PopupAnimation.Slide, 6000)); - }); - } - } - - /// <summary> - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// </summary> - public void Dispose() - { - _libraryManager.LibraryChanged -= libraryManager_LibraryChanged; - } - } -} diff --git a/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs b/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs index a6d505d198..e80c5cc1c9 100644 --- a/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs +++ b/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs @@ -101,10 +101,12 @@ namespace MediaBrowser.ServerApplication.EntryPoints _userManager.UserDeleted += userManager_UserDeleted; _userManager.UserUpdated += userManager_UserUpdated; - _libraryManager.LibraryChanged += libraryManager_LibraryChanged; - _appHost.HasPendingRestartChanged += kernel_HasPendingRestartChanged; + _libraryManager.ItemAdded += libraryManager_ItemAdded; + _libraryManager.ItemUpdated += libraryManager_ItemUpdated; + _libraryManager.ItemRemoved += libraryManager_ItemRemoved; + _installationManager.PluginUninstalled += InstallationManager_PluginUninstalled; _installationManager.PackageInstalling += installationManager_PackageInstalling; _installationManager.PackageInstallationCancelled += installationManager_PackageInstallationCancelled; @@ -122,7 +124,7 @@ namespace MediaBrowser.ServerApplication.EntryPoints void _taskManager_TaskExecuting(object sender, EventArgs e) { - var task = (IScheduledTask) sender; + var task = (IScheduledTask)sender; _serverManager.SendWebSocketMessage("ScheduledTaskStarted", task.Name); } @@ -167,11 +169,77 @@ namespace MediaBrowser.ServerApplication.EntryPoints } /// <summary> - /// Handles the LibraryChanged event of the libraryManager control. + /// Handles the ItemAdded event of the libraryManager control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param> + void libraryManager_ItemAdded(object sender, ItemChangeEventArgs e) + { + lock (_libraryChangedSyncLock) + { + if (LibraryUpdateInfo == null) + { + LibraryUpdateInfo = new LibraryUpdateInfo(); + } + + if (LibraryUpdateTimer == null) + { + LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, + Timeout.Infinite); + } + else + { + LibraryUpdateTimer.Change(LibraryUpdateDuration, Timeout.Infinite); + } + + if (e.Item.Parent != null) + { + LibraryUpdateInfo.Folders.Add(e.Item.Parent.Id); + } + + LibraryUpdateInfo.ItemsAdded.Add(e.Item.Id); + } + } + + /// <summary> + /// Handles the ItemUpdated event of the libraryManager control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param> + void libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e) + { + lock (_libraryChangedSyncLock) + { + if (LibraryUpdateInfo == null) + { + LibraryUpdateInfo = new LibraryUpdateInfo(); + } + + if (LibraryUpdateTimer == null) + { + LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, + Timeout.Infinite); + } + else + { + LibraryUpdateTimer.Change(LibraryUpdateDuration, Timeout.Infinite); + } + + if (e.Item.Parent != null) + { + LibraryUpdateInfo.Folders.Add(e.Item.Parent.Id); + } + + LibraryUpdateInfo.ItemsUpdated.Add(e.Item.Id); + } + } + + /// <summary> + /// Handles the ItemRemoved event of the libraryManager control. /// </summary> /// <param name="sender">The source of the event.</param> - /// <param name="e">The <see cref="ChildrenChangedEventArgs" /> instance containing the event data.</param> - void libraryManager_LibraryChanged(object sender, ChildrenChangedEventArgs e) + /// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param> + void libraryManager_ItemRemoved(object sender, ItemChangeEventArgs e) { lock (_libraryChangedSyncLock) { @@ -190,11 +258,12 @@ namespace MediaBrowser.ServerApplication.EntryPoints LibraryUpdateTimer.Change(LibraryUpdateDuration, Timeout.Infinite); } - LibraryUpdateInfo.Folders.Add(e.Folder.Id); + if (e.Item.Parent != null) + { + LibraryUpdateInfo.Folders.Add(e.Item.Parent.Id); + } - LibraryUpdateInfo.ItemsAdded.AddRange(e.ItemsAdded.Select(i => i.Id)); - LibraryUpdateInfo.ItemsUpdated.AddRange(e.ItemsUpdated.Select(i => i.Id)); - LibraryUpdateInfo.ItemsRemoved.AddRange(e.ItemsRemoved.Select(i => i.Id)); + LibraryUpdateInfo.ItemsRemoved.Add(e.Item.Id); } } @@ -281,12 +350,14 @@ namespace MediaBrowser.ServerApplication.EntryPoints LibraryUpdateTimer.Dispose(); LibraryUpdateTimer = null; } + + _libraryManager.ItemAdded -= libraryManager_ItemAdded; + _libraryManager.ItemUpdated -= libraryManager_ItemUpdated; + _libraryManager.ItemRemoved -= libraryManager_ItemRemoved; _userManager.UserDeleted -= userManager_UserDeleted; _userManager.UserUpdated -= userManager_UserUpdated; - _libraryManager.LibraryChanged -= libraryManager_LibraryChanged; - _installationManager.PluginUninstalled -= InstallationManager_PluginUninstalled; _installationManager.PackageInstalling -= installationManager_PackageInstalling; _installationManager.PackageInstallationCancelled -= installationManager_PackageInstallationCancelled; |
