diff options
Diffstat (limited to 'MediaBrowser.Dlna/PlayTo/PlayToController.cs')
| -rw-r--r-- | MediaBrowser.Dlna/PlayTo/PlayToController.cs | 59 |
1 files changed, 28 insertions, 31 deletions
diff --git a/MediaBrowser.Dlna/PlayTo/PlayToController.cs b/MediaBrowser.Dlna/PlayTo/PlayToController.cs index 34f657217..eb4eb3889 100644 --- a/MediaBrowser.Dlna/PlayTo/PlayToController.cs +++ b/MediaBrowser.Dlna/PlayTo/PlayToController.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Session; @@ -34,7 +33,7 @@ namespace MediaBrowser.Dlna.PlayTo private readonly IUserManager _userManager; private readonly IImageProcessor _imageProcessor; - private readonly SsdpHandler _ssdpHandler; + private readonly DeviceDiscovery _deviceDiscovery; private readonly string _serverAddress; public bool IsSessionActive @@ -52,7 +51,7 @@ namespace MediaBrowser.Dlna.PlayTo private Timer _updateTimer; - public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, SsdpHandler ssdpHandler, string serverAddress) + public PlayToController(SessionInfo session, ISessionManager sessionManager, IItemRepository itemRepository, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, DeviceDiscovery deviceDiscovery) { _session = session; _itemRepository = itemRepository; @@ -61,8 +60,8 @@ namespace MediaBrowser.Dlna.PlayTo _dlnaManager = dlnaManager; _userManager = userManager; _imageProcessor = imageProcessor; - _ssdpHandler = ssdpHandler; _serverAddress = serverAddress; + _deviceDiscovery = deviceDiscovery; _logger = logger; } @@ -75,33 +74,12 @@ namespace MediaBrowser.Dlna.PlayTo _device.MediaChanged += _device_MediaChanged; _device.Start(); - _ssdpHandler.MessageReceived += _SsdpHandler_MessageReceived; + _deviceDiscovery.DeviceLeft += _deviceDiscovery_DeviceLeft; _updateTimer = new Timer(updateTimer_Elapsed, null, 60000, 60000); } - private void updateTimer_Elapsed(object state) - { - if (DateTime.UtcNow >= _device.DateLastActivity.AddSeconds(120)) - { - try - { - // Session is inactive, mark it for Disposal and don't start the elapsed timer. - _sessionManager.ReportSessionEnded(_session.Id); - } - catch (Exception ex) - { - _logger.ErrorException("Error in ReportSessionEnded", ex); - } - } - } - - private string GetServerAddress() - { - return _serverAddress; - } - - void _SsdpHandler_MessageReceived(object sender, SsdpMessageEventArgs e) + void _deviceDiscovery_DeviceLeft(object sender, SsdpMessageEventArgs e) { string nts; e.Headers.TryGetValue("NTS", out nts); @@ -112,9 +90,7 @@ namespace MediaBrowser.Dlna.PlayTo string nt; 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) && - usn.IndexOf(_device.Properties.UUID, StringComparison.OrdinalIgnoreCase) != -1 && + if ( usn.IndexOf(_device.Properties.UUID, StringComparison.OrdinalIgnoreCase) != -1 && !_disposed) { if (usn.IndexOf("MediaRenderer:", StringComparison.OrdinalIgnoreCase) != -1 || @@ -132,6 +108,27 @@ namespace MediaBrowser.Dlna.PlayTo } } + private void updateTimer_Elapsed(object state) + { + if (DateTime.UtcNow >= _device.DateLastActivity.AddSeconds(120)) + { + try + { + // Session is inactive, mark it for Disposal and don't start the elapsed timer. + _sessionManager.ReportSessionEnded(_session.Id); + } + catch (Exception ex) + { + _logger.ErrorException("Error in ReportSessionEnded", ex); + } + } + } + + private string GetServerAddress() + { + return _serverAddress; + } + async void _device_MediaChanged(object sender, MediaChangedEventArgs e) { try @@ -626,7 +623,7 @@ namespace MediaBrowser.Dlna.PlayTo _device.PlaybackProgress -= _device_PlaybackProgress; _device.PlaybackStopped -= _device_PlaybackStopped; _device.MediaChanged -= _device_MediaChanged; - _ssdpHandler.MessageReceived -= _SsdpHandler_MessageReceived; + _deviceDiscovery.DeviceLeft -= _deviceDiscovery_DeviceLeft; DisposeUpdateTimer(); |
