12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using MediaBrowser.Controller.Entities;
- using MediaBrowser.Controller.Library;
- using MediaBrowser.Controller.Notifications;
- using MediaBrowser.Model.Logging;
- using MediaBrowser.Model.Notifications;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- using System.Threading.Tasks;
- namespace MediaBrowser.Server.Implementations.Notifications
- {
- public class NotificationManager : INotificationManager
- {
- private readonly ILogger _logger;
- private readonly IUserManager _userManager;
- private INotificationService[] _services;
- public NotificationManager(ILogManager logManager, IUserManager userManager)
- {
- _userManager = userManager;
- _logger = logManager.GetLogger(GetType().Name);
- }
- public Task SendNotification(NotificationRequest request, CancellationToken cancellationToken)
- {
- var users = request.UserIds.Select(i => _userManager.GetUserById(new Guid(i)));
- var tasks = _services.Select(i => SendNotification(request, i, users, cancellationToken));
- return Task.WhenAll(tasks);
- }
- public Task SendNotification(NotificationRequest request,
- INotificationService service,
- IEnumerable<User> users,
- CancellationToken cancellationToken)
- {
- users = users.Where(i => IsEnabledForUser(service, i))
- .ToList();
- var tasks = users.Select(i => SendNotification(request, service, i, cancellationToken));
- return Task.WhenAll(tasks);
- }
- public async Task SendNotification(NotificationRequest request,
- INotificationService service,
- User user,
- CancellationToken cancellationToken)
- {
- var notification = new UserNotification
- {
- Date = request.Date,
- Description = request.Description,
- Level = request.Level,
- Name = request.Name,
- Url = request.Url,
- User = user
- };
- _logger.Debug("Sending notification via {0} to user {1}", service.Name, user.Name);
-
- try
- {
- await service.SendNotification(notification, cancellationToken).ConfigureAwait(false);
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error sending notification to {0}", ex, service.Name);
- }
- }
- private bool IsEnabledForUser(INotificationService service, User user)
- {
- try
- {
- return service.IsEnabledForUser(user);
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error in IsEnabledForUser", ex);
- return false;
- }
- }
- public void AddParts(IEnumerable<INotificationService> services)
- {
- _services = services.ToArray();
- }
- }
- }
|