diff options
Diffstat (limited to 'MediaBrowser.Dlna/Main/DlnaEntryPoint.cs')
| -rw-r--r-- | MediaBrowser.Dlna/Main/DlnaEntryPoint.cs | 105 |
1 files changed, 93 insertions, 12 deletions
diff --git a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs index 37584f006..b9d9944ec 100644 --- a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs +++ b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs @@ -14,6 +14,10 @@ using MediaBrowser.Dlna.Ssdp; using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using MediaBrowser.Controller.MediaEncoding; +using MediaBrowser.Dlna.Channels; namespace MediaBrowser.Dlna.Main { @@ -34,11 +38,13 @@ namespace MediaBrowser.Dlna.Main private readonly IUserDataManager _userDataManager; private readonly ILocalizationManager _localization; private readonly IMediaSourceManager _mediaSourceManager; + private readonly IMediaEncoder _mediaEncoder; private readonly SsdpHandler _ssdpHandler; private readonly IDeviceDiscovery _deviceDiscovery; private readonly List<string> _registeredServerIds = new List<string>(); + private bool _ssdpHandlerStarted; private bool _dlnaServerStarted; public DlnaEntryPoint(IServerConfigurationManager config, @@ -54,7 +60,7 @@ namespace MediaBrowser.Dlna.Main IUserDataManager userDataManager, ILocalizationManager localization, IMediaSourceManager mediaSourceManager, - ISsdpHandler ssdpHandler, IDeviceDiscovery deviceDiscovery) + ISsdpHandler ssdpHandler, IDeviceDiscovery deviceDiscovery, IMediaEncoder mediaEncoder) { _config = config; _appHost = appHost; @@ -69,18 +75,29 @@ namespace MediaBrowser.Dlna.Main _localization = localization; _mediaSourceManager = mediaSourceManager; _deviceDiscovery = deviceDiscovery; + _mediaEncoder = mediaEncoder; _ssdpHandler = (SsdpHandler)ssdpHandler; _logger = logManager.GetLogger("Dlna"); } public void Run() { - StartSsdpHandler(); ReloadComponents(); + _config.ConfigurationUpdated += _config_ConfigurationUpdated; _config.NamedConfigurationUpdated += _config_NamedConfigurationUpdated; } + private bool _lastEnableUpnP; + void _config_ConfigurationUpdated(object sender, EventArgs e) + { + if (_lastEnableUpnP != _config.Configuration.EnableUPnP) + { + ReloadComponents(); + } + _lastEnableUpnP = _config.Configuration.EnableUPnP; + } + void _config_NamedConfigurationUpdated(object sender, ConfigurationUpdateEventArgs e) { if (string.Equals(e.Key, "dlna", StringComparison.OrdinalIgnoreCase)) @@ -89,15 +106,32 @@ namespace MediaBrowser.Dlna.Main } } - private void ReloadComponents() + private async void ReloadComponents() { - var isServerStarted = _dlnaServerStarted; - var options = _config.GetDlnaConfiguration(); + if (!options.EnableServer && !options.EnablePlayTo && !_config.Configuration.EnableUPnP) + { + if (_ssdpHandlerStarted) + { + // Sat/ip live tv depends on device discovery, as well as hd homerun detection + // In order to allow this to be disabled, we need a modular way of knowing if there are + // any parts of the system that are dependant on it + // DisposeSsdpHandler(); + } + return; + } + + if (!_ssdpHandlerStarted) + { + StartSsdpHandler(); + } + + var isServerStarted = _dlnaServerStarted; + if (options.EnableServer && !isServerStarted) { - StartDlnaServer(); + await StartDlnaServer().ConfigureAwait(false); } else if (!options.EnableServer && isServerStarted) { @@ -121,8 +155,9 @@ namespace MediaBrowser.Dlna.Main try { _ssdpHandler.Start(); + _ssdpHandlerStarted = true; - ((DeviceDiscovery)_deviceDiscovery).Start(_ssdpHandler); + StartDeviceDiscovery(); } catch (Exception ex) { @@ -130,11 +165,55 @@ namespace MediaBrowser.Dlna.Main } } - public void StartDlnaServer() + private void StartDeviceDiscovery() + { + try + { + ((DeviceDiscovery)_deviceDiscovery).Start(_ssdpHandler); + + //DlnaChannel.Current.Start(() => _registeredServerIds.ToList()); + } + catch (Exception ex) + { + _logger.ErrorException("Error starting device discovery", ex); + } + } + + private void DisposeDeviceDiscovery() + { + try + { + ((DeviceDiscovery)_deviceDiscovery).Dispose(); + } + catch (Exception ex) + { + _logger.ErrorException("Error stopping device discovery", ex); + } + } + + private void DisposeSsdpHandler() + { + DisposeDeviceDiscovery(); + + try + { + ((DeviceDiscovery)_deviceDiscovery).Dispose(); + + _ssdpHandler.Dispose(); + + _ssdpHandlerStarted = false; + } + catch (Exception ex) + { + _logger.ErrorException("Error stopping ssdp handlers", ex); + } + } + + public async Task StartDlnaServer() { try { - RegisterServerEndpoints(); + await RegisterServerEndpoints().ConfigureAwait(false); _dlnaServerStarted = true; } @@ -144,9 +223,9 @@ namespace MediaBrowser.Dlna.Main } } - private void RegisterServerEndpoints() + private async Task RegisterServerEndpoints() { - foreach (var address in _appHost.LocalIpAddresses) + foreach (var address in await _appHost.GetLocalIpAddresses().ConfigureAwait(false)) { //if (IPAddress.IsLoopback(address)) //{ @@ -196,7 +275,8 @@ namespace MediaBrowser.Dlna.Main _config, _userDataManager, _localization, - _mediaSourceManager); + _mediaSourceManager, + _mediaEncoder); _manager.Start(); } @@ -230,6 +310,7 @@ namespace MediaBrowser.Dlna.Main { DisposeDlnaServer(); DisposePlayToManager(); + DisposeSsdpHandler(); } public void DisposeDlnaServer() |
