status: keep track of elapsed time separately from status
updating elapsed time on a separate rate causes too many problems. this time it was current song position updating at the wrong time.
This commit is contained in:
@@ -2681,7 +2681,7 @@ void seek()
|
|||||||
Progressbar::lock();
|
Progressbar::lock();
|
||||||
Statusbar::lock();
|
Statusbar::lock();
|
||||||
|
|
||||||
unsigned songpos = Status::get().elapsedTime();
|
unsigned songpos = Status::elapsedTime();
|
||||||
auto t = Timer;
|
auto t = Timer;
|
||||||
|
|
||||||
int old_timeout = wFooter->getTimeout();
|
int old_timeout = wFooter->getTimeout();
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ size_t first_line_scroll_begin = 0;
|
|||||||
size_t second_line_scroll_begin = 0;
|
size_t second_line_scroll_begin = 0;
|
||||||
|
|
||||||
MPD::Status m_status;
|
MPD::Status m_status;
|
||||||
|
unsigned m_elapsed_time = 0;
|
||||||
|
|
||||||
// local copies of these are needed to be independent
|
// local copies of these are needed to be independent
|
||||||
// of the order of idle events incoming from MPD.
|
// of the order of idle events incoming from MPD.
|
||||||
@@ -240,6 +241,11 @@ const MPD::Status &Status::get()
|
|||||||
return m_status;
|
return m_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned Status::elapsedTime()
|
||||||
|
{
|
||||||
|
return m_elapsed_time;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
void Status::Changes::playlist(unsigned previous_version)
|
void Status::Changes::playlist(unsigned previous_version)
|
||||||
@@ -399,7 +405,7 @@ void Status::Changes::songID()
|
|||||||
void Status::Changes::elapsedTime(bool update_elapsed)
|
void Status::Changes::elapsedTime(bool update_elapsed)
|
||||||
{
|
{
|
||||||
if (update_elapsed)
|
if (update_elapsed)
|
||||||
m_status = Mpd.getStatus();
|
m_elapsed_time = Mpd.getStatus().elapsedTime();
|
||||||
const auto &st = m_status;
|
const auto &st = m_status;
|
||||||
|
|
||||||
if (st.playerState() == MPD::psStop)
|
if (st.playerState() == MPD::psStop)
|
||||||
@@ -431,17 +437,17 @@ void Status::Changes::elapsedTime(bool update_elapsed)
|
|||||||
if (Config.display_remaining_time)
|
if (Config.display_remaining_time)
|
||||||
{
|
{
|
||||||
tracklength += "-";
|
tracklength += "-";
|
||||||
tracklength += MPD::Song::ShowTime(st.totalTime()-st.elapsedTime());
|
tracklength += MPD::Song::ShowTime(st.totalTime()-m_elapsed_time);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tracklength += MPD::Song::ShowTime(st.elapsedTime());
|
tracklength += MPD::Song::ShowTime(m_elapsed_time);
|
||||||
tracklength += "/";
|
tracklength += "/";
|
||||||
tracklength += MPD::Song::ShowTime(st.totalTime());
|
tracklength += MPD::Song::ShowTime(st.totalTime());
|
||||||
tracklength += "]";
|
tracklength += "]";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tracklength += MPD::Song::ShowTime(st.elapsedTime());
|
tracklength += MPD::Song::ShowTime(m_elapsed_time);
|
||||||
tracklength += "]";
|
tracklength += "]";
|
||||||
}
|
}
|
||||||
NC::WBuffer np_song;
|
NC::WBuffer np_song;
|
||||||
@@ -455,10 +461,10 @@ void Status::Changes::elapsedTime(bool update_elapsed)
|
|||||||
if (Config.display_remaining_time)
|
if (Config.display_remaining_time)
|
||||||
{
|
{
|
||||||
tracklength = "-";
|
tracklength = "-";
|
||||||
tracklength += MPD::Song::ShowTime(st.totalTime()-st.elapsedTime());
|
tracklength += MPD::Song::ShowTime(st.totalTime()-m_elapsed_time);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tracklength = MPD::Song::ShowTime(st.elapsedTime());
|
tracklength = MPD::Song::ShowTime(m_elapsed_time);
|
||||||
if (st.totalTime())
|
if (st.totalTime())
|
||||||
{
|
{
|
||||||
tracklength += "/";
|
tracklength += "/";
|
||||||
@@ -498,7 +504,7 @@ void Status::Changes::elapsedTime(bool update_elapsed)
|
|||||||
flags();
|
flags();
|
||||||
}
|
}
|
||||||
if (Progressbar::isUnlocked())
|
if (Progressbar::isUnlocked())
|
||||||
Progressbar::draw(st.elapsedTime(), st.totalTime());
|
Progressbar::draw(m_elapsed_time, st.totalTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Status::Changes::repeat(bool show_msg)
|
void Status::Changes::repeat(bool show_msg)
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ void clear();
|
|||||||
|
|
||||||
const MPD::Status &get();
|
const MPD::Status &get();
|
||||||
|
|
||||||
|
// get current elapsed time (the one from
|
||||||
|
// the status is outdated most of the time).
|
||||||
|
unsigned elapsedTime();
|
||||||
|
|
||||||
namespace Changes {//
|
namespace Changes {//
|
||||||
|
|
||||||
void playlist(unsigned previous_version);
|
void playlist(unsigned previous_version);
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ void Statusbar::unlock()
|
|||||||
put() << wclrtoeol;
|
put() << wclrtoeol;
|
||||||
break;
|
break;
|
||||||
case Design::Alternative:
|
case Design::Alternative:
|
||||||
Progressbar::draw(Status::get().elapsedTime(), Status::get().totalTime());
|
Progressbar::draw(Status::elapsedTime(), Status::get().totalTime());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
wFooter->refresh();
|
wFooter->refresh();
|
||||||
@@ -145,7 +145,7 @@ void Statusbar::tryRedraw()
|
|||||||
Status::Changes::elapsedTime(false);
|
Status::Changes::elapsedTime(false);
|
||||||
break;
|
break;
|
||||||
case Design::Alternative:
|
case Design::Alternative:
|
||||||
Progressbar::draw(Status::get().elapsedTime(), Status::get().totalTime());
|
Progressbar::draw(Status::elapsedTime(), Status::get().totalTime());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
wFooter->refresh();
|
wFooter->refresh();
|
||||||
|
|||||||
Reference in New Issue
Block a user