Revert "Improved polling and Session handling"

This reverts commit 5a1bdc578bf8440cf5ea59555f6ad3ca707768e3.
This commit is contained in:
7illusions 2014-03-10 11:10:16 +01:00
parent 6bbf2d115e
commit d6d1c3839a
3 changed files with 1489 additions and 1535 deletions

View File

@ -76,8 +76,8 @@ namespace MediaBrowser.Dlna.PlayTo
_transportState = value; _transportState = value;
if (value == TRANSPORTSTATE.PLAYING || value == TRANSPORTSTATE.STOPPED) if (value == "PLAYING" || value == "STOPPED")
NotifyPlaybackChanged(value == TRANSPORTSTATE.STOPPED); NotifyPlaybackChanged(value == "STOPPED");
} }
} }
@ -85,7 +85,7 @@ namespace MediaBrowser.Dlna.PlayTo
{ {
get get
{ {
return TransportState == TRANSPORTSTATE.PLAYING; return TransportState == "PLAYING";
} }
} }
@ -93,7 +93,7 @@ namespace MediaBrowser.Dlna.PlayTo
{ {
get get
{ {
return (TransportState == TRANSPORTSTATE.TRANSITIONING); return (TransportState == "TRANSITIONING");
} }
} }
@ -101,7 +101,7 @@ namespace MediaBrowser.Dlna.PlayTo
{ {
get get
{ {
return TransportState == TRANSPORTSTATE.PAUSED || TransportState == TRANSPORTSTATE.PAUSED_PLAYBACK; return TransportState == "PAUSED" || TransportState == "PAUSED_PLAYBACK";
} }
} }
@ -109,7 +109,7 @@ namespace MediaBrowser.Dlna.PlayTo
{ {
get get
{ {
return TransportState == TRANSPORTSTATE.STOPPED; return (TransportState == "STOPPED");
} }
} }
@ -127,39 +127,23 @@ namespace MediaBrowser.Dlna.PlayTo
_logger = logger; _logger = logger;
} }
private int GetPlaybackTimerIntervalMs() private int GetTimerIntervalMs()
{ {
return 2000; return 10000;
}
private int GetInactiveTimerIntervalMs()
{
return 20000;
} }
public void Start() public void Start()
{ {
UpdateTime = DateTime.UtcNow; UpdateTime = DateTime.UtcNow;
var interval = GetPlaybackTimerIntervalMs(); var interval = GetTimerIntervalMs();
_timer = new Timer(TimerCallback, null, interval, interval); _timer = new Timer(TimerCallback, null, interval, interval);
} }
private void RestartTimer() private void RestartTimer()
{ {
var interval = GetPlaybackTimerIntervalMs(); var interval = GetTimerIntervalMs();
_timer.Change(interval, interval);
}
/// <summary>
/// Restarts the timer in inactive mode.
/// </summary>
private void RestartTimerInactive()
{
var interval = GetInactiveTimerIntervalMs();
_timer.Change(interval, interval); _timer.Change(interval, interval);
} }
@ -246,9 +230,11 @@ namespace MediaBrowser.Dlna.PlayTo
{ {
StopTimer(); StopTimer();
await SetStop().ConfigureAwait(false); TransportState = "STOPPED";
CurrentId = "0"; CurrentId = "0";
await Task.Delay(50).ConfigureAwait(false);
var command = AvCommands.ServiceActions.FirstOrDefault(c => c.Name == "SetAVTransportURI"); var command = AvCommands.ServiceActions.FirstOrDefault(c => c.Name == "SetAVTransportURI");
if (command == null) if (command == null)
return false; return false;
@ -275,7 +261,7 @@ namespace MediaBrowser.Dlna.PlayTo
await SetPlay().ConfigureAwait(false); await SetPlay().ConfigureAwait(false);
} }
_lapsCount = SetLapsCountToFull(); _count = 5;
RestartTimer(); RestartTimer();
return true; return true;
@ -336,7 +322,7 @@ namespace MediaBrowser.Dlna.PlayTo
var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType, 1)) var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType, 1))
.ConfigureAwait(false); .ConfigureAwait(false);
_lapsCount = SetLapsCountToFull(); _count = 5;
return true; return true;
} }
@ -352,6 +338,7 @@ namespace MediaBrowser.Dlna.PlayTo
.ConfigureAwait(false); .ConfigureAwait(false);
await Task.Delay(50).ConfigureAwait(false); await Task.Delay(50).ConfigureAwait(false);
_count = 4;
return true; return true;
} }
@ -375,13 +362,8 @@ namespace MediaBrowser.Dlna.PlayTo
#region Get data #region Get data
private int GetLapsCount() // TODO: What is going on here
{ int _count = 5;
// No need to get all data every lap, just every X time.
return 10;
}
int _lapsCount = 0;
private async void TimerCallback(object sender) private async void TimerCallback(object sender)
{ {
@ -391,25 +373,19 @@ namespace MediaBrowser.Dlna.PlayTo
StopTimer(); StopTimer();
try try
{
await GetTransportInfo().ConfigureAwait(false);
//If we're not playing anything no need to get additional data
if (TransportState != TRANSPORTSTATE.STOPPED)
{ {
var hasTrack = await GetPositionInfo().ConfigureAwait(false); var hasTrack = await GetPositionInfo().ConfigureAwait(false);
// TODO: Why make these requests if hasTrack==false? // TODO: Why make these requests if hasTrack==false?
// TODO ANSWER Some vendors don't include track in GetPositionInfo, use GetMediaInfo instead. if (_count > 5)
if (_lapsCount > GetLapsCount())
{ {
await GetTransportInfo().ConfigureAwait(false);
if (!hasTrack) if (!hasTrack)
{ {
await GetMediaInfo().ConfigureAwait(false); await GetMediaInfo().ConfigureAwait(false);
} }
await GetVolume().ConfigureAwait(false); await GetVolume().ConfigureAwait(false);
_lapsCount = 0; _count = 0;
}
} }
} }
catch (Exception ex) catch (Exception ex)
@ -417,16 +393,11 @@ namespace MediaBrowser.Dlna.PlayTo
_logger.ErrorException("Error updating device info", ex); _logger.ErrorException("Error updating device info", ex);
} }
_lapsCount++; _count++;
if (_disposed) if (_disposed)
return; return;
//If we're not playing anything make sure we don't get data more often than neccessry to keep the Session alive
if (TransportState != TRANSPORTSTATE.STOPPED)
RestartTimer(); RestartTimer();
else
RestartTimerInactive();
} }
private async Task GetVolume() private async Task GetVolume()
@ -776,15 +747,5 @@ namespace MediaBrowser.Dlna.PlayTo
{ {
return String.Format("{0} - {1}", Properties.Name, Properties.BaseUrl); return String.Format("{0} - {1}", Properties.Name, Properties.BaseUrl);
} }
private class TRANSPORTSTATE
{
public const string STOPPED = "STOPPED";
public const string PLAYING = "PLAYING";
public const string TRANSITIONING = "TRANSITIONING";
public const string PAUSED_PLAYBACK = "PAUSED_PLAYBACK";
public const string PAUSED = "PAUSED";
}
} }
} }

View File

@ -131,14 +131,6 @@ namespace MediaBrowser.Dlna.PlayTo
((Timer)sender).Stop(); ((Timer)sender).Stop();
if(!IsSessionActive)
{
//Session is inactive, mark it for Disposal and don't start the elapsed timer.
await _sessionManager.ReportSessionEnded(this._session.Id);
return;
}
await ReportProgress().ConfigureAwait(false); await ReportProgress().ConfigureAwait(false);
if (!_disposed && IsSessionActive) if (!_disposed && IsSessionActive)

View File

@ -1,8 +1,6 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013 # Visual Studio 2012
VisualStudioVersion = 12.0.21005.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Controller", "MediaBrowser.Controller\MediaBrowser.Controller.csproj", "{17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Controller", "MediaBrowser.Controller\MediaBrowser.Controller.csproj", "{17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Api", "MediaBrowser.Api\MediaBrowser.Api.csproj", "{4FD51AC5-2C16-4308-A993-C3A84F3B4582}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Api", "MediaBrowser.Api\MediaBrowser.Api.csproj", "{4FD51AC5-2C16-4308-A993-C3A84F3B4582}"
@ -253,4 +251,7 @@ Global
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
EndGlobal EndGlobal