diff options
| author | stefan <stefan@hegedues.at> | 2018-09-12 19:26:21 +0200 |
|---|---|---|
| committer | stefan <stefan@hegedues.at> | 2018-09-12 19:26:21 +0200 |
| commit | 48facb797ed912e4ea6b04b17d1ff190ac2daac4 (patch) | |
| tree | 8dae77a31670a888d733484cb17dd4077d5444e8 /Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs | |
| parent | c32d8656382a0eacb301692e0084377fc433ae9b (diff) | |
Update to 3.5.2 and .net core 2.1
Diffstat (limited to 'Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs')
| -rw-r--r-- | Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs | 74 |
1 files changed, 32 insertions, 42 deletions
diff --git a/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs b/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs index 13c72bf3c..36e29e46a 100644 --- a/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs +++ b/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs @@ -27,7 +27,7 @@ namespace Emby.Server.Implementations.EntryPoints private readonly ITimerFactory _timerFactory; private const int UpdateDuration = 500; - private readonly Dictionary<Guid, List<IHasUserData>> _changedItems = new Dictionary<Guid, List<IHasUserData>>(); + private readonly Dictionary<Guid, List<BaseItem>> _changedItems = new Dictionary<Guid, List<BaseItem>>(); public UserDataChangeNotifier(IUserDataManager userDataManager, ISessionManager sessionManager, ILogger logger, IUserManager userManager, ITimerFactory timerFactory) { @@ -62,22 +62,22 @@ namespace Emby.Server.Implementations.EntryPoints UpdateTimer.Change(UpdateDuration, Timeout.Infinite); } - List<IHasUserData> keys; + List<BaseItem> keys; if (!_changedItems.TryGetValue(e.UserId, out keys)) { - keys = new List<IHasUserData>(); + keys = new List<BaseItem>(); _changedItems[e.UserId] = keys; } keys.Add(e.Item); - var baseItem = e.Item as BaseItem; + var baseItem = e.Item; // Go up one level for indicators if (baseItem != null) { - var parent = baseItem.IsOwnedItem ? baseItem.GetOwner() : baseItem.GetParent(); + var parent = baseItem.GetOwner() ?? baseItem.GetParent(); if (parent != null) { @@ -105,50 +105,41 @@ namespace Emby.Server.Implementations.EntryPoints } } - private async Task SendNotifications(IEnumerable<KeyValuePair<Guid, List<IHasUserData>>> changes, CancellationToken cancellationToken) + private async Task SendNotifications(List<KeyValuePair<Guid, List<BaseItem>>> changes, CancellationToken cancellationToken) { foreach (var pair in changes) { - var userId = pair.Key; - var userSessions = _sessionManager.Sessions - .Where(u => u.ContainsUser(userId) && u.SessionController != null && u.IsActive) - .ToList(); + await SendNotifications(pair.Key, pair.Value, cancellationToken).ConfigureAwait(false); + } + } + + private Task SendNotifications(Guid userId, List<BaseItem> changedItems, CancellationToken cancellationToken) + { + return _sessionManager.SendMessageToUserSessions(new List<Guid> { userId }, "UserDataChanged", () => GetUserDataChangeInfo(userId, changedItems), cancellationToken); + } + + private UserDataChangeInfo GetUserDataChangeInfo(Guid userId, List<BaseItem> changedItems) + { + var user = _userManager.GetUserById(userId); - if (userSessions.Count > 0) + var dtoList = changedItems + .DistinctBy(i => i.Id) + .Select(i => { - var user = _userManager.GetUserById(userId); - - var dtoList = pair.Value - .DistinctBy(i => i.Id) - .Select(i => - { - var dto = _userDataManager.GetUserDataDto(i, user); - dto.ItemId = i.Id.ToString("N"); - return dto; - }) - .ToArray(); - - var info = new UserDataChangeInfo - { - UserId = userId.ToString("N"), + var dto = _userDataManager.GetUserDataDto(i, user); + dto.ItemId = i.Id.ToString("N"); + return dto; + }) + .ToArray(); - UserDataList = dtoList - }; + var userIdString = userId.ToString("N"); - foreach (var userSession in userSessions) - { - try - { - await userSession.SessionController.SendUserDataChangeInfo(info, cancellationToken).ConfigureAwait(false); - } - catch (Exception ex) - { - _logger.ErrorException("Error sending UserDataChanged message", ex); - } - } - } + return new UserDataChangeInfo + { + UserId = userIdString, - } + UserDataList = dtoList + }; } public void Dispose() @@ -160,7 +151,6 @@ namespace Emby.Server.Implementations.EntryPoints } _userDataManager.UserDataSaved -= _userDataManager_UserDataSaved; - GC.SuppressFinalize(this); } } } |
