aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/EntryPoints
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/EntryPoints')
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs47
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/WebSocketEvents.cs9
2 files changed, 30 insertions, 26 deletions
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs b/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
index 1306017ca..7a3081ab5 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Common.Net;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Plugins;
using MediaBrowser.Controller.Session;
@@ -21,7 +20,6 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
private readonly ILibraryManager _libraryManager;
private readonly ISessionManager _sessionManager;
- private readonly IServerManager _serverManager;
private readonly IUserManager _userManager;
private readonly ILogger _logger;
@@ -48,11 +46,10 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
/// </summary>
private const int LibraryUpdateDuration = 20000;
- public LibraryChangedNotifier(ILibraryManager libraryManager, ISessionManager sessionManager, IServerManager serverManager, IUserManager userManager, ILogger logger)
+ public LibraryChangedNotifier(ILibraryManager libraryManager, ISessionManager sessionManager, IUserManager userManager, ILogger logger)
{
_libraryManager = libraryManager;
_sessionManager = sessionManager;
- _serverManager = serverManager;
_userManager = userManager;
_logger = logger;
}
@@ -187,31 +184,33 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
/// <param name="foldersAddedTo">The folders added to.</param>
/// <param name="foldersRemovedFrom">The folders removed from.</param>
/// <param name="cancellationToken">The cancellation token.</param>
- private async void SendChangeNotifications(IEnumerable<BaseItem> itemsAdded, IEnumerable<BaseItem> itemsUpdated, IEnumerable<BaseItem> itemsRemoved, IEnumerable<Folder> foldersAddedTo, IEnumerable<Folder> foldersRemovedFrom, CancellationToken cancellationToken)
+ private async void SendChangeNotifications(List<BaseItem> itemsAdded, List<BaseItem> itemsUpdated, List<BaseItem> itemsRemoved, List<Folder> foldersAddedTo, List<Folder> foldersRemovedFrom, CancellationToken cancellationToken)
{
- var currentSessions = _sessionManager.Sessions.ToList();
-
- var users = currentSessions.Select(i => i.User)
- .Where(i => i != null)
- .Select(i => i.Id)
- .Distinct()
- .ToList();
-
- foreach (var userId in users)
+ foreach (var user in _userManager.Users.ToList())
{
- var id = userId;
- var webSockets = currentSessions.Where(u => u.User != null && u.User.Id == id)
- .SelectMany(i => i.WebSockets)
+ var id = user.Id;
+ var userSessions = _sessionManager.Sessions
+ .Where(u => u.User != null && u.User.Id == id && u.SessionController != null && u.IsActive)
.ToList();
- try
- {
- await _serverManager.SendWebSocketMessageAsync("LibraryChanged", () => GetLibraryUpdateInfo(itemsAdded, itemsUpdated, itemsRemoved, foldersAddedTo, foldersRemovedFrom, id), webSockets, cancellationToken).ConfigureAwait(false);
- }
- catch (Exception ex)
+ if (userSessions.Count > 0)
{
- _logger.ErrorException("Error sending LibraryChanged message", ex);
+ var info = GetLibraryUpdateInfo(itemsAdded, itemsUpdated, itemsRemoved, foldersAddedTo,
+ foldersRemovedFrom, id);
+
+ foreach (var userSession in userSessions)
+ {
+ try
+ {
+ await userSession.SessionController.SendLibraryUpdateInfo(info, cancellationToken).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error sending LibraryChanged message", ex);
+ }
+ }
}
+
}
}
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/WebSocketEvents.cs b/MediaBrowser.Server.Implementations/EntryPoints/WebSocketEvents.cs
index 29372a40a..4349b6976 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/WebSocketEvents.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/WebSocketEvents.cs
@@ -8,8 +8,10 @@ using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Plugins;
+using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Tasks;
using System;
+using System.Threading;
namespace MediaBrowser.Server.Implementations.EntryPoints
{
@@ -45,13 +47,15 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
private readonly IDtoService _dtoService;
+ private ISessionManager _sessionManager;
+
/// <summary>
/// Initializes a new instance of the <see cref="WebSocketEvents" /> class.
/// </summary>
/// <param name="serverManager">The server manager.</param>
/// <param name="logger">The logger.</param>
/// <param name="userManager">The user manager.</param>
- public WebSocketEvents(IServerManager serverManager, IServerApplicationHost appHost, IUserManager userManager, IInstallationManager installationManager, ITaskManager taskManager, IDtoService dtoService)
+ public WebSocketEvents(IServerManager serverManager, IServerApplicationHost appHost, IUserManager userManager, IInstallationManager installationManager, ITaskManager taskManager, IDtoService dtoService, ISessionManager sessionManager)
{
_serverManager = serverManager;
_userManager = userManager;
@@ -59,6 +63,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
_appHost = appHost;
_taskManager = taskManager;
_dtoService = dtoService;
+ _sessionManager = sessionManager;
}
public void Run()
@@ -126,7 +131,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
void kernel_HasPendingRestartChanged(object sender, EventArgs e)
{
- _serverManager.SendWebSocketMessage("RestartRequired", _appHost.GetSystemInfo());
+ _sessionManager.SendRestartRequiredMessage(CancellationToken.None);
}
/// <summary>