From 762a41bec671186593398291d012d5ab31b562ae Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sat, 21 Aug 2021 14:22:55 +0100 Subject: [PATCH] Add total time of selected tracks to status bar --- app/musicmuster.py | 2 ++ app/playlists.py | 25 ++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index 4bbd4e8..f04ba4e 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -71,6 +71,8 @@ class Window(QMainWindow, Ui_MainWindow): self.menuTest.menuAction().setVisible(Config.TESTMODE) self.set_main_window_size() + self.lblSumPlaytime = QLabel("") + self.statusbar.addPermanentWidget(self.lblSumPlaytime) self.visible_playlist_tab = self.tabPlaylist.currentWidget diff --git a/app/playlists.py b/app/playlists.py index 818e0c9..2796a15 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -89,6 +89,8 @@ class PlaylistTab(QTableWidget): self.customContextMenuRequested.connect(self._context_menu) self.viewport().installEventFilter(self) + self.itemSelectionChanged.connect(self._select_event) + self.current_track_start_time = None self.played_tracks = [] @@ -1001,8 +1003,29 @@ class PlaylistTab(QTableWidget): PlaylistTracks.add_track( session, self.id, self._get_row_id(row), row) - def _set_column_widths(self): + def _select_event(self): + """ + Called when item selection changes. + If multiple rows are selected, display sum of durations in status bar. + """ + # Clear label + self.master_process.lblSumPlaytime.setText("") + + rows = set([item.row() for item in self.selectedItems()]) + notes = self._meta_get_notes() + ms = 0 + with Session() as session: + for row in rows: + if row in notes: + continue + ms += Tracks.get_duration(session, self._get_row_id(row)) + # Only paint message if there are selected track rows + if ms > 0: + self.master_process.lblSumPlaytime.setText( + f"Selected duration: {helpers.ms_to_mmss(ms)}") + + def _set_column_widths(self): # Column widths from settings with Session() as session: for column in range(self.columnCount()):