aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/EntryPoints
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2015-02-09 16:58:30 -0500
committerLuke <luke.pulverenti@gmail.com>2015-02-09 16:58:30 -0500
commit4cc3b2f0ccd7c092a4acf72db4903415e175037a (patch)
treef9f90f8665b726253b8b357674f2f141aa43abc9 /MediaBrowser.Server.Implementations/EntryPoints
parente7037a9b80843c127712f11430239f8fa3cb4aed (diff)
parent3d7089a7dbabb652730c892206ca050f52f832b1 (diff)
Merge pull request #1005 from MediaBrowser/dev
3.0.5518.0
Diffstat (limited to 'MediaBrowser.Server.Implementations/EntryPoints')
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs81
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs3
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs22
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/ServerEventNotifier.cs51
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs2
5 files changed, 104 insertions, 55 deletions
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs b/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
index e32068905..5c69db3e1 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
@@ -5,6 +5,7 @@ using MediaBrowser.Model.Logging;
using Mono.Nat;
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.IO;
using System.Text;
using System.Threading;
@@ -17,30 +18,44 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
private readonly ILogger _logger;
private readonly IServerConfigurationManager _config;
- private bool _isStarted;
-
private Timer _timer;
+ private bool _isStarted;
public ExternalPortForwarding(ILogManager logmanager, IServerApplicationHost appHost, IServerConfigurationManager config)
{
_logger = logmanager.GetLogger("PortMapper");
_appHost = appHost;
_config = config;
+ }
- _config.ConfigurationUpdated += _config_ConfigurationUpdated;
+ private string _lastConfigIdentifier;
+ private string GetConfigIdentifier()
+ {
+ var values = new List<string>();
+ var config = _config.Configuration;
+
+ values.Add(config.EnableUPnP.ToString());
+ values.Add(config.PublicPort.ToString(CultureInfo.InvariantCulture));
+ values.Add(_appHost.HttpPort.ToString(CultureInfo.InvariantCulture));
+ values.Add(_appHost.HttpsPort.ToString(CultureInfo.InvariantCulture));
+ values.Add(config.EnableHttps.ToString());
+ values.Add(_appHost.EnableHttps.ToString());
+
+ return string.Join("|", values.ToArray());
}
void _config_ConfigurationUpdated(object sender, EventArgs e)
{
- var enable = _config.Configuration.EnableUPnP;
-
- if (enable && !_isStarted)
- {
- Reload();
- }
- else if (!enable && _isStarted)
+ _config.ConfigurationUpdated -= _config_ConfigurationUpdated;
+
+ if (!string.Equals(_lastConfigIdentifier, GetConfigIdentifier(), StringComparison.OrdinalIgnoreCase))
{
- DisposeNat();
+ if (_isStarted)
+ {
+ DisposeNat();
+ }
+
+ Run();
}
}
@@ -48,31 +63,36 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
{
//NatUtility.Logger = new LogWriter(_logger);
- Reload();
+ if (_config.Configuration.EnableUPnP)
+ {
+ Start();
+ }
+
+ _config.ConfigurationUpdated -= _config_ConfigurationUpdated;
+ _config.ConfigurationUpdated += _config_ConfigurationUpdated;
}
- private void Reload()
+ private void Start()
{
- if (_config.Configuration.EnableUPnP)
- {
- _logger.Debug("Starting NAT discovery");
+ _logger.Debug("Starting NAT discovery");
- NatUtility.DeviceFound += NatUtility_DeviceFound;
+ NatUtility.DeviceFound += NatUtility_DeviceFound;
- // Mono.Nat does never rise this event. The event is there however it is useless.
- // You could remove it with no risk.
- NatUtility.DeviceLost += NatUtility_DeviceLost;
+ // Mono.Nat does never rise this event. The event is there however it is useless.
+ // You could remove it with no risk.
+ NatUtility.DeviceLost += NatUtility_DeviceLost;
- // it is hard to say what one should do when an unhandled exception is raised
- // because there isn't anything one can do about it. Probably save a log or ignored it.
- NatUtility.UnhandledException += NatUtility_UnhandledException;
- NatUtility.StartDiscovery();
+ // it is hard to say what one should do when an unhandled exception is raised
+ // because there isn't anything one can do about it. Probably save a log or ignored it.
+ NatUtility.UnhandledException += NatUtility_UnhandledException;
+ NatUtility.StartDiscovery();
- _isStarted = true;
+ _timer = new Timer(s => _createdRules = new List<string>(), null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
- _timer = new Timer(s => _createdRules = new List<string>(), null, TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(10));
- }
+ _lastConfigIdentifier = GetConfigIdentifier();
+
+ _isStarted = true;
}
void NatUtility_UnhandledException(object sender, UnhandledExceptionEventArgs e)
@@ -124,9 +144,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
{
_createdRules.Add(address);
- var info = _appHost.GetSystemInfo();
-
- CreatePortMap(device, info.HttpServerPortNumber, _config.Configuration.PublicPort);
+ CreatePortMap(device, _appHost.HttpPort, _config.Configuration.PublicPort);
+ CreatePortMap(device, _appHost.HttpsPort, _config.Configuration.PublicHttpsPort);
}
}
@@ -136,7 +155,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
device.CreatePortMap(new Mapping(Protocol.Tcp, privatePort, publicPort)
{
- Description = "Media Browser Server"
+ Description = _appHost.Name
});
}
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs b/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
index e6976c54b..dd5dc82e8 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
@@ -245,7 +245,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
var collections = user.RootFolder.GetChildren(user, true).ToList();
- var allRecursiveChildren = user.RootFolder.GetRecursiveChildren(user)
+ var allRecursiveChildren = user.RootFolder
+ .GetRecursiveChildren(user)
.Select(i => i.Id)
.Distinct()
.ToDictionary(i => i);
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs
index 2d824f36c..37bca4ddb 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifications.cs
@@ -3,6 +3,7 @@ using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Common.Updates;
using MediaBrowser.Controller;
+using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
@@ -44,8 +45,9 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
private readonly object _libraryChangedSyncLock = new object();
private readonly IConfigurationManager _config;
+ private readonly IDeviceManager _deviceManager;
- public Notifications(IInstallationManager installationManager, IUserManager userManager, ILogger logger, ITaskManager taskManager, INotificationManager notificationManager, ILibraryManager libraryManager, ISessionManager sessionManager, IServerApplicationHost appHost, IConfigurationManager config)
+ public Notifications(IInstallationManager installationManager, IUserManager userManager, ILogger logger, ITaskManager taskManager, INotificationManager notificationManager, ILibraryManager libraryManager, ISessionManager sessionManager, IServerApplicationHost appHost, IConfigurationManager config, IDeviceManager deviceManager)
{
_installationManager = installationManager;
_userManager = userManager;
@@ -56,6 +58,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
_sessionManager = sessionManager;
_appHost = appHost;
_config = config;
+ _deviceManager = deviceManager;
}
public void Run()
@@ -74,6 +77,21 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
_appHost.HasPendingRestartChanged += _appHost_HasPendingRestartChanged;
_appHost.HasUpdateAvailableChanged += _appHost_HasUpdateAvailableChanged;
_appHost.ApplicationUpdated += _appHost_ApplicationUpdated;
+ _deviceManager.CameraImageUploaded +=_deviceManager_CameraImageUploaded;
+ }
+
+ async void _deviceManager_CameraImageUploaded(object sender, GenericEventArgs<CameraImageUploadInfo> e)
+ {
+ var type = NotificationType.CameraImageUploaded.ToString();
+
+ var notification = new NotificationRequest
+ {
+ NotificationType = type
+ };
+
+ notification.Variables["DeviceName"] = e.Argument.Device.Name;
+
+ await SendNotification(notification).ConfigureAwait(false);
}
async void _appHost_ApplicationUpdated(object sender, GenericEventArgs<PackageVersionInfo> e)
@@ -451,6 +469,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
_appHost.HasPendingRestartChanged -= _appHost_HasPendingRestartChanged;
_appHost.HasUpdateAvailableChanged -= _appHost_HasUpdateAvailableChanged;
_appHost.ApplicationUpdated -= _appHost_ApplicationUpdated;
+
+ _deviceManager.CameraImageUploaded -= _deviceManager_CameraImageUploaded;
}
private void DisposeLibraryUpdateTimer()
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/ServerEventNotifier.cs b/MediaBrowser.Server.Implementations/EntryPoints/ServerEventNotifier.cs
index 1eb4a6655..b5624625f 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/ServerEventNotifier.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/ServerEventNotifier.cs
@@ -2,13 +2,14 @@
using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Common.Updates;
using MediaBrowser.Controller;
-using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Plugins;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.Sync;
using MediaBrowser.Model.Events;
+using MediaBrowser.Model.Sync;
using System;
using System.Threading;
@@ -44,29 +45,18 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
/// </summary>
private readonly ITaskManager _taskManager;
- private readonly IDtoService _dtoService;
-
private readonly ISessionManager _sessionManager;
+ private readonly ISyncManager _syncManager;
- /// <summary>
- /// Initializes a new instance of the <see cref="ServerEventNotifier" /> class.
- /// </summary>
- /// <param name="serverManager">The server manager.</param>
- /// <param name="appHost">The application host.</param>
- /// <param name="userManager">The user manager.</param>
- /// <param name="installationManager">The installation manager.</param>
- /// <param name="taskManager">The task manager.</param>
- /// <param name="dtoService">The dto service.</param>
- /// <param name="sessionManager">The session manager.</param>
- public ServerEventNotifier(IServerManager serverManager, IServerApplicationHost appHost, IUserManager userManager, IInstallationManager installationManager, ITaskManager taskManager, IDtoService dtoService, ISessionManager sessionManager)
+ public ServerEventNotifier(IServerManager serverManager, IServerApplicationHost appHost, IUserManager userManager, IInstallationManager installationManager, ITaskManager taskManager, ISessionManager sessionManager, ISyncManager syncManager)
{
_serverManager = serverManager;
_userManager = userManager;
_installationManager = installationManager;
_appHost = appHost;
_taskManager = taskManager;
- _dtoService = dtoService;
_sessionManager = sessionManager;
+ _syncManager = syncManager;
}
public void Run()
@@ -84,13 +74,18 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
_installationManager.PackageInstallationFailed += _installationManager_PackageInstallationFailed;
_taskManager.TaskCompleted += _taskManager_TaskCompleted;
+ _syncManager.SyncJobCreated += _syncManager_SyncJobCreated;
+ _syncManager.SyncJobCancelled += _syncManager_SyncJobCancelled;
}
- void _userManager_UserConfigurationUpdated(object sender, GenericEventArgs<User> e)
+ void _syncManager_SyncJobCancelled(object sender, GenericEventArgs<SyncJob> e)
{
- var dto = _userManager.GetUserDto(e.Argument);
+ _sessionManager.SendMessageToUserDeviceSessions(e.Argument.TargetId, "SyncJobCancelled", e.Argument, CancellationToken.None);
+ }
- _serverManager.SendWebSocketMessage("UserConfigurationUpdated", dto);
+ void _syncManager_SyncJobCreated(object sender, GenericEventArgs<SyncJobCreationResult> e)
+ {
+ _sessionManager.SendMessageToUserDeviceSessions(e.Argument.Job.TargetId, "SyncJobCreated", e.Argument, CancellationToken.None);
}
void _installationManager_PackageInstalling(object sender, InstallationEventArgs e)
@@ -146,8 +141,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
void userManager_UserUpdated(object sender, GenericEventArgs<User> e)
{
var dto = _userManager.GetUserDto(e.Argument);
-
- _serverManager.SendWebSocketMessage("UserUpdated", dto);
+
+ SendMessageToUserSession(e.Argument, "UserUpdated", dto);
}
/// <summary>
@@ -157,7 +152,19 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
/// <param name="e">The e.</param>
void userManager_UserDeleted(object sender, GenericEventArgs<User> e)
{
- _serverManager.SendWebSocketMessage("UserDeleted", e.Argument.Id.ToString("N"));
+ SendMessageToUserSession(e.Argument, "UserDeleted", e.Argument.Id.ToString("N"));
+ }
+
+ void _userManager_UserConfigurationUpdated(object sender, GenericEventArgs<User> e)
+ {
+ var dto = _userManager.GetUserDto(e.Argument);
+
+ SendMessageToUserSession(e.Argument, "UserConfigurationUpdated", dto);
+ }
+
+ private async void SendMessageToUserSession<T>(User user, string name, T data)
+ {
+ await _sessionManager.SendMessageToUserSessions(user.Id.ToString("N"), name, data, CancellationToken.None);
}
/// <summary>
@@ -187,6 +194,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
_installationManager.PackageInstallationFailed -= _installationManager_PackageInstallationFailed;
_appHost.HasPendingRestartChanged -= kernel_HasPendingRestartChanged;
+ _syncManager.SyncJobCreated -= _syncManager_SyncJobCreated;
+ _syncManager.SyncJobCancelled -= _syncManager_SyncJobCancelled;
}
}
}
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs b/MediaBrowser.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
index c31f46215..ccd427a47 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
@@ -108,7 +108,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
{
var userId = pair.Key;
var userSessions = _sessionManager.Sessions
- .Where(u => u.UserId.HasValue && u.UserId.Value == userId && u.SessionController != null && u.IsActive)
+ .Where(u => u.ContainsUser(userId) && u.SessionController != null && u.IsActive)
.ToList();
if (userSessions.Count > 0)