improve elapsed time handling

this also throws away hack that was used to count elapsed
time locally while polling mpd, it's not needed anymore.
This commit is contained in:
Andrzej Rybczak
2009-10-30 20:04:47 +01:00
parent b6059e2255
commit 0a95aebd7c
3 changed files with 12 additions and 23 deletions

View File

@@ -217,22 +217,13 @@ void Connection::UpdateStatus()
if (supportsIdle)
{
// sync local elapsed time counter with mpd
unsigned old_elapsed = itsElapsed;
itsElapsed = mpd_status_get_elapsed_time(itsCurrentStatus);
itsChanges.ElapsedTime = itsElapsed != old_elapsed;
time(&itsElapsedTimer[0]);
}
else
{
time(&itsElapsedTimer[0]);
if (itsElapsedTimer[0] > itsElapsedTimer[1])
{
unsigned mpd_elapsed = mpd_status_get_elapsed_time(itsCurrentStatus);
if (itsElapsed < mpd_elapsed-2 || itsElapsed+1 > mpd_elapsed)
itsElapsed = mpd_elapsed;
else if (Mpd.GetState() == psPlay)
++itsElapsed;
time(&itsElapsedTimer[1]);
}
}
itsElapsed = mpd_status_get_elapsed_time(itsCurrentStatus);
if (!itsOldStatus)
{
@@ -267,6 +258,9 @@ void Connection::UpdateStatus()
itsChanges.Playlist = mpd_status_get_queue_version(itsOldStatus)
!= mpd_status_get_queue_version(itsCurrentStatus);
itsChanges.ElapsedTime = mpd_status_get_elapsed_time(itsOldStatus)
!= mpd_status_get_elapsed_time(itsCurrentStatus);
itsChanges.Database = mpd_status_get_update_id(itsOldStatus)
&& !mpd_status_get_update_id(itsCurrentStatus);
@@ -291,9 +285,6 @@ void Connection::UpdateStatus()
itsChanges.SongID = mpd_status_get_song_id(itsOldStatus)
!= mpd_status_get_song_id(itsCurrentStatus);
itsChanges.ElapsedTime = mpd_status_get_elapsed_time(itsOldStatus)
!= mpd_status_get_elapsed_time(itsCurrentStatus);
itsChanges.Crossfade = mpd_status_get_crossfade(itsOldStatus)
!= mpd_status_get_crossfade(itsCurrentStatus);

View File

@@ -126,7 +126,8 @@ namespace MPD
bool isPlaying() const { return GetState() > psStop; }
PlayerState GetState() const{ return itsCurrentStatus ? PlayerState(mpd_status_get_state(itsCurrentStatus)) : psUnknown; }
PlayerState GetState() const { return itsCurrentStatus ? PlayerState(mpd_status_get_state(itsCurrentStatus)) : psUnknown; }
PlayerState GetOldState() const { return itsOldStatus ? PlayerState(mpd_status_get_state(itsOldStatus)) : psUnknown; }
bool GetRepeat() const { return itsCurrentStatus ? mpd_status_get_repeat(itsCurrentStatus) : 0; }
bool GetRandom() const { return itsCurrentStatus ? mpd_status_get_random(itsCurrentStatus) : 0; }
bool GetSingle() const { return itsCurrentStatus ? mpd_status_get_single(itsCurrentStatus) : 0; }

View File

@@ -321,13 +321,13 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
WindowTitle(utf_to_locale_cpy(np.toString(Config.song_window_title_format)));
player_state = Config.new_design ? "[playing]" : "Playing: ";
Playlist::ReloadRemaining = 1;
changed.ElapsedTime = 1;
if (Mpd.GetOldState() == psStop) // show track info in status immediately
changed.ElapsedTime = 1;
break;
}
case psPause:
{
player_state = Config.new_design ? "[paused] " : "[Paused] ";
changed.ElapsedTime = 1;
break;
}
case psStop:
@@ -355,11 +355,8 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
}
if (Config.new_design)
{
if (!myPlaylist->isPlaying())
{
*wHeader << XY(0, 1) << fmtBold << player_state << fmtBoldEnd;
wHeader->Refresh();
}
*wHeader << XY(0, 1) << fmtBold << player_state << fmtBoldEnd;
wHeader->Refresh();
}
else if (!block_statusbar_update && Config.statusbar_visibility && player_state.empty())
*wFooter << XY(0, 1) << wclrtoeol;