diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs index adcf3edba..a69f9e94b 100644 --- a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs +++ b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs @@ -10,6 +10,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MoreLinq; namespace MediaBrowser.Server.Implementations.Collections { @@ -255,7 +256,10 @@ namespace MediaBrowser.Server.Implementations.Collections } } - return list.Except(itemsToCollapse.Cast()).Concat(boxsets).Distinct(); + return list + .Except(itemsToCollapse.Cast()) + .Concat(boxsets) + .DistinctBy(i => i.Id); } } } diff --git a/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs b/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs index a3a6d3630..1be4eca23 100644 --- a/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs +++ b/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs @@ -42,6 +42,14 @@ namespace MediaBrowser.Server.Implementations.Session ResetPingTimer(); } + private string PostUrl + { + get + { + return string.Format("http://{0}{1}", Session.RemoteEndPoint, _postUrl); + } + } + public bool IsSessionActive { get @@ -97,7 +105,7 @@ namespace MediaBrowser.Server.Implementations.Session Dictionary args, CancellationToken cancellationToken) { - var url = _postUrl + "/" + name + ToQueryString(args); + var url = PostUrl + "/" + name + ToQueryString(args); await _httpClient.Post(new HttpRequestOptions { diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index cbf14076b..a33db0c13 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -1,5 +1,4 @@ -using System.IO; -using MediaBrowser.Common.Events; +using MediaBrowser.Common.Events; using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; using MediaBrowser.Controller; @@ -22,6 +21,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -983,6 +983,8 @@ namespace MediaBrowser.Server.Implementations.Session /// Task. public Task SendServerRestartNotification(CancellationToken cancellationToken) { + _logger.Debug("Beginning SendServerRestartNotification"); + var sessions = Sessions.Where(i => i.IsActive && i.SessionController != null).ToList(); var tasks = sessions.Select(session => Task.Run(async () => @@ -1171,13 +1173,11 @@ namespace MediaBrowser.Server.Implementations.Session if (!string.IsNullOrWhiteSpace(capabilities.MessageCallbackUrl)) { - var postUrl = string.Format("http://{0}{1}", session.RemoteEndPoint, capabilities.MessageCallbackUrl); - var controller = session.SessionController as HttpSessionController; if (controller == null) { - session.SessionController = new HttpSessionController(_httpClient, _jsonSerializer, session, postUrl, this); + session.SessionController = new HttpSessionController(_httpClient, _jsonSerializer, session, capabilities.MessageCallbackUrl, this); } } diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 868a72b08..4b300947a 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -798,6 +798,8 @@ namespace MediaBrowser.ServerApplication Logger.ErrorException("Error sending server restart notification", ex); } + Logger.Debug("Calling NativeApp.Restart"); + NativeApp.Restart(); } diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index cd676061e..4f143aaf7 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -116,11 +116,13 @@ namespace MediaBrowser.ServerApplication /// true if [is already running] [the specified current process]; otherwise, false. private static bool IsAlreadyRunning(string applicationPath, Process currentProcess) { + var filename = Path.GetFileName(applicationPath); + var duplicate = Process.GetProcesses().FirstOrDefault(i => { try { - return string.Equals(applicationPath, i.MainModule.FileName) && currentProcess.Id != i.Id; + return string.Equals(filename, Path.GetFileName(i.MainModule.FileName)) && currentProcess.Id != i.Id; } catch (Exception) {