From 98c0b28d14d68cc2989fb60fb09dde0501a8d928 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 30 Apr 2014 11:07:02 -0400 Subject: [PATCH] re-enable mobile media controller --- .../Playback/BaseStreamingService.cs | 4 +- .../BaseApplicationHost.cs | 18 +++--- MediaBrowser.Common/IApplicationHost.cs | 2 +- MediaBrowser.Dlna/Main/DlnaEntryPoint.cs | 5 +- MediaBrowser.Dlna/PlayTo/DlnaController.cs | 46 +++++++--------- MediaBrowser.Dlna/PlayTo/PlayToManager.cs | 36 +++++++++--- MediaBrowser.Model/ApiClient/IApiClient.cs | 3 +- .../Configuration/NotificationOptions.cs | 6 ++ MediaBrowser.Model/Dlna/StreamBuilder.cs | 2 +- .../Notifications/Notification.cs | 2 + .../EntryPoints/Notifications/Notifier.cs | 9 ++- .../Localization/Server/server.json | 6 +- .../News/NewsEntryPoint.cs | 2 +- .../Notifications/CoreNotificationTypes.cs | 11 ++-- .../Notifications/NotificationManager.cs | 55 +++++++++++++++++-- .../ApplicationHost.cs | 2 +- .../Api/DashboardService.cs | 4 +- .../MediaBrowser.WebDashboard.csproj | 1 + 18 files changed, 147 insertions(+), 67 deletions(-) diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 52e3a7a384..ac06416557 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -350,11 +350,11 @@ namespace MediaBrowser.Api.Playback switch (qualitySetting) { case EncodingQuality.HighSpeed: - crf = "12"; + crf = "16"; profileScore = 2; break; case EncodingQuality.HighQuality: - crf = "8"; + crf = "10"; profileScore = 1; break; case EncodingQuality.MaxQuality: diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index 5aa83abf42..4946241fd7 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -1,5 +1,4 @@ -using System.Text; -using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Events; using MediaBrowser.Common.Implementations.Archiving; using MediaBrowser.Common.Implementations.IO; @@ -26,6 +25,7 @@ using System.IO; using System.Linq; using System.Net; using System.Reflection; +using System.Text; using System.Threading; using System.Threading.Tasks; @@ -46,7 +46,7 @@ namespace MediaBrowser.Common.Implementations /// /// Occurs when [application updated]. /// - public event EventHandler> ApplicationUpdated; + public event EventHandler> ApplicationUpdated; /// /// Gets or sets a value indicating whether this instance has changes that require the entire application to restart. @@ -759,12 +759,16 @@ namespace MediaBrowser.Common.Implementations /// /// Called when [application updated]. /// - /// The new version. - protected void OnApplicationUpdated(Version newVersion) + /// The package. + protected void OnApplicationUpdated(PackageVersionInfo package) { - Logger.Info("Application has been updated to version {0}", newVersion); + Logger.Info("Application has been updated to version {0}", package.versionStr); - EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs { Argument = newVersion }, Logger); + EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs + { + Argument = package + + }, Logger); NotifyPendingRestart(); } diff --git a/MediaBrowser.Common/IApplicationHost.cs b/MediaBrowser.Common/IApplicationHost.cs index fb49cc5b95..ecd099711f 100644 --- a/MediaBrowser.Common/IApplicationHost.cs +++ b/MediaBrowser.Common/IApplicationHost.cs @@ -22,7 +22,7 @@ namespace MediaBrowser.Common /// /// Occurs when [application updated]. /// - event EventHandler> ApplicationUpdated; + event EventHandler> ApplicationUpdated; /// /// Gets a value indicating whether this instance is running as service. diff --git a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs index 2952773a4c..9f1d11793c 100644 --- a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs +++ b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs @@ -30,7 +30,6 @@ namespace MediaBrowser.Dlna.Main private readonly IHttpClient _httpClient; private readonly IItemRepository _itemRepo; private readonly ILibraryManager _libraryManager; - private readonly INetworkManager _networkManager; private readonly IUserManager _userManager; private readonly IDlnaManager _dlnaManager; private readonly IDtoService _dtoService; @@ -41,7 +40,7 @@ namespace MediaBrowser.Dlna.Main private readonly List _registeredServerIds = new List(); private bool _dlnaServerStarted; - public DlnaEntryPoint(IServerConfigurationManager config, ILogManager logManager, IServerApplicationHost appHost, INetworkManager network, ISessionManager sessionManager, IHttpClient httpClient, IItemRepository itemRepo, ILibraryManager libraryManager, INetworkManager networkManager, IUserManager userManager, IDlnaManager dlnaManager, IDtoService dtoService, IImageProcessor imageProcessor) + public DlnaEntryPoint(IServerConfigurationManager config, ILogManager logManager, IServerApplicationHost appHost, INetworkManager network, ISessionManager sessionManager, IHttpClient httpClient, IItemRepository itemRepo, ILibraryManager libraryManager, IUserManager userManager, IDlnaManager dlnaManager, IDtoService dtoService, IImageProcessor imageProcessor) { _config = config; _appHost = appHost; @@ -50,7 +49,6 @@ namespace MediaBrowser.Dlna.Main _httpClient = httpClient; _itemRepo = itemRepo; _libraryManager = libraryManager; - _networkManager = networkManager; _userManager = userManager; _dlnaManager = dlnaManager; _dtoService = dtoService; @@ -196,7 +194,6 @@ namespace MediaBrowser.Dlna.Main _httpClient, _itemRepo, _libraryManager, - _networkManager, _userManager, _dlnaManager, _appHost, diff --git a/MediaBrowser.Dlna/PlayTo/DlnaController.cs b/MediaBrowser.Dlna/PlayTo/DlnaController.cs index 0a8da4744e..fb5e0bf34f 100644 --- a/MediaBrowser.Dlna/PlayTo/DlnaController.cs +++ b/MediaBrowser.Dlna/PlayTo/DlnaController.cs @@ -1,6 +1,4 @@ -using MediaBrowser.Common.Net; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Dlna; +using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; @@ -31,15 +29,14 @@ namespace MediaBrowser.Dlna.PlayTo private readonly ISessionManager _sessionManager; private readonly IItemRepository _itemRepository; private readonly ILibraryManager _libraryManager; - private readonly INetworkManager _networkManager; private readonly ILogger _logger; private readonly IDlnaManager _dlnaManager; private readonly IUserManager _userManager; - private readonly IServerApplicationHost _appHost; private readonly IDtoService _dtoService; private readonly IImageProcessor _imageProcessor; private readonly SsdpHandler _ssdpHandler; + private readonly string _serverAddress; public bool SupportsMediaRemoteControl { @@ -54,19 +51,18 @@ namespace MediaBrowser.Dlna.PlayTo } } - public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, INetworkManager networkManager, IDlnaManager dlnaManager, IUserManager userManager, IServerApplicationHost appHost, IDtoService dtoService, IImageProcessor imageProcessor, SsdpHandler ssdpHandler) + public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IDtoService dtoService, IImageProcessor imageProcessor, SsdpHandler ssdpHandler, string serverAddress) { _session = session; _itemRepository = itemRepository; _sessionManager = sessionManager; _libraryManager = libraryManager; - _networkManager = networkManager; _dlnaManager = dlnaManager; _userManager = userManager; - _appHost = appHost; _dtoService = dtoService; _imageProcessor = imageProcessor; _ssdpHandler = ssdpHandler; + _serverAddress = serverAddress; _logger = logger; } @@ -81,6 +77,11 @@ namespace MediaBrowser.Dlna.PlayTo _ssdpHandler.MessageReceived += _SsdpHandler_MessageReceived; } + private string GetServerAddress() + { + return _serverAddress; + } + async void _SsdpHandler_MessageReceived(object sender, SsdpMessageEventArgs e) { string nts; @@ -93,17 +94,20 @@ namespace MediaBrowser.Dlna.PlayTo if (!e.Headers.TryGetValue("NT", out nt)) nt = string.Empty; if (string.Equals(e.Method, "NOTIFY", StringComparison.OrdinalIgnoreCase) && - string.Equals(nts, "ssdp:byebye", StringComparison.OrdinalIgnoreCase)) + string.Equals(nts, "ssdp:byebye", StringComparison.OrdinalIgnoreCase) && + usn.IndexOf(_device.Properties.UUID, StringComparison.OrdinalIgnoreCase) != -1 && + !_disposed) { - if (usn.IndexOf(_device.Properties.UUID, StringComparison.OrdinalIgnoreCase) != -1) + if (usn.IndexOf("MediaRenderer:", StringComparison.OrdinalIgnoreCase) != -1 || + nt.IndexOf("MediaRenderer:", StringComparison.OrdinalIgnoreCase) != -1) { - if (usn.IndexOf("MediaRenderer:", StringComparison.OrdinalIgnoreCase) != -1 || - nt.IndexOf("MediaRenderer:", StringComparison.OrdinalIgnoreCase) != -1) + try { - if (!_disposed) - { - await _sessionManager.ReportSessionEnded(_session.Id).ConfigureAwait(false); - } + await _sessionManager.ReportSessionEnded(_session.Id).ConfigureAwait(false); + } + catch + { + // Could throw if the session is already gone } } } @@ -368,16 +372,6 @@ namespace MediaBrowser.Dlna.PlayTo } } - private string GetServerAddress() - { - return string.Format("{0}://{1}:{2}/mediabrowser", - - "http", - _networkManager.GetLocalIpAddresses().FirstOrDefault() ?? "localhost", - _appHost.HttpServerPort - ); - } - private PlaylistItem CreatePlaylistItem(BaseItem item, long startPostionTicks, string serverAddress) { var deviceInfo = _device.Properties; diff --git a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs index 889501e663..5bd85d3c98 100644 --- a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs +++ b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs @@ -32,7 +32,6 @@ namespace MediaBrowser.Dlna.PlayTo private readonly IItemRepository _itemRepository; private readonly ILibraryManager _libraryManager; - private readonly INetworkManager _networkManager; private readonly IUserManager _userManager; private readonly IDlnaManager _dlnaManager; private readonly IServerConfigurationManager _config; @@ -42,7 +41,7 @@ namespace MediaBrowser.Dlna.PlayTo private readonly SsdpHandler _ssdpHandler; - public PlayToManager(ILogger logger, IServerConfigurationManager config, ISessionManager sessionManager, IHttpClient httpClient, IItemRepository itemRepository, ILibraryManager libraryManager, INetworkManager networkManager, IUserManager userManager, IDlnaManager dlnaManager, IServerApplicationHost appHost, IDtoService dtoService, IImageProcessor imageProcessor, SsdpHandler ssdpHandler) + public PlayToManager(ILogger logger, IServerConfigurationManager config, ISessionManager sessionManager, IHttpClient httpClient, IItemRepository itemRepository, ILibraryManager libraryManager, IUserManager userManager, IDlnaManager dlnaManager, IServerApplicationHost appHost, IDtoService dtoService, IImageProcessor imageProcessor, SsdpHandler ssdpHandler) { _tokenSource = new CancellationTokenSource(); @@ -51,7 +50,6 @@ namespace MediaBrowser.Dlna.PlayTo _httpClient = httpClient; _itemRepository = itemRepository; _libraryManager = libraryManager; - _networkManager = networkManager; _userManager = userManager; _dlnaManager = dlnaManager; _appHost = appHost; @@ -137,7 +135,7 @@ namespace MediaBrowser.Dlna.PlayTo { var args = SsdpHelper.ParseSsdpResponse(receiveBuffer, endPoint); - TryCreateController(args); + TryCreateController(args, localIp); } } @@ -154,7 +152,7 @@ namespace MediaBrowser.Dlna.PlayTo }, _tokenSource.Token, TaskCreationOptions.LongRunning); } - private void TryCreateController(SsdpMessageEventArgs args) + private void TryCreateController(SsdpMessageEventArgs args, IPAddress localIp) { string nts; args.Headers.TryGetValue("NTS", out nts); @@ -203,7 +201,7 @@ namespace MediaBrowser.Dlna.PlayTo { try { - await CreateController(new Uri(location)).ConfigureAwait(false); + await CreateController(new Uri(location), localIp).ConfigureAwait(false); } catch (OperationCanceledException) { @@ -264,7 +262,7 @@ namespace MediaBrowser.Dlna.PlayTo /// /// The URI. /// - private async Task CreateController(Uri uri) + private async Task CreateController(Uri uri, IPAddress localIp) { var device = await Device.CreateuPnpDeviceAsync(uri, _httpClient, _config, _logger).ConfigureAwait(false); @@ -277,7 +275,19 @@ namespace MediaBrowser.Dlna.PlayTo if (controller == null) { - sessionInfo.SessionController = controller = new PlayToController(sessionInfo, _sessionManager, _itemRepository, _libraryManager, _logger, _networkManager, _dlnaManager, _userManager, _appHost, _dtoService, _imageProcessor, _ssdpHandler); + var serverAddress = GetServerAddress(localIp); + + sessionInfo.SessionController = controller = new PlayToController(sessionInfo, + _sessionManager, + _itemRepository, + _libraryManager, + _logger, + _dlnaManager, + _userManager, + _dtoService, + _imageProcessor, + _ssdpHandler, + serverAddress); controller.Init(device); @@ -304,6 +314,16 @@ namespace MediaBrowser.Dlna.PlayTo } } + private string GetServerAddress(IPAddress localIp) + { + return string.Format("{0}://{1}:{2}/mediabrowser", + + "http", + localIp, + _appHost.HttpServerPort + ); + } + public void Dispose() { if (!_disposed) diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index ba5d7036a9..dd1603d01a 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -551,9 +551,8 @@ namespace MediaBrowser.Model.ApiClient /// The id of the item to browse to. /// The name of the item to browse to. /// The type of the item to browse to. - /// Optional ui context (movies, music, tv, games, etc). The client is free to ignore this. /// Task. - Task SendBrowseCommandAsync(string sessionId, string itemId, string itemName, string itemType, string context); + Task SendBrowseCommandAsync(string sessionId, string itemId, string itemName, string itemType); /// /// Sends the playstate command async. diff --git a/MediaBrowser.Model/Configuration/NotificationOptions.cs b/MediaBrowser.Model/Configuration/NotificationOptions.cs index f1d9fad307..fedc1c2f80 100644 --- a/MediaBrowser.Model/Configuration/NotificationOptions.cs +++ b/MediaBrowser.Model/Configuration/NotificationOptions.cs @@ -145,6 +145,12 @@ namespace MediaBrowser.Model.Configuration /// The title format string. public string Title { get; set; } + /// + /// Gets or sets the description. + /// + /// The description. + public string Description { get; set; } + /// /// Gets or sets the disabled services. /// diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 79aeda2e63..4312e8a40d 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -1,10 +1,10 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.MediaInfo; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; -using MediaBrowser.Model.MediaInfo; namespace MediaBrowser.Model.Dlna { diff --git a/MediaBrowser.Model/Notifications/Notification.cs b/MediaBrowser.Model/Notifications/Notification.cs index e5040373b2..d894911e7e 100644 --- a/MediaBrowser.Model/Notifications/Notification.cs +++ b/MediaBrowser.Model/Notifications/Notification.cs @@ -78,6 +78,8 @@ namespace MediaBrowser.Model.Notifications public string DefaultTitle { get; set; } + public string DefaultDescription { get; set; } + public List Variables { get; set; } public NotificationTypeInfo() diff --git a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs index 36ee4a0c9d..1e3f8b0b05 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs @@ -70,7 +70,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications _appHost.ApplicationUpdated += _appHost_ApplicationUpdated; } - async void _appHost_ApplicationUpdated(object sender, GenericEventArgs e) + async void _appHost_ApplicationUpdated(object sender, GenericEventArgs e) { var type = NotificationType.ApplicationUpdateInstalled.ToString(); @@ -79,8 +79,9 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications NotificationType = type }; - notification.Variables["Version"] = e.Argument.ToString(); - + notification.Variables["Version"] = e.Argument.versionStr; + notification.Variables["ReleaseNotes"] = e.Argument.description; + await SendNotification(notification).ConfigureAwait(false); } @@ -98,6 +99,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications notification.Variables["Name"] = installationInfo.Name; notification.Variables["Version"] = installationInfo.Version.ToString(); + notification.Variables["ReleaseNotes"] = e.Argument.Item2.description; await SendNotification(notification).ConfigureAwait(false); } @@ -249,6 +251,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications }; notification.Variables["Name"] = e.Argument.Name; + notification.Variables["ErrorMessage"] = e.Argument.ErrorMessage; await SendNotification(notification).ConfigureAwait(false); } diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index d453068a9a..72c3410575 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -605,6 +605,7 @@ "LetterButtonAbbreviation": "A", "TabNowPlaying": "Now Playing", "TabNavigation": "Navigation", + "TabControls": "Controls", "ButtonFullscreen": "Toggle fullscreen", "ButtonScenes": "Scenes", "ButtonSubtitles": "Subtitles", @@ -616,5 +617,8 @@ "ButtonPause": "Pause", "LabelGroupMoviesIntoCollections": "Group movies into collections", "LabelGroupMoviesIntoCollectionsHelp": "When displaying movie lists, movies belonging to a collection will be displayed as one grouped item.", - "NotificationOptionPluginError": "Plugin failure" + "NotificationOptionPluginError": "Plugin failure", + "ButtonVolumeUp": "Volume up", + "ButtonVolumeDown": "Volume down", + "ButtonMute": "Mute" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs b/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs index 9a4783cba2..eebb040314 100644 --- a/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/News/NewsEntryPoint.cs @@ -99,7 +99,7 @@ namespace MediaBrowser.Server.Implementations.News { if (lastUpdate.HasValue) { - items = items.Where(i => i.Date.ToUniversalTime() > lastUpdate.Value) + items = items.Where(i => i.Date.ToUniversalTime() >= lastUpdate.Value) .ToList(); } diff --git a/MediaBrowser.Server.Implementations/Notifications/CoreNotificationTypes.cs b/MediaBrowser.Server.Implementations/Notifications/CoreNotificationTypes.cs index deb82c7c4b..9711148099 100644 --- a/MediaBrowser.Server.Implementations/Notifications/CoreNotificationTypes.cs +++ b/MediaBrowser.Server.Implementations/Notifications/CoreNotificationTypes.cs @@ -48,8 +48,9 @@ namespace MediaBrowser.Server.Implementations.Notifications new NotificationTypeInfo { Type = NotificationType.PluginError.ToString(), - DefaultTitle = "{Name} has encountered an error: {Message}", - Variables = new List{"Name", "Message"} + DefaultTitle = "{Name} has encountered an error.", + DefaultDescription = "{ErrorMessage}", + Variables = new List{"Name", "ErrorMessage"} }, new NotificationTypeInfo @@ -63,7 +64,8 @@ namespace MediaBrowser.Server.Implementations.Notifications { Type = NotificationType.PluginUpdateInstalled.ToString(), DefaultTitle = "{Name} was updated.", - Variables = new List{"Name", "Version"} + DefaultDescription = "{ReleaseNotes}", + Variables = new List{"Name", "ReleaseNotes", "Version"} }, new NotificationTypeInfo @@ -76,7 +78,8 @@ namespace MediaBrowser.Server.Implementations.Notifications { Type = NotificationType.TaskFailed.ToString(), DefaultTitle = "{Name} failed.", - Variables = new List{"Name"} + DefaultDescription = "{ErrorMessage}", + Variables = new List{"Name", "ErrorMessage"} }, new NotificationTypeInfo diff --git a/MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs b/MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs index f3183ec0b0..0b3af0409d 100644 --- a/MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs +++ b/MediaBrowser.Server.Implementations/Notifications/NotificationManager.cs @@ -39,13 +39,14 @@ namespace MediaBrowser.Server.Implementations.Notifications _config.Configuration.NotificationOptions.GetOptions(notificationType); var users = GetUserIds(request, options) - .Except(request.UserIds) + .Except(request.ExcludeUserIds) .Select(i => _userManager.GetUserById(new Guid(i))); var title = GetTitle(request, options); + var description = GetDescription(request, options); var tasks = _services.Where(i => IsEnabled(i, notificationType)) - .Select(i => SendNotification(request, i, users, title, cancellationToken)); + .Select(i => SendNotification(request, i, users, description, title, cancellationToken)); return Task.WhenAll(tasks); } @@ -54,12 +55,13 @@ namespace MediaBrowser.Server.Implementations.Notifications INotificationService service, IEnumerable users, string title, + string description, CancellationToken cancellationToken) { users = users.Where(i => IsEnabledForUser(service, i)) .ToList(); - var tasks = users.Select(i => SendNotification(request, service, title, i, cancellationToken)); + var tasks = users.Select(i => SendNotification(request, service, title, description, i, cancellationToken)); return Task.WhenAll(tasks); @@ -89,19 +91,20 @@ namespace MediaBrowser.Server.Implementations.Notifications .Select(i => i.Id.ToString("N")); } - return new List(); + 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 = request.Description, + Description = description, Level = request.Level, Name = title, Url = request.Url, @@ -162,6 +165,48 @@ namespace MediaBrowser.Server.Implementations.Notifications return title; } + private string GetDescription(NotificationRequest request, NotificationOption options) + { + var text = request.Description; + + // If empty, grab from options + if (string.IsNullOrEmpty(text)) + { + if (!string.IsNullOrEmpty(request.NotificationType)) + { + if (options != null) + { + text = options.Title; + } + } + } + + // If still empty, grab default + if (string.IsNullOrEmpty(text)) + { + if (!string.IsNullOrEmpty(request.NotificationType)) + { + var info = GetNotificationTypes().FirstOrDefault(i => string.Equals(i.Type, request.NotificationType, StringComparison.OrdinalIgnoreCase)); + + if (info != null) + { + text = info.DefaultDescription; + } + } + } + + text = text ?? string.Empty; + + foreach (var pair in request.Variables) + { + var token = "{" + pair.Key + "}"; + + text = text.Replace(token, pair.Value, StringComparison.OrdinalIgnoreCase); + } + + return text; + } + private bool IsEnabledForUser(INotificationService service, User user) { try diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index ce85a0964f..340b401195 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -1054,7 +1054,7 @@ namespace MediaBrowser.ServerApplication HasUpdateAvailable = false; - OnApplicationUpdated(package.version); + OnApplicationUpdated(package); } /// diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index e7c90d74f0..74014e25d9 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -373,6 +373,8 @@ namespace MediaBrowser.WebDashboard.Api sb.Append(""); sb.Append(""); sb.Append(""); + //sb.Append(""); + //sb.Append(""); //sb.Append(""); sb.Append(""); @@ -382,7 +384,7 @@ namespace MediaBrowser.WebDashboard.Api sb.Append(""); sb.Append(""); sb.Append(""); - sb.Append(""); + sb.Append(""); return sb.ToString(); } diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index a7dfc2c4a3..50b9c9aaf7 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -163,6 +163,7 @@ PreserveNewest + PreserveNewest