aboutsummaryrefslogtreecommitdiff
path: root/Emby.Notifications/NotificationManager.cs
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2023-02-15 22:40:07 +0100
committerShadowghost <Ghost_of_Stone@web.de>2023-02-15 22:40:07 +0100
commit3a91c37283eb633e7e55df78b8017a5a492923b6 (patch)
tree4e22db9a5234c63370195992a28c64891d7a6cc1 /Emby.Notifications/NotificationManager.cs
parent4eba16c6726564b159e395e188ec89f69d990e52 (diff)
parent3fe64f69b747f39a6505e4fad1bbd6eaf63cecc4 (diff)
Merge branch 'master' into network-rewrite
Diffstat (limited to 'Emby.Notifications/NotificationManager.cs')
-rw-r--r--Emby.Notifications/NotificationManager.cs224
1 files changed, 0 insertions, 224 deletions
diff --git a/Emby.Notifications/NotificationManager.cs b/Emby.Notifications/NotificationManager.cs
deleted file mode 100644
index a5a76b2af..000000000
--- a/Emby.Notifications/NotificationManager.cs
+++ /dev/null
@@ -1,224 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using Jellyfin.Data.Entities;
-using Jellyfin.Data.Enums;
-using MediaBrowser.Common.Configuration;
-using MediaBrowser.Common.Extensions;
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Notifications;
-using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.Notifications;
-using Microsoft.Extensions.Logging;
-
-namespace Emby.Notifications
-{
- /// <summary>
- /// NotificationManager class.
- /// </summary>
- public class NotificationManager : INotificationManager
- {
- private readonly ILogger<NotificationManager> _logger;
- private readonly IUserManager _userManager;
- private readonly IServerConfigurationManager _config;
-
- private INotificationService[] _services = Array.Empty<INotificationService>();
- private INotificationTypeFactory[] _typeFactories = Array.Empty<INotificationTypeFactory>();
-
- /// <summary>
- /// Initializes a new instance of the <see cref="NotificationManager" /> class.
- /// </summary>
- /// <param name="logger">The logger.</param>
- /// <param name="userManager">The user manager.</param>
- /// <param name="config">The server configuration manager.</param>
- public NotificationManager(
- ILogger<NotificationManager> logger,
- IUserManager userManager,
- IServerConfigurationManager config)
- {
- _logger = logger;
- _userManager = userManager;
- _config = config;
- }
-
- private NotificationOptions GetConfiguration()
- {
- return _config.GetConfiguration<NotificationOptions>("notifications");
- }
-
- /// <inheritdoc />
- public Task SendNotification(NotificationRequest request, CancellationToken cancellationToken)
- {
- return SendNotification(request, null, cancellationToken);
- }
-
- /// <inheritdoc />
- public Task SendNotification(NotificationRequest request, BaseItem? relatedItem, CancellationToken cancellationToken)
- {
- var notificationType = request.NotificationType;
-
- var options = string.IsNullOrEmpty(notificationType) ?
- null :
- GetConfiguration().GetOptions(notificationType);
-
- var users = GetUserIds(request, options)
- .Select(i => _userManager.GetUserById(i))
- .Where(i => relatedItem is null || relatedItem.IsVisibleStandalone(i))
- .ToArray();
-
- var title = request.Name;
- var description = request.Description;
-
- var tasks = _services.Where(i => IsEnabled(i, notificationType))
- .Select(i => SendNotification(request, i, users, title, description, cancellationToken));
-
- return Task.WhenAll(tasks);
- }
-
- private Task SendNotification(
- NotificationRequest request,
- INotificationService service,
- IEnumerable<User> users,
- string title,
- string description,
- CancellationToken cancellationToken)
- {
- users = users.Where(i => IsEnabledForUser(service, i));
-
- var tasks = users.Select(i => SendNotification(request, service, title, description, i, cancellationToken));
-
- return Task.WhenAll(tasks);
- }
-
- private IEnumerable<Guid> GetUserIds(NotificationRequest request, NotificationOption? options)
- {
- if (request.SendToUserMode.HasValue)
- {
- switch (request.SendToUserMode.Value)
- {
- case SendToUserType.Admins:
- return _userManager.Users.Where(i => i.HasPermission(PermissionKind.IsAdministrator))
- .Select(i => i.Id);
- case SendToUserType.All:
- return _userManager.UsersIds;
- case SendToUserType.Custom:
- return request.UserIds;
- default:
- throw new ArgumentException("Unrecognized SendToUserMode: " + request.SendToUserMode.Value);
- }
- }
-
- if (options is not null && !string.IsNullOrEmpty(request.NotificationType))
- {
- var config = GetConfiguration();
-
- return _userManager.Users
- .Where(i => config.IsEnabledToSendToUser(request.NotificationType, i.Id.ToString("N", CultureInfo.InvariantCulture), i))
- .Select(i => i.Id);
- }
-
- return request.UserIds;
- }
-
- private async Task SendNotification(
- NotificationRequest request,
- INotificationService service,
- string title,
- string description,
- User user,
- CancellationToken cancellationToken)
- {
- var notification = new UserNotification
- {
- Date = request.Date,
- Description = description,
- Level = request.Level,
- Name = title,
- Url = request.Url,
- User = user
- };
-
- _logger.LogDebug("Sending notification via {0} to user {1}", service.Name, user.Username);
-
- try
- {
- await service.SendNotification(notification, cancellationToken).ConfigureAwait(false);
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Error sending notification to {0}", service.Name);
- }
- }
-
- private bool IsEnabledForUser(INotificationService service, User user)
- {
- try
- {
- return service.IsEnabledForUser(user);
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Error in IsEnabledForUser");
- return false;
- }
- }
-
- private bool IsEnabled(INotificationService service, string notificationType)
- {
- if (string.IsNullOrEmpty(notificationType))
- {
- return true;
- }
-
- return GetConfiguration().IsServiceEnabled(service.Name, notificationType);
- }
-
- /// <inheritdoc />
- public void AddParts(IEnumerable<INotificationService> services, IEnumerable<INotificationTypeFactory> notificationTypeFactories)
- {
- _services = services.ToArray();
- _typeFactories = notificationTypeFactories.ToArray();
- }
-
- /// <inheritdoc />
- public List<NotificationTypeInfo> GetNotificationTypes()
- {
- var list = _typeFactories.Select(i =>
- {
- try
- {
- return i.GetNotificationTypes().ToList();
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Error in GetNotificationTypes");
- return new List<NotificationTypeInfo>();
- }
- }).SelectMany(i => i).ToList();
-
- var config = GetConfiguration();
-
- foreach (var i in list)
- {
- i.Enabled = config.IsEnabled(i.Type);
- }
-
- return list;
- }
-
- /// <inheritdoc />
- public IEnumerable<NameIdPair> GetNotificationServices()
- {
- return _services.Select(i => new NameIdPair
- {
- Name = i.Name,
- Id = i.Name.GetMD5().ToString("N", CultureInfo.InvariantCulture)
- }).OrderBy(i => i.Name);
- }
- }
-}