diff --git a/src/actions.cpp b/src/actions.cpp index 85312ce6..1dc2454c 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -2681,7 +2681,7 @@ void seek() Progressbar::lock(); Statusbar::lock(); - unsigned songpos = Status::get().elapsedTime(); + unsigned songpos = Status::elapsedTime(); auto t = Timer; int old_timeout = wFooter->getTimeout(); diff --git a/src/status.cpp b/src/status.cpp index 1ceb3b76..83377e08 100644 --- a/src/status.cpp +++ b/src/status.cpp @@ -56,6 +56,7 @@ size_t first_line_scroll_begin = 0; size_t second_line_scroll_begin = 0; MPD::Status m_status; +unsigned m_elapsed_time = 0; // local copies of these are needed to be independent // of the order of idle events incoming from MPD. @@ -240,6 +241,11 @@ const MPD::Status &Status::get() return m_status; } +unsigned Status::elapsedTime() +{ + return m_elapsed_time; +} + /*************************************************************************/ void Status::Changes::playlist(unsigned previous_version) @@ -399,7 +405,7 @@ void Status::Changes::songID() void Status::Changes::elapsedTime(bool update_elapsed) { if (update_elapsed) - m_status = Mpd.getStatus(); + m_elapsed_time = Mpd.getStatus().elapsedTime(); const auto &st = m_status; if (st.playerState() == MPD::psStop) @@ -431,17 +437,17 @@ void Status::Changes::elapsedTime(bool update_elapsed) if (Config.display_remaining_time) { tracklength += "-"; - tracklength += MPD::Song::ShowTime(st.totalTime()-st.elapsedTime()); + tracklength += MPD::Song::ShowTime(st.totalTime()-m_elapsed_time); } else - tracklength += MPD::Song::ShowTime(st.elapsedTime()); + tracklength += MPD::Song::ShowTime(m_elapsed_time); tracklength += "/"; tracklength += MPD::Song::ShowTime(st.totalTime()); tracklength += "]"; } else { - tracklength += MPD::Song::ShowTime(st.elapsedTime()); + tracklength += MPD::Song::ShowTime(m_elapsed_time); tracklength += "]"; } NC::WBuffer np_song; @@ -455,10 +461,10 @@ void Status::Changes::elapsedTime(bool update_elapsed) if (Config.display_remaining_time) { tracklength = "-"; - tracklength += MPD::Song::ShowTime(st.totalTime()-st.elapsedTime()); + tracklength += MPD::Song::ShowTime(st.totalTime()-m_elapsed_time); } else - tracklength = MPD::Song::ShowTime(st.elapsedTime()); + tracklength = MPD::Song::ShowTime(m_elapsed_time); if (st.totalTime()) { tracklength += "/"; @@ -498,7 +504,7 @@ void Status::Changes::elapsedTime(bool update_elapsed) flags(); } if (Progressbar::isUnlocked()) - Progressbar::draw(st.elapsedTime(), st.totalTime()); + Progressbar::draw(m_elapsed_time, st.totalTime()); } void Status::Changes::repeat(bool show_msg) diff --git a/src/status.h b/src/status.h index 9dd77111..61fef8f9 100644 --- a/src/status.h +++ b/src/status.h @@ -36,6 +36,10 @@ void clear(); const MPD::Status &get(); +// get current elapsed time (the one from +// the status is outdated most of the time). +unsigned elapsedTime(); + namespace Changes {// void playlist(unsigned previous_version); diff --git a/src/statusbar.cpp b/src/statusbar.cpp index 561ac42e..a7c99c83 100644 --- a/src/statusbar.cpp +++ b/src/statusbar.cpp @@ -112,7 +112,7 @@ void Statusbar::unlock() put() << wclrtoeol; break; case Design::Alternative: - Progressbar::draw(Status::get().elapsedTime(), Status::get().totalTime()); + Progressbar::draw(Status::elapsedTime(), Status::get().totalTime()); break; } wFooter->refresh(); @@ -145,7 +145,7 @@ void Statusbar::tryRedraw() Status::Changes::elapsedTime(false); break; case Design::Alternative: - Progressbar::draw(Status::get().elapsedTime(), Status::get().totalTime()); + Progressbar::draw(Status::elapsedTime(), Status::get().totalTime()); break; } wFooter->refresh();