diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Dto/DtoService.cs | 38 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs | 172 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs | 32 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/EntryPoints/Notifications/WebSocketNotifier.cs | 4 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj | 4 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Notifications/InternalNotificationService.cs | 42 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs | 94 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Notifications/SqliteNotificationsRepository.cs (renamed from MediaBrowser.Server.Implementations/Persistence/SqliteNotificationsRepository.cs) | 57 |
9 files changed, 267 insertions, 178 deletions
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index ee6bbb04f..480cb39db 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -556,44 +556,6 @@ namespace MediaBrowser.Server.Implementations.Dto return dto; } - - /// <summary> - /// Gets a BaseItem based upon it's client-side item id - /// </summary> - /// <param name="id">The id.</param> - /// <param name="userId">The user id.</param> - /// <returns>BaseItem.</returns> - public BaseItem GetItemByDtoId(string id, Guid? userId = null) - { - if (string.IsNullOrEmpty(id)) - { - throw new ArgumentNullException("id"); - } - - BaseItem item = null; - - if (userId.HasValue) - { - item = _libraryManager.GetItemById(new Guid(id)); - } - - // If we still don't find it, look within individual user views - if (item == null && !userId.HasValue) - { - foreach (var user in _userManager.Users) - { - item = GetItemByDtoId(id, user.Id); - - if (item != null) - { - break; - } - } - } - - return item; - } - /// <summary> /// Sets simple property values on a DTOBaseItem /// </summary> diff --git a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs index fcb4406ab..2a3668dfa 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs @@ -20,20 +20,20 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications /// </summary> public class Notifications : IServerEntryPoint { - private readonly INotificationsRepository _notificationsRepo; private readonly IInstallationManager _installationManager; private readonly IUserManager _userManager; private readonly ILogger _logger; private readonly ITaskManager _taskManager; + private readonly INotificationManager _notificationManager; - public Notifications(IInstallationManager installationManager, INotificationsRepository notificationsRepo, IUserManager userManager, ILogger logger, ITaskManager taskManager) + public Notifications(IInstallationManager installationManager, IUserManager userManager, ILogger logger, ITaskManager taskManager, INotificationManager notificationManager) { _installationManager = installationManager; - _notificationsRepo = notificationsRepo; _userManager = userManager; _logger = logger; _taskManager = taskManager; + _notificationManager = notificationManager; } public void Run() @@ -49,21 +49,25 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications async void _userManager_UserCreated(object sender, GenericEventArgs<User> e) { - var notification = new Notification + var userIds = _userManager + .Users + .Select(i => i.Id.ToString("N")) + .ToList(); + + var notification = new NotificationRequest { - UserId = e.Argument.Id, - Category = "UserCreated", + UserIds = userIds, Name = "Welcome to Media Browser!", Description = "Check back here for more notifications." }; try { - await _notificationsRepo.AddNotification(notification, CancellationToken.None).ConfigureAwait(false); + await _notificationManager.SendNotification(notification, CancellationToken.None).ConfigureAwait(false); } catch (Exception ex) { - _logger.ErrorException("Error adding notification", ex); + _logger.ErrorException("Error sending notification", ex); } } @@ -73,29 +77,27 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications if (result.Status == TaskCompletionStatus.Failed) { - foreach (var user in _userManager - .Users - .Where(i => i.Configuration.IsAdministrator) - .ToList()) + var userIds = _userManager + .Users + .Where(i => i.Configuration.IsAdministrator) + .Select(i => i.Id.ToString("N")) + .ToList(); + + var notification = new NotificationRequest + { + UserIds = userIds, + Name = result.Name + " failed", + Description = result.ErrorMessage, + Level = NotificationLevel.Error + }; + + try { - var notification = new Notification - { - UserId = user.Id, - Category = "ScheduledTaskFailed", - Name = result.Name + " failed", - RelatedId = result.Name, - Description = result.ErrorMessage, - Level = NotificationLevel.Error - }; - - try - { - await _notificationsRepo.AddNotification(notification, CancellationToken.None).ConfigureAwait(false); - } - catch (Exception ex) - { - _logger.ErrorException("Error adding notification", ex); - } + await _notificationManager.SendNotification(notification, CancellationToken.None).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorException("Error sending notification", ex); } } } @@ -104,27 +106,25 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications { var plugin = e.Argument; - foreach (var user in _userManager - .Users - .Where(i => i.Configuration.IsAdministrator) - .ToList()) + var userIds = _userManager + .Users + .Where(i => i.Configuration.IsAdministrator) + .Select(i => i.Id.ToString("N")) + .ToList(); + + var notification = new NotificationRequest { - var notification = new Notification - { - UserId = user.Id, - Category = "PluginUninstalled", - Name = plugin.Name + " has been uninstalled", - RelatedId = plugin.Id.ToString() - }; + UserIds = userIds, + Name = plugin.Name + " has been uninstalled" + }; - try - { - await _notificationsRepo.AddNotification(notification, CancellationToken.None).ConfigureAwait(false); - } - catch (Exception ex) - { - _logger.ErrorException("Error adding notification", ex); - } + try + { + await _notificationManager.SendNotification(notification, CancellationToken.None).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorException("Error sending notification", ex); } } @@ -132,28 +132,26 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications { var installationInfo = e.InstallationInfo; - foreach (var user in _userManager - .Users - .Where(i => i.Configuration.IsAdministrator) - .ToList()) + var userIds = _userManager + .Users + .Where(i => i.Configuration.IsAdministrator) + .Select(i => i.Id.ToString("N")) + .ToList(); + + var notification = new NotificationRequest { - var notification = new Notification - { - UserId = user.Id, - Category = "PackageInstallationCompleted", - Name = installationInfo.Name + " " + installationInfo.Version + " was installed", - RelatedId = installationInfo.Name, - Description = e.PackageVersionInfo.description - }; + UserIds = userIds, + Name = installationInfo.Name + " " + installationInfo.Version + " was installed", + Description = e.PackageVersionInfo.description + }; - try - { - await _notificationsRepo.AddNotification(notification, CancellationToken.None).ConfigureAwait(false); - } - catch (Exception ex) - { - _logger.ErrorException("Error adding notification", ex); - } + try + { + await _notificationManager.SendNotification(notification, CancellationToken.None).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorException("Error sending notification", ex); } } @@ -161,29 +159,27 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications { var installationInfo = e.InstallationInfo; - foreach (var user in _userManager + var userIds = _userManager .Users .Where(i => i.Configuration.IsAdministrator) - .ToList()) + .Select(i => i.Id.ToString("N")) + .ToList(); + + var notification = new NotificationRequest { - var notification = new Notification - { - UserId = user.Id, - Category = "PackageInstallationFailed", - Level = NotificationLevel.Error, - Name = installationInfo.Name + " " + installationInfo.Version + " installation failed", - RelatedId = installationInfo.Name, - Description = e.Exception.Message - }; + UserIds = userIds, + Level = NotificationLevel.Error, + Name = installationInfo.Name + " " + installationInfo.Version + " installation failed", + Description = e.Exception.Message + }; - try - { - await _notificationsRepo.AddNotification(notification, CancellationToken.None).ConfigureAwait(false); - } - catch (Exception ex) - { - _logger.ErrorException("Error adding notification", ex); - } + try + { + await _notificationManager.SendNotification(notification, CancellationToken.None).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorException("Error sending notification", ex); } } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs index 723e4fdd3..d5b7f5b36 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/RemoteNotifications.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; -using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Notifications; using MediaBrowser.Controller.Plugins; @@ -26,22 +25,23 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications private readonly IApplicationPaths _appPaths; private readonly ILogger _logger; private readonly IJsonSerializer _json; - private readonly INotificationsRepository _notificationsRepo; private readonly IUserManager _userManager; private readonly IFileSystem _fileSystem; private readonly TimeSpan _frequency = TimeSpan.FromHours(6); private readonly TimeSpan _maxAge = TimeSpan.FromDays(31); - public RemoteNotifications(IApplicationPaths appPaths, ILogger logger, IHttpClient httpClient, IJsonSerializer json, INotificationsRepository notificationsRepo, IUserManager userManager, IFileSystem fileSystem) + private readonly INotificationManager _notificationManager; + + public RemoteNotifications(IApplicationPaths appPaths, ILogger logger, IHttpClient httpClient, IJsonSerializer json, IUserManager userManager, IFileSystem fileSystem, INotificationManager notificationManager) { _appPaths = appPaths; _logger = logger; _httpClient = httpClient; _json = json; - _notificationsRepo = notificationsRepo; _userManager = userManager; _fileSystem = fileSystem; + _notificationManager = notificationManager; } /// <summary> @@ -107,21 +107,19 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications .Where(i => string.Equals(i.active, "1") && i.date.ToUniversalTime() > lastRunTime && (DateTime.UtcNow - i.date.ToUniversalTime()) <= _maxAge) .ToList(); - foreach (var user in _userManager.Users.ToList()) + var userIds = _userManager.Users.Select(i => i.Id.ToString("N")).ToList(); + + foreach (var notification in notificationList) { - foreach (var notification in notificationList) + await _notificationManager.SendNotification(new NotificationRequest { - await _notificationsRepo.AddNotification(new Notification - { - Category = notification.category, - Date = notification.date, - Name = notification.name, - Description = notification.description, - Url = notification.url, - UserId = user.Id - - }, CancellationToken.None).ConfigureAwait(false); - } + Date = notification.date, + Name = notification.name, + Description = notification.description, + Url = notification.url, + UserIds = userIds + + }, CancellationToken.None).ConfigureAwait(false); } } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/WebSocketNotifier.cs b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/WebSocketNotifier.cs index c5a93720c..42aadf62e 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/WebSocketNotifier.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/WebSocketNotifier.cs @@ -30,9 +30,9 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications void _notificationsRepo_NotificationsMarkedRead(object sender, NotificationReadEventArgs e) { - var list = e.IdList.Select(i => i.ToString("N")).ToList(); + var list = e.IdList.ToList(); - list.Add(e.UserId.ToString("N")); + list.Add(e.UserId); list.Add(e.IsRead.ToString().ToLower()); var msg = string.Join("|", list.ToArray()); diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs index ac1927931..28d476971 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs @@ -117,7 +117,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio /// </summary> /// <param name="list">The list.</param> /// <returns><c>true</c> if the specified list contains music; otherwise, <c>false</c>.</returns> - public static bool ContainsMusic(IEnumerable<FileSystemInfo> list) + private static bool ContainsMusic(IEnumerable<FileSystemInfo> list) { // If list contains at least 2 audio files or at least one and no video files consider it to contain music var foundAudio = 0; diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 505325812..7d6ddbb6e 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -185,11 +185,13 @@ <Compile Include="MediaEncoder\EncodingManager.cs" /> <Compile Include="News\NewsEntryPoint.cs" /> <Compile Include="News\NewsService.cs" /> + <Compile Include="Notifications\InternalNotificationService.cs" /> + <Compile Include="Notifications\NotificationManager.cs" /> <Compile Include="Persistence\SqliteChapterRepository.cs" /> <Compile Include="Persistence\SqliteExtensions.cs" /> <Compile Include="Persistence\SqliteFileOrganizationRepository.cs" /> <Compile Include="Persistence\SqliteMediaStreamsRepository.cs" /> - <Compile Include="Persistence\SqliteNotificationsRepository.cs" /> + <Compile Include="Notifications\SqliteNotificationsRepository.cs" /> <Compile Include="Persistence\SqliteProviderInfoRepository.cs" /> <Compile Include="Persistence\SqliteShrinkMemoryTimer.cs" /> <Compile Include="Persistence\TypeMapper.cs" /> diff --git a/MediaBrowser.Server.Implementations/Notifications/InternalNotificationService.cs b/MediaBrowser.Server.Implementations/Notifications/InternalNotificationService.cs new file mode 100644 index 000000000..56cb52f10 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Notifications/InternalNotificationService.cs @@ -0,0 +1,42 @@ +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Notifications; +using MediaBrowser.Model.Notifications; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Server.Implementations.Notifications +{ + public class InternalNotificationService : INotificationService + { + private readonly INotificationsRepository _repo; + + public InternalNotificationService(INotificationsRepository repo) + { + _repo = repo; + } + + public string Name + { + get { return "Dashboard Notifications"; } + } + + public Task SendNotification(UserNotification request, CancellationToken cancellationToken) + { + return _repo.AddNotification(new Notification + { + Date = request.Date, + Description = request.Description, + Level = request.Level, + Name = request.Name, + Url = request.Url, + UserId = request.User.Id.ToString("N") + + }, cancellationToken); + } + + public bool IsEnabledForUser(User user) + { + return true; + } + } +} diff --git a/MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs b/MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs new file mode 100644 index 000000000..d6caa5b68 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs @@ -0,0 +1,94 @@ +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(); + } + } +} diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteNotificationsRepository.cs b/MediaBrowser.Server.Implementations/Notifications/SqliteNotificationsRepository.cs index 0f9b4295e..2424a6652 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteNotificationsRepository.cs +++ b/MediaBrowser.Server.Implementations/Notifications/SqliteNotificationsRepository.cs @@ -1,16 +1,17 @@ -using System.IO; -using MediaBrowser.Controller; +using MediaBrowser.Controller; using MediaBrowser.Controller.Notifications; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Notifications; +using MediaBrowser.Server.Implementations.Persistence; using System; using System.Collections.Generic; using System.Data; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Server.Implementations.Persistence +namespace MediaBrowser.Server.Implementations.Notifications { public class SqliteNotificationsRepository : INotificationsRepository { @@ -134,7 +135,7 @@ namespace MediaBrowser.Server.Implementations.Persistence } } - public NotificationsSummary GetNotificationsSummary(Guid userId) + public NotificationsSummary GetNotificationsSummary(string userId) { var result = new NotificationsSummary(); @@ -142,7 +143,7 @@ namespace MediaBrowser.Server.Implementations.Persistence { cmd.CommandText = "select Level from Notifications where UserId=@UserId and IsRead=@IsRead"; - cmd.Parameters.Add(cmd, "@UserId", DbType.Guid).Value = userId; + cmd.Parameters.Add(cmd, "@UserId", DbType.Guid).Value = new Guid(userId); cmd.Parameters.Add(cmd, "@IsRead", DbType.Boolean).Value = false; using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) @@ -183,8 +184,8 @@ namespace MediaBrowser.Server.Implementations.Persistence { var notification = new Notification { - Id = reader.GetGuid(0), - UserId = reader.GetGuid(1), + Id = reader.GetGuid(0).ToString("N"), + UserId = reader.GetGuid(1).ToString("N"), Date = reader.GetDateTime(2).ToUniversalTime(), Name = reader.GetString(3) }; @@ -202,13 +203,6 @@ namespace MediaBrowser.Server.Implementations.Persistence notification.Level = GetLevel(reader, 6); notification.IsRead = reader.GetBoolean(7); - notification.Category = reader.GetString(8); - - if (!reader.IsDBNull(9)) - { - notification.RelatedId = reader.GetString(9); - } - return notification; } @@ -223,13 +217,13 @@ namespace MediaBrowser.Server.Implementations.Persistence /// or /// userId /// </exception> - public Notification GetNotification(Guid id, Guid userId) + public Notification GetNotification(string id, string userId) { - if (id == Guid.Empty) + if (string.IsNullOrEmpty(id)) { throw new ArgumentNullException("id"); } - if (userId == Guid.Empty) + if (string.IsNullOrEmpty(userId)) { throw new ArgumentNullException("userId"); } @@ -238,8 +232,8 @@ namespace MediaBrowser.Server.Implementations.Persistence { cmd.CommandText = "select Id,UserId,Date,Name,Description,Url,Level,IsRead,Category,RelatedId where Id=@Id And UserId = @UserId"; - cmd.Parameters.Add(cmd, "@Id", DbType.Guid).Value = id; - cmd.Parameters.Add(cmd, "@UserId", DbType.Guid).Value = userId; + cmd.Parameters.Add(cmd, "@Id", DbType.Guid).Value = new Guid(id); + cmd.Parameters.Add(cmd, "@UserId", DbType.Guid).Value = new Guid(userId); using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) { @@ -329,11 +323,11 @@ namespace MediaBrowser.Server.Implementations.Persistence /// <returns>Task.</returns> private async Task ReplaceNotification(Notification notification, CancellationToken cancellationToken) { - if (notification.Id == Guid.Empty) + if (string.IsNullOrEmpty(notification.Id)) { - throw new ArgumentException("The notification must have an id"); + notification.Id = Guid.NewGuid().ToString("N"); } - if (notification.UserId == Guid.Empty) + if (string.IsNullOrEmpty(notification.UserId)) { throw new ArgumentException("The notification must have a user id"); } @@ -348,16 +342,16 @@ namespace MediaBrowser.Server.Implementations.Persistence { transaction = _connection.BeginTransaction(); - _replaceNotificationCommand.GetParameter(0).Value = notification.Id; - _replaceNotificationCommand.GetParameter(1).Value = notification.UserId; + _replaceNotificationCommand.GetParameter(0).Value = new Guid(notification.Id); + _replaceNotificationCommand.GetParameter(1).Value = new Guid(notification.UserId); _replaceNotificationCommand.GetParameter(2).Value = notification.Date.ToUniversalTime(); _replaceNotificationCommand.GetParameter(3).Value = notification.Name; _replaceNotificationCommand.GetParameter(4).Value = notification.Description; _replaceNotificationCommand.GetParameter(5).Value = notification.Url; _replaceNotificationCommand.GetParameter(6).Value = notification.Level.ToString(); _replaceNotificationCommand.GetParameter(7).Value = notification.IsRead; - _replaceNotificationCommand.GetParameter(8).Value = notification.Category; - _replaceNotificationCommand.GetParameter(9).Value = notification.RelatedId; + _replaceNotificationCommand.GetParameter(8).Value = string.Empty; + _replaceNotificationCommand.GetParameter(9).Value = string.Empty; _replaceNotificationCommand.Transaction = transaction; @@ -404,9 +398,10 @@ namespace MediaBrowser.Server.Implementations.Persistence /// <param name="isRead">if set to <c>true</c> [is read].</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> - public async Task MarkRead(IEnumerable<Guid> notificationIdList, Guid userId, bool isRead, CancellationToken cancellationToken) + public async Task MarkRead(IEnumerable<string> notificationIdList, string userId, bool isRead, CancellationToken cancellationToken) { - var idArray = notificationIdList.ToArray(); + var list = notificationIdList.ToList(); + var idArray = list.Select(i => new Guid(i)).ToArray(); await MarkReadInternal(idArray, userId, isRead, cancellationToken).ConfigureAwait(false); @@ -416,7 +411,7 @@ namespace MediaBrowser.Server.Implementations.Persistence { NotificationsMarkedRead(this, new NotificationReadEventArgs { - IdList = idArray.ToArray(), + IdList = list.ToArray(), IsRead = isRead, UserId = userId }); @@ -428,7 +423,7 @@ namespace MediaBrowser.Server.Implementations.Persistence } } - private async Task MarkReadInternal(IEnumerable<Guid> notificationIdList, Guid userId, bool isRead, CancellationToken cancellationToken) + private async Task MarkReadInternal(IEnumerable<Guid> notificationIdList, string userId, bool isRead, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); @@ -442,7 +437,7 @@ namespace MediaBrowser.Server.Implementations.Persistence transaction = _connection.BeginTransaction(); - _markReadCommand.GetParameter(0).Value = userId; + _markReadCommand.GetParameter(0).Value = new Guid(userId); _markReadCommand.GetParameter(1).Value = isRead; foreach (var id in notificationIdList) |
