From 15ec91e446ea48d46654817e619c2fd7520449d6 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sat, 21 Aug 2021 23:34:33 +0100 Subject: [PATCH] Implement track rescanning Fixes #29 --- app/playlists.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/app/playlists.py b/app/playlists.py index 9bca46b..0cb2503 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -22,6 +22,7 @@ from log import DEBUG, ERROR from model import ( Notes, Playdates, Playlists, PlaylistTracks, Session, Settings, Tracks ) +from songdb import create_track_from_file class PlaylistTab(QTableWidget): @@ -158,6 +159,8 @@ class PlaylistTab(QTableWidget): act_copypath = self.menu.addAction("Copy track path") act_copypath.triggered.connect( lambda: self._copy_path(row)) + act_rescan = self.menu.addAction("Rescan track") + act_rescan.triggered.connect(lambda: self._rescan(row)) self.menu.addSeparator() act_delete = self.menu.addAction('Delete') act_delete.triggered.connect(lambda: self._delete_row(row)) @@ -954,6 +957,24 @@ class PlaylistTab(QTableWidget): # Don't dim unplayed tracks self._set_row_bold(row) + def _rescan(self, row): + """ + If passed row is track row, rescan it. + Otherwise return None. + """ + + DEBUG(f"_rescan({row})") + + if row in self._meta_get_notes(): + return None + + track_id = self._get_row_id(row) + if track_id: + with Session() as session: + track = Tracks.get_track(session, track_id) + create_track_from_file(session, track.path) + self._update_row(row, track) + def _save_playlist(self, session): """ Save playlist to database. @@ -1099,3 +1120,28 @@ class PlaylistTab(QTableWidget): with Session() as session: return os.access(Tracks.get_path(session, track_id), os.R_OK) + + def _update_row(self, row, track): + """ + Update the passed row with info from the passed track. + """ + + DEBUG(f"_update_row({row=}, {track=}") + + item_startgap = self.item(row, self.COL_MSS) + item_startgap.setText(str(track.start_gap)) + if track.start_gap >= 500: + item_startgap.setBackground(QColor(Config.COLOUR_LONG_START)) + else: + item_startgap.setBackground(QColor("white")) + + item_title = self.item(row, self.COL_TITLE) + item_title.setText(track.title) + + item_artist = self.item(row, self.COL_ARTIST) + item_artist.setText(track.artist) + + item_duration = self.item(row, self.COL_DURATION) + item_duration.setText(helpers.ms_to_mmss(track.duration)) + + self._repaint()