From e2b59c6c11315d33bd8e15d633e56f1def00d8a7 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Sun, 5 Nov 2023 14:10:18 +0100 Subject: [PATCH] player bar: Fix substraction overflow --- src/player_bar.rs | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/player_bar.rs b/src/player_bar.rs index bc24d0f..c73a582 100644 --- a/src/player_bar.rs +++ b/src/player_bar.rs @@ -38,7 +38,7 @@ mod imp { } impl PlayerBar { - fn update(&self) { + fn update_item(&self) { if let Some(item) = self.player.borrow().current_item() { self.title_label.set_label(&item.make_title()); @@ -50,6 +50,20 @@ mod imp { } } } + + fn update_time(&self) { + let player = self.player.borrow(); + + self.current_time_label + .set_label(&format_time(player.current_time_ms())); + + self.remaining_time_label.set_label(&format_time( + player + .duration_ms() + .checked_sub(player.current_time_ms()) + .unwrap_or(0), + )); + } } #[glib::object_subclass] @@ -99,22 +113,18 @@ mod imp { let obj = self.obj().clone(); - player.connect_current_index_notify(clone!(@weak obj => move |_| obj.imp().update())); + player.connect_current_index_notify( + clone!(@weak obj => move |_| obj.imp().update_item()), + ); + player.playlist().connect_items_changed( + clone!(@weak obj => move |_, _, _, _| obj.imp().update_item()), + ); + + player.connect_current_time_ms_notify( + clone!(@weak obj => move |_| obj.imp().update_time()), + ); player - .playlist() - .connect_items_changed(clone!(@weak obj => move |_, _, _, _| obj.imp().update())); - - player.connect_current_time_ms_notify(clone!(@weak obj => move |player| { - let imp = obj.imp(); - imp.current_time_label.set_label(&format_time(player.current_time_ms())); - imp.remaining_time_label.set_label(&format_time(player.duration_ms() - player.current_time_ms())); - })); - - player.connect_duration_ms_notify(clone!(@weak obj => move |player| { - let imp = obj.imp(); - imp.current_time_label.set_label(&format_time(player.current_time_ms())); - imp.remaining_time_label.set_label(&format_time(player.duration_ms() - player.current_time_ms())); - })); + .connect_duration_ms_notify(clone!(@weak obj => move |_| obj.imp().update_time())); player .bind_property("position", &self.slider.adjustment(), "value")