From 09fdd7e4dc9526ab81079f3a9cc8d7c3ede0fc4b Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sun, 2 Jun 2024 16:50:49 +0100 Subject: [PATCH] Display of countdown timer works --- app/musicmuster.py | 67 ++++++++++++++++++--------------------------- app/trackmanager.py | 11 ++++++++ 2 files changed, 37 insertions(+), 41 deletions(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index e88f99b..4dcc93e 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -1000,7 +1000,7 @@ class Window(QMainWindow, Ui_MainWindow): # when starting to play at track. # Resolution appears to be to disable timer10 for the first ten - # seconds of playback. Re-enabled tick_1000ms + # seconds of playback. Re-enable in update_clocks. self.timer10.stop() log.debug("10ms timer disabled", 0) @@ -1478,54 +1478,32 @@ class Window(QMainWindow, Ui_MainWindow): if track_sequence.current: track_sequence.current.update_fade_graph() - def tick_500ms(self) -> None: - """ - Called every 500ms - """ - - self.lblTOD.setText(dt.datetime.now().strftime(Config.TOD_TIME_FORMAT)) - def tick_100ms(self) -> None: """ Called every 100ms """ if track_sequence.current: - track_sequence.current.check_for_end_of_track() + try: + track_sequence.current.check_for_end_of_track() - return - # Update intro counter if applicable and, if updated, return - # because playing an intro takes precedence over timing a - # preview. - if self.music.is_playing() and track_sequence.current.intro: - remaining_ms = track_sequence.current.intro - self.music.get_playtime() - if remaining_ms > 0: - self.label_intro_timer.setText(f"{remaining_ms / 1000:.1f}") - if remaining_ms <= Config.INTRO_SECONDS_WARNING_MS: - self.label_intro_timer.setStyleSheet( - f"background: {Config.COLOUR_WARNING_TIMER}" - ) - return - else: - self.label_intro_timer.setStyleSheet("") + # Update intro counter if applicable and, if updated, return + # because playing an intro takes precedence over timing a + # preview. + remaining_ms = track_sequence.current.time_remaining_intro() + if remaining_ms > 0: + self.label_intro_timer.setText(f"{remaining_ms / 1000:.1f}") + if remaining_ms <= Config.INTRO_SECONDS_WARNING_MS: + self.label_intro_timer.setStyleSheet( + f"background: {Config.COLOUR_WARNING_TIMER}" + ) + return + else: + self.label_intro_timer.setStyleSheet("") + except AttributeError: + # currnent track ended during servicing tick + pass - # Ensure preview button is reset if preview finishes playing - self.btnPreview.setChecked(self.preview_player.is_playing()) - - # Update preview timer - if self.preview_player.is_playing(): - playtime = self.preview_player.get_playtime() - self.label_intro_timer.setText(f"{playtime / 1000:.1f}") - if playtime <= 0: - self.label_intro_timer.setStyleSheet( - f"background: {Config.COLOUR_ENDING_TIMER}" - ) - elif playtime <= Config.INTRO_SECONDS_WARNING_MS: - self.label_intro_timer.setStyleSheet( - f"background: {Config.COLOUR_WARNING_TIMER}" - ) - else: - self.label_intro_timer.setText("0.0") def tick_1000ms(self) -> None: """ @@ -1537,6 +1515,13 @@ class Window(QMainWindow, Ui_MainWindow): self.update_clocks() + def tick_500ms(self) -> None: + """ + Called every 500ms + """ + + self.lblTOD.setText(dt.datetime.now().strftime(Config.TOD_TIME_FORMAT)) + def update_clocks(self) -> None: """ Update track clocks. diff --git a/app/trackmanager.py b/app/trackmanager.py index 5370e83..974a3cb 100644 --- a/app/trackmanager.py +++ b/app/trackmanager.py @@ -503,6 +503,17 @@ class _TrackManager: return self.player.get_playtime() + def time_remaining_intro(self) -> int: + """ + Return milliseconds of intro remaining. Return 0 if no intro time in track + record or if intro has finished. + """ + + if not self.intro: + return 0 + + return max(0, self.intro - self.time_playing()) + def time_to_fade(self) -> int: """ Return milliseconds until fade time. Return zero if we're not playing.