Compare commits

...

4 Commits

Author SHA1 Message Date
Keith Edmunds
a46b9a3d6f Return True/False on set_next_row 2024-06-03 20:29:50 +01:00
Keith Edmunds
1ee9a1ae22 Speed up moving rows 2024-06-03 20:29:17 +01:00
Keith Edmunds
e884201df4 Don't accept unreadable track into _TrackManager 2024-06-03 19:06:00 +01:00
Keith Edmunds
2f32f2e914 Update fade graph when starting next track before current has finished 2024-06-03 19:05:19 +01:00
4 changed files with 25 additions and 14 deletions

View File

@ -1031,6 +1031,7 @@ class Window(QMainWindow, Ui_MainWindow):
# Show closing volume graph # Show closing volume graph
if track_sequence.current.fade_graph: if track_sequence.current.fade_graph:
track_sequence.current.fade_graph.GraphWidget = self.widgetFadeVolume track_sequence.current.fade_graph.GraphWidget = self.widgetFadeVolume
track_sequence.current.fade_graph.clear()
track_sequence.current.fade_graph.plot() track_sequence.current.fade_graph.plot()
else: else:
log.error("No fade_graph") log.error("No fade_graph")
@ -1074,11 +1075,15 @@ class Window(QMainWindow, Ui_MainWindow):
self.btnPreview.setChecked(False) self.btnPreview.setChecked(False)
return return
try:
with db.Session() as session: with db.Session() as session:
self.preview_track_manager = PreviewTrackManager( self.preview_track_manager = PreviewTrackManager(
session=session, track_id=track_id, row_number=row_number session=session, track_id=track_id, row_number=row_number
) )
self.preview_track_manager.play() self.preview_track_manager.play()
except ValueError as e:
log.error(f"Error creating PreviewTrackManager({str(e)})")
return
else: else:
if self.preview_track_manager: if self.preview_track_manager:

View File

@ -382,8 +382,6 @@ class PlaylistModel(QAbstractTableModel):
Return text for display Return text for display
""" """
log.debug(f"display_role({row=}, {column=}")
# Set / reset column span # Set / reset column span
if column == HEADER_NOTES_COLUMN: if column == HEADER_NOTES_COLUMN:
column_span = 1 column_span = 1
@ -1229,9 +1227,11 @@ class PlaylistModel(QAbstractTableModel):
return True return True
def set_next_row(self, row_number: Optional[int]) -> None: def set_next_row(self, row_number: Optional[int]) -> bool:
""" """
Set row_number as next track. If row_number is None, clear next track. Set row_number as next track. If row_number is None, clear next track.
Return True if successful else False.
""" """
log.debug(f"set_next_row({row_number=})") log.debug(f"set_next_row({row_number=})")
@ -1241,7 +1241,7 @@ class PlaylistModel(QAbstractTableModel):
if track_sequence.next: if track_sequence.next:
track_sequence.next = None track_sequence.next = None
else: else:
return return True
else: else:
# Get plrid of row # Get plrid of row
try: try:
@ -1252,14 +1252,14 @@ class PlaylistModel(QAbstractTableModel):
f"{self.playlist_id=}" f"{self.playlist_id=}"
"IndexError" "IndexError"
) )
return return False
if prd.track_id is None or prd.plr_rownum is None: if prd.track_id is None or prd.plr_rownum is None:
log.error( log.error(
f"playlistmodel.set_next_track({row_number=}, " f"playlistmodel.set_next_track({row_number=}, "
"No track / row number " "No track / row number "
f"{self.playlist_id=}, {prd.track_id=}, {prd.plr_rownum=}" f"{self.playlist_id=}, {prd.track_id=}, {prd.plr_rownum=}"
) )
return return False
old_next_row: Optional[int] = None old_next_row: Optional[int] = None
if track_sequence.next: if track_sequence.next:
@ -1270,8 +1270,8 @@ class PlaylistModel(QAbstractTableModel):
track_sequence.next = MainTrackManager(session, prd.plrid) track_sequence.next = MainTrackManager(session, prd.plrid)
self.invalidate_row(row_number) self.invalidate_row(row_number)
except ValueError as e: except ValueError as e:
log.error(f"Error creating PlaylistTrack({prd=}): ({str(e)})") log.error(f"Error creating MainTrackManager({prd=}): ({str(e)})")
return return False
self.signals.search_wikipedia_signal.emit( self.signals.search_wikipedia_signal.emit(
self.playlist_rows[row_number].title self.playlist_rows[row_number].title
@ -1283,6 +1283,8 @@ class PlaylistModel(QAbstractTableModel):
self.signals.next_track_changed_signal.emit() self.signals.next_track_changed_signal.emit()
self.update_track_times() self.update_track_times()
return True
def setData( def setData(
self, self,
index: QModelIndex, index: QModelIndex,
@ -1688,7 +1690,7 @@ class PlaylistProxyModel(QSortFilterProxyModel):
def rescan_track(self, row_number: int) -> None: def rescan_track(self, row_number: int) -> None:
return self.source_model.rescan_track(row_number) return self.source_model.rescan_track(row_number)
def set_next_row(self, row_number: Optional[int]) -> None: def set_next_row(self, row_number: Optional[int]) -> bool:
return self.source_model.set_next_row(row_number) return self.source_model.set_next_row(row_number)
def sort_by_artist(self, row_numbers: List[int]) -> None: def sort_by_artist(self, row_numbers: List[int]) -> None:

View File

@ -381,6 +381,10 @@ class _TrackManager:
self.row_number = row_number self.row_number = row_number
self.preview_player = preview_player self.preview_player = preview_player
# Check file readable
if file_is_unreadable(track.path):
raise ValueError(f"_TrackManager.__init__: {track.path=} unreadable")
self.artist = track.artist self.artist = track.artist
self.bitrate = track.bitrate self.bitrate = track.bitrate
self.duration = track.duration self.duration = track.duration