From 5ba70c9c6fd700cf7891a5445af166c8b1cb32dd Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sat, 13 Aug 2022 11:06:20 +0100 Subject: [PATCH] Copy escaped track path --- app/playlists.py | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/app/playlists.py b/app/playlists.py index ad6ac62..06193ba 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -15,7 +15,7 @@ from PyQt5.QtGui import ( ) from PyQt5.QtWidgets import ( QAbstractItemView, - # QApplication, + QApplication, # QInputDialog, # QLineEdit, QMainWindow, @@ -266,6 +266,9 @@ class PlaylistTab(QTableWidget): act_info.triggered.connect( lambda: self._info_row(track_id) ) + act_copypath = self.menu.addAction("Copy track path") + act_copypath.triggered.connect( + lambda: self._copy_path(row_number)) self.menu.addSeparator() @@ -1140,24 +1143,27 @@ class PlaylistTab(QTableWidget): assert self.menu self.menu.exec_(self.mapToGlobal(pos)) -# -# def _copy_path(self, row: int) -> None: -# """ -# If passed row is track row, copy the track path to the clipboard. -# Otherwise, return None. -# """ -# -# log.debug(f"_copy_path({row})") -# -# if row in self._get_notes_rows(): -# return None -# -# with Session() as session: -# track: Optional[Tracks] = self._get_row_track_object(row, session) -# if track: -# cb = QApplication.clipboard() -# cb.clear(mode=cb.Clipboard) -# cb.setText(track.path, mode=cb.Clipboard) + + def _copy_path(self, row: int) -> None: + """ + If passed row has a track, copy the track path, single-quoted, + to the clipboard. Otherwise, return None. + """ + + track_id = self._get_row_track_id(row) + if track_id is None: + return + + with Session() as session: + track = session.get(Tracks, track_id) + if track: + # Escape single quotes and spaces in name + path = track.path + pathq = path.replace("'", "\\'") + pathqs = pathq.replace(" ", "\\ ") + cb = QApplication.clipboard() + cb.clear(mode=cb.Clipboard) + cb.setText(pathqs, mode=cb.Clipboard) # # def _cell_changed(self, row: int, column: int) -> None: # """Called when cell content has changed"""