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