aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/EntryPoints/Notifications/WebSocketNotifier.cs
blob: c5a93720c7a8b84b5525b560ad99b1a2603aaefc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Notifications;
using MediaBrowser.Controller.Plugins;
using System.Linq;

namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
{
    /// <summary>
    /// Notifies clients anytime a notification is added or udpated
    /// </summary>
    public class WebSocketNotifier : IServerEntryPoint
    {
        private readonly INotificationsRepository _notificationsRepo;

        private readonly IServerManager _serverManager;

        public WebSocketNotifier(INotificationsRepository notificationsRepo, IServerManager serverManager)
        {
            _notificationsRepo = notificationsRepo;
            _serverManager = serverManager;
        }

        public void Run()
        {
            _notificationsRepo.NotificationAdded += _notificationsRepo_NotificationAdded;
            _notificationsRepo.NotificationUpdated += _notificationsRepo_NotificationUpdated;

            _notificationsRepo.NotificationsMarkedRead += _notificationsRepo_NotificationsMarkedRead;
        }

        void _notificationsRepo_NotificationsMarkedRead(object sender, NotificationReadEventArgs e)
        {
            var list = e.IdList.Select(i => i.ToString("N")).ToList();

            list.Add(e.UserId.ToString("N"));
            list.Add(e.IsRead.ToString().ToLower());

            var msg = string.Join("|", list.ToArray());

            _serverManager.SendWebSocketMessage("NotificationsMarkedRead", msg);
        }

        void _notificationsRepo_NotificationUpdated(object sender, NotificationUpdateEventArgs e)
        {
            var msg = e.Notification.UserId + "|" + e.Notification.Id;

            _serverManager.SendWebSocketMessage("NotificationUpdated", msg);
        }

        void _notificationsRepo_NotificationAdded(object sender, NotificationUpdateEventArgs e)
        {
            var msg = e.Notification.UserId + "|" + e.Notification.Id;

            _serverManager.SendWebSocketMessage("NotificationAdded", msg);
        }

        public void Dispose()
        {
            _notificationsRepo.NotificationAdded -= _notificationsRepo_NotificationAdded;
            _notificationsRepo.NotificationUpdated -= _notificationsRepo_NotificationUpdated;
        }
    }
}