aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Dlna
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-05-06 22:28:19 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-05-06 22:28:19 -0400
commit0d025f7fb620bf2a24ca9aa4e5994f132e02e7c0 (patch)
tree76137f5f868ed81725d29bbdc6ac0e3b57c304d8 /MediaBrowser.Dlna
parente1dd361c7bf05af49d9210ab679e85fa00870990 (diff)
beginning remote subtitle downloading
Diffstat (limited to 'MediaBrowser.Dlna')
-rw-r--r--MediaBrowser.Dlna/PlayTo/Device.cs4
-rw-r--r--MediaBrowser.Dlna/PlayTo/DlnaController.cs31
2 files changed, 35 insertions, 0 deletions
diff --git a/MediaBrowser.Dlna/PlayTo/Device.cs b/MediaBrowser.Dlna/PlayTo/Device.cs
index 1c7ed13b67..3e5e877cdc 100644
--- a/MediaBrowser.Dlna/PlayTo/Device.cs
+++ b/MediaBrowser.Dlna/PlayTo/Device.cs
@@ -77,6 +77,8 @@ namespace MediaBrowser.Dlna.PlayTo
private readonly ILogger _logger;
private readonly IServerConfigurationManager _config;
+ public DateTime DateLastActivity { get; private set; }
+
public Device(DeviceInfo deviceProperties, IHttpClient httpClient, ILogger logger, IServerConfigurationManager config)
{
Properties = deviceProperties;
@@ -386,6 +388,8 @@ namespace MediaBrowser.Dlna.PlayTo
{
var transportState = await GetTransportInfo().ConfigureAwait(false);
+ DateLastActivity = DateTime.UtcNow;
+
if (transportState.HasValue)
{
// If we're not playing anything no need to get additional data
diff --git a/MediaBrowser.Dlna/PlayTo/DlnaController.cs b/MediaBrowser.Dlna/PlayTo/DlnaController.cs
index fb5e0bf34f..673a7c2459 100644
--- a/MediaBrowser.Dlna/PlayTo/DlnaController.cs
+++ b/MediaBrowser.Dlna/PlayTo/DlnaController.cs
@@ -51,6 +51,8 @@ namespace MediaBrowser.Dlna.PlayTo
}
}
+ private Timer _updateTimer;
+
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;
@@ -75,6 +77,24 @@ namespace MediaBrowser.Dlna.PlayTo
_device.Start();
_ssdpHandler.MessageReceived += _SsdpHandler_MessageReceived;
+
+ _updateTimer = new Timer(updateTimer_Elapsed, null, 60000, 60000);
+ }
+
+ private async void updateTimer_Elapsed(object state)
+ {
+ if (DateTime.UtcNow >= _device.DateLastActivity.AddSeconds(60))
+ {
+ try
+ {
+ // Session is inactive, mark it for Disposal and don't start the elapsed timer.
+ await _sessionManager.ReportSessionEnded(_session.Id).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error in ReportSessionEnded", ex);
+ }
+ }
}
private string GetServerAddress()
@@ -571,10 +591,21 @@ namespace MediaBrowser.Dlna.PlayTo
_device.PlaybackStopped -= _device_PlaybackStopped;
_ssdpHandler.MessageReceived -= _SsdpHandler_MessageReceived;
+ DisposeUpdateTimer();
+
_device.Dispose();
}
}
+ private void DisposeUpdateTimer()
+ {
+ if (_updateTimer != null)
+ {
+ _updateTimer.Dispose();
+ _updateTimer = null;
+ }
+ }
+
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
public Task SendGeneralCommand(GeneralCommand command, CancellationToken cancellationToken)