Copy/paste, insert track/header works
This commit is contained in:
parent
647e7d478a
commit
46f2b662f3
@ -759,7 +759,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
if ok:
|
||||
with Session() as session:
|
||||
playlist_tab.insert_header(session, dlg.textValue())
|
||||
self.save_playlist(session)
|
||||
playlist_tab.save_playlist(session)
|
||||
|
||||
def insert_track(self) -> None:
|
||||
"""Show dialog box to select and add track from database"""
|
||||
|
||||
103
app/playlists.py
103
app/playlists.py
@ -595,45 +595,31 @@ class PlaylistTab(QTableWidget):
|
||||
to do the heavy lifing.
|
||||
"""
|
||||
|
||||
# PlaylistRows object requires a row number, but that number
|
||||
# can be reset by calling PlaylistRows.fixup_rownumbers() later,
|
||||
# so just fudge a row number for now.
|
||||
row_number = 0
|
||||
row_number = self.get_new_row_number()
|
||||
plr = PlaylistRows(session, self.playlist_id, None, row_number, note)
|
||||
self.insert_row(session, plr)
|
||||
PlaylistRows.fixup_rownumbers(session, self.playlist_id)
|
||||
if repaint:
|
||||
self.update_display(session, clear_selection=False)
|
||||
self.insert_row(session, plr, repaint)
|
||||
self.save_playlist(session)
|
||||
|
||||
def insert_row(self, session: Session, row_data: PlaylistRows,
|
||||
def insert_row(self, session: Session, plr: PlaylistRows,
|
||||
repaint: bool = True) -> None:
|
||||
"""
|
||||
Insert a row into playlist tab.
|
||||
|
||||
If playlist has a row selected, add new row above. Otherwise,
|
||||
add to end of playlist.
|
||||
|
||||
Note: we ignore the row number in the PlaylistRows record. That is
|
||||
used only to order the query that generates the records.
|
||||
Insert passed playlist row (plr) into playlist tab.
|
||||
"""
|
||||
|
||||
if self.selectionModel().hasSelection():
|
||||
row = self.currentRow()
|
||||
else:
|
||||
row = self.rowCount()
|
||||
row = plr.row_number
|
||||
self.insertRow(row)
|
||||
|
||||
# Add row metadata to userdata column
|
||||
userdata_item = QTableWidgetItem()
|
||||
userdata_item.setData(self.ROW_FLAGS, 0)
|
||||
userdata_item.setData(self.PLAYLISTROW_ID, row_data.id)
|
||||
userdata_item.setData(self.ROW_TRACK_ID, row_data.track_id)
|
||||
userdata_item.setData(self.PLAYLISTROW_ID, plr.id)
|
||||
userdata_item.setData(self.ROW_TRACK_ID, plr.track_id)
|
||||
self.setItem(row, USERDATA, userdata_item)
|
||||
|
||||
if row_data.track_id:
|
||||
if plr.track_id:
|
||||
# Add track details to items
|
||||
try:
|
||||
start_gap = row_data.track.start_gap
|
||||
start_gap = plr.track.start_gap
|
||||
except AttributeError:
|
||||
return
|
||||
start_gap_item = QTableWidgetItem(str(start_gap))
|
||||
@ -641,17 +627,17 @@ class PlaylistTab(QTableWidget):
|
||||
start_gap_item.setBackground(QColor(Config.COLOUR_LONG_START))
|
||||
self.setItem(row, START_GAP, start_gap_item)
|
||||
|
||||
title_item = QTableWidgetItem(row_data.track.title)
|
||||
title_item = QTableWidgetItem(plr.track.title)
|
||||
log.debug(f"KAE: insert_row:619, {title_item.text()=}")
|
||||
self.setItem(row, TITLE, title_item)
|
||||
|
||||
artist_item = QTableWidgetItem(row_data.track.artist)
|
||||
artist_item = QTableWidgetItem(plr.track.artist)
|
||||
self.setItem(row, ARTIST, artist_item)
|
||||
|
||||
duration_item = QTableWidgetItem(
|
||||
ms_to_mmss(row_data.track.duration))
|
||||
ms_to_mmss(plr.track.duration))
|
||||
self.setItem(row, DURATION, duration_item)
|
||||
self._set_row_duration(row, row_data.track.duration)
|
||||
self._set_row_duration(row, plr.track.duration)
|
||||
|
||||
start_item = QTableWidgetItem()
|
||||
self.setItem(row, START_TIME, start_item)
|
||||
@ -659,8 +645,8 @@ class PlaylistTab(QTableWidget):
|
||||
end_item = QTableWidgetItem()
|
||||
self.setItem(row, END_TIME, end_item)
|
||||
|
||||
if row_data.track.bitrate:
|
||||
bitrate = str(row_data.track.bitrate)
|
||||
if plr.track.bitrate:
|
||||
bitrate = str(plr.track.bitrate)
|
||||
else:
|
||||
bitrate = ""
|
||||
bitrate_item = QTableWidgetItem(bitrate)
|
||||
@ -668,23 +654,23 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
# As we have track info, any notes should be contained in
|
||||
# the notes column
|
||||
notes_item = QTableWidgetItem(row_data.note)
|
||||
notes_item = QTableWidgetItem(plr.note)
|
||||
self.setItem(row, ROW_NOTES, notes_item)
|
||||
|
||||
last_playtime = Playdates.last_played(session, row_data.track.id)
|
||||
last_playtime = Playdates.last_played(session, plr.track.id)
|
||||
last_played_str = get_relative_date(last_playtime)
|
||||
last_played_item = QTableWidgetItem(last_played_str)
|
||||
self.setItem(row, LASTPLAYED, last_played_item)
|
||||
|
||||
# Mark track if file is unreadable
|
||||
if not file_is_readable(row_data.track.path):
|
||||
if not file_is_readable(plr.track.path):
|
||||
self._set_unreadable_row(row)
|
||||
|
||||
else:
|
||||
# This is a section header so it must have note text
|
||||
if row_data.note is None:
|
||||
if plr.note is None:
|
||||
log.debug(
|
||||
f"insert_row({row_data=}) with no track_id and no note"
|
||||
f"insert_row({plr=}) with no track_id and no note"
|
||||
)
|
||||
return
|
||||
|
||||
@ -698,17 +684,16 @@ class PlaylistTab(QTableWidget):
|
||||
continue
|
||||
self.setItem(row, i, QTableWidgetItem())
|
||||
self.setSpan(row, HEADER_NOTES_COLUMN, 1, len(columns) - 1)
|
||||
notes_item = QTableWidgetItem(row_data.note)
|
||||
notes_item = QTableWidgetItem(plr.note)
|
||||
self.setItem(row, HEADER_NOTES_COLUMN, notes_item)
|
||||
|
||||
# Save (no) track_id
|
||||
userdata_item.setData(self.ROW_TRACK_ID, 0)
|
||||
|
||||
if repaint:
|
||||
self.save_playlist(session)
|
||||
self.update_display(session, clear_selection=False)
|
||||
|
||||
def insert_track(self, session: Session, track: Optional[Tracks],
|
||||
def insert_track(self, session: Session, track: Tracks,
|
||||
note: str = None, repaint: bool = True) -> None:
|
||||
"""
|
||||
Insert track into playlist tab.
|
||||
@ -720,20 +705,30 @@ class PlaylistTab(QTableWidget):
|
||||
to do the heavy lifing.
|
||||
"""
|
||||
|
||||
# PlaylistRows object requires a row number, but that number
|
||||
# can be reset by calling PlaylistRows.fixup_rownumbers() later,
|
||||
# so just fudge a row number for now.
|
||||
row_number = 0
|
||||
if track:
|
||||
track_id = track.id
|
||||
else:
|
||||
track_id = None
|
||||
plr = PlaylistRows(session, self.playlist_id,
|
||||
track_id, row_number, note)
|
||||
self.insert_row(session, plr)
|
||||
PlaylistRows.fixup_rownumbers(session, self.playlist_id)
|
||||
if repaint:
|
||||
self.update_display(session, clear_selection=False)
|
||||
if not track and track.id:
|
||||
log.debug(
|
||||
f"insert_track({session=}, {track=}, {note=}, {repaint=}"
|
||||
" called with either no track or no track.id"
|
||||
)
|
||||
return
|
||||
|
||||
row_number = self.get_new_row_number()
|
||||
|
||||
# Check to see whether track is already in playlist
|
||||
existing_plr = PlaylistRows.get_track_plr(session, track.id,
|
||||
self.playlist_id)
|
||||
if existing_plr and ask_yes_no("Duplicate row",
|
||||
"Track already in playlist. "
|
||||
"Move to new location?"):
|
||||
# Yes it is and we shoudl reuse it
|
||||
return self._move_row(session, existing_plr, row_number)
|
||||
|
||||
# Build playlist_row object
|
||||
plr = PlaylistRows(session, self.playlist_id, track.id,
|
||||
row_number, note)
|
||||
self.insert_row(session, plr, repaint)
|
||||
# Let display update, then save playlist
|
||||
QTimer.singleShot(0, lambda: self.save_playlist(session))
|
||||
|
||||
def play_started(self, session: Session) -> None:
|
||||
"""
|
||||
@ -796,8 +791,8 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
# Add the rows
|
||||
playlist = session.get(Playlists, playlist_id)
|
||||
for row in playlist.rows:
|
||||
self.insert_row(session, row, repaint=False)
|
||||
for plr in playlist.rows:
|
||||
self.insert_row(session, plr, repaint=False)
|
||||
|
||||
# Scroll to top
|
||||
if scroll_to_top:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user