From 68a253bc7c1c7f9d32336def1c8868f484a4cbb0 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sat, 6 Jul 2024 20:35:06 +0100 Subject: [PATCH] Improve type hints, other minor edits --- app/musicmuster.py | 6 +++--- app/trackmanager.py | 48 ++++++++++++++++++++++++++++----------------- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index 86b94ab..c116019 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -157,8 +157,8 @@ class PreviewManager: self.intro: Optional[int] = None self.path: str = "" self.row_number: Optional[int] = None - self.track_id: int = 0 self.start_time: Optional[dt.datetime] = None + self.track_id: int = 0 def back(self, ms: int) -> None: """ @@ -220,7 +220,7 @@ class PreviewManager: if not mixer.music.get_busy(): return - mixer.music.set_pos(0) + mixer.music.rewind() self.start_time = dt.datetime.now() def set_intro(self, ms: int) -> None: @@ -1246,7 +1246,7 @@ class Window(QMainWindow, Ui_MainWindow): Create log entry """ - log.debug("quicklog") + log.debug("quicklog timestamp; entry follows") # Get log text dlg: QInputDialog = QInputDialog(self) diff --git a/app/trackmanager.py b/app/trackmanager.py index cbf7cc9..f6dd3c7 100644 --- a/app/trackmanager.py +++ b/app/trackmanager.py @@ -19,6 +19,9 @@ from PyQt6.QtCore import ( QThread, QThreadPool, ) +from pyqtgraph import PlotWidget +from pyqtgraph.graphicsItems.PlotDataItem import PlotDataItem # type: ignore +from pyqtgraph.graphicsItems.LinearRegionItem import LinearRegionItem # type: ignore # App imports from classes import MusicMusterSignals @@ -68,7 +71,7 @@ class _AddFadeCurve(QObject): class _FadeCurve: - GraphWidget = None + GraphWidget: Optional[PlotWidget] = None def __init__( self, track_path: str, track_fade_at: int, track_silence_at: int @@ -94,7 +97,8 @@ class _FadeCurve: # Calculate the factor to map milliseconds of track to array self.ms_to_array_factor = len(self.graph_array) / (self.end_ms - self.start_ms) - self.region = None + self.curve: Optional[PlotDataItem] = None + self.region: Optional[LinearRegionItem] = None def clear(self) -> None: """Clear the current graph""" @@ -105,7 +109,8 @@ class _FadeCurve: def plot(self) -> None: if self.GraphWidget: self.curve = self.GraphWidget.plot(self.graph_array) - self.curve.setPen(Config.FADE_CURVE_FOREGROUND) + if self.curve: + self.curve.setPen(Config.FADE_CURVE_FOREGROUND) def tick(self, play_time) -> None: """Update volume fade curve""" @@ -124,15 +129,16 @@ class _FadeCurve: self.GraphWidget.addItem(self.region) # Update region position - log.debug("issue223: _FadeCurve: update region") - self.region.setRegion([0, ms_of_graph * self.ms_to_array_factor]) + if self.region: + log.debug("issue223: _FadeCurve: update region") + self.region.setRegion([0, ms_of_graph * self.ms_to_array_factor]) class _FadeTrack(QRunnable): def __init__(self, player: vlc.MediaPlayer, fade_seconds) -> None: super().__init__() - self.player = player - self.fade_seconds = fade_seconds + self.player: vlc.MediaPlayer = player + self.fade_seconds: int = fade_seconds def run(self) -> None: """ @@ -168,9 +174,9 @@ class _Music: def __init__(self, name) -> None: self.VLC = vlc.Instance() self.VLC.set_user_agent(name, name) - self.player = None - self.name = name - self.max_volume = Config.VLC_VOLUME_DEFAULT + self.player: Optional[vlc.MediaPlayer] = None + self.name: str = name + self.max_volume: int = Config.VLC_VOLUME_DEFAULT self.start_dt: Optional[dt.datetime] = None def adjust_by_ms(self, ms: int) -> None: @@ -182,14 +188,17 @@ class _Music: elapsed_ms = self.get_playtime() position = self.get_position() if not position: - position = 0 - new_position = max(0, position + ((position * ms) / elapsed_ms)) + position = 0.0 + new_position = max(0.0, position + ((position * ms) / elapsed_ms)) self.set_position(new_position) # Adjus start time so elapsed time calculations are correct if new_position == 0: self.start_dt = dt.datetime.now() else: - self.start_dt -= dt.timedelta(milliseconds=ms) + if self.start_dt: + self.start_dt -= dt.timedelta(milliseconds=ms) + else: + self.start_dt = dt.datetime.now() - dt.timedelta(milliseconds=ms) def stop(self) -> None: """Immediately stop playing""" @@ -235,9 +244,12 @@ class _Music: self.player = None pool = QThreadPool.globalInstance() - fader = _FadeTrack(p, fade_seconds=fade_seconds) - pool.start(fader) - self.start_dt = None + if pool: + fader = _FadeTrack(p, fade_seconds=fade_seconds) + pool.start(fader) + self.start_dt = None + else: + log.error("_Music: failed to allocate QThreadPool") def get_playtime(self) -> int: """ @@ -323,7 +335,7 @@ class _Music: log.error(f"Reset from {volume=}") sleep(0.1) - def set_position(self, position: int) -> None: + def set_position(self, position: float) -> None: """ Set player position """ @@ -339,7 +351,7 @@ class _Music: if not self.player: return - if set_default: + if set_default and volume: self.max_volume = volume if volume is None: