aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
diff options
context:
space:
mode:
authorstefan <stefan@hegedues.at>2018-09-12 19:26:21 +0200
committerstefan <stefan@hegedues.at>2018-09-12 19:26:21 +0200
commit48facb797ed912e4ea6b04b17d1ff190ac2daac4 (patch)
tree8dae77a31670a888d733484cb17dd4077d5444e8 /Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
parentc32d8656382a0eacb301692e0084377fc433ae9b (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.cs74
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);
}
}
}