fix(mpd): use timers with second granularity where possible

Reuse already armed timer in Disconnected state.
This commit is contained in:
Aleksei Bavshin
2024-03-01 00:06:54 -08:00
parent 653c24cee1
commit bb60d41842
3 changed files with 16 additions and 11 deletions

View File

@@ -119,7 +119,7 @@ bool Idle::on_io(Glib::IOCondition const&) {
void Playing::entry() noexcept {
sigc::slot<bool> timer_slot = sigc::mem_fun(*this, &Playing::on_timer);
timer_connection_ = Glib::signal_timeout().connect(timer_slot, /* milliseconds */ 1'000);
timer_connection_ = Glib::signal_timeout().connect_seconds(timer_slot, 1);
spdlog::debug("mpd: Playing: enabled 1 second periodic timer.");
}
@@ -327,14 +327,20 @@ void Stopped::pause() {
void Stopped::update() noexcept { ctx_->do_update(); }
void Disconnected::arm_timer(int interval) noexcept {
bool Disconnected::arm_timer(int interval) noexcept {
// check if it's necessary to modify the timer
if (timer_connection_ && last_interval_ == interval) {
return true;
}
// unregister timer, if present
disarm_timer();
// register timer
last_interval_ = interval;
sigc::slot<bool> timer_slot = sigc::mem_fun(*this, &Disconnected::on_timer);
timer_connection_ = Glib::signal_timeout().connect(timer_slot, interval);
spdlog::debug("mpd: Disconnected: enabled interval timer.");
timer_connection_ = Glib::signal_timeout().connect_seconds(timer_slot, interval);
spdlog::debug("mpd: Disconnected: enabled {}s interval timer.", interval);
return false;
}
void Disconnected::disarm_timer() noexcept {
@@ -347,7 +353,7 @@ void Disconnected::disarm_timer() noexcept {
void Disconnected::entry() noexcept {
ctx_->emit();
arm_timer(1'000);
arm_timer(1 /* second */);
}
void Disconnected::exit() noexcept { disarm_timer(); }
@@ -376,9 +382,7 @@ bool Disconnected::on_timer() {
spdlog::warn("mpd: Disconnected: error: {}", e.what());
}
arm_timer(ctx_->interval() * 1'000);
return false;
return arm_timer(ctx_->interval());
}
void Disconnected::update() noexcept { ctx_->do_update(); }