aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.ServerApplication/EntryPoints
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-05-03 00:10:11 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-05-03 00:10:11 -0400
commit6481688d2acc23b789dab6e8ad04a96e48c46064 (patch)
treeddc3fcb30fcc9187563e9cb297e9ae938f0581c0 /MediaBrowser.ServerApplication/EntryPoints
parentb79840e20f068f087d845e4abf1e817d211a1783 (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.cs135
-rw-r--r--MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs95
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;