Handle next track not found consistently

Highlight in red, don't set as next track.
Fixes #51
This commit is contained in:
Keith Edmunds 2021-08-15 10:13:42 +01:00
parent 87fb74b14f
commit c0752407b9
2 changed files with 18 additions and 18 deletions

View File

@ -415,7 +415,10 @@ class Window(QMainWindow, Ui_MainWindow):
self.music.play(self.current_track.path) self.music.play(self.current_track.path)
# Update metadata # Update metadata
# TODO is this valid if next track is on different playlist? # Get next track for this playlist. May be None if there is
# no automatic next track, and may later be overriden by
# user selecting a different track on this or another
# playlist.
next_track_id = self.current_track_playlist_tab.play_started() next_track_id = self.current_track_playlist_tab.play_started()
if next_track_id is not None: if next_track_id is not None:
@ -423,7 +426,7 @@ class Window(QMainWindow, Ui_MainWindow):
self.next_track_playlist_tab = self.current_track_playlist_tab self.next_track_playlist_tab = self.current_track_playlist_tab
# Check we can read it # Check we can read it
if not self.file_is_readable(self.next_track.path): if not self.file_is_readable(self.next_track.path):
self.show_warning( helpers.show_warning(
"Can't read next track", "Can't read next track",
self.next_track.path) self.next_track.path)
else: else:
@ -501,11 +504,6 @@ class Window(QMainWindow, Ui_MainWindow):
self.visible_playlist_tab().select_unplayed_tracks() self.visible_playlist_tab().select_unplayed_tracks()
def show_warning(self, title, msg):
"Display a warning to user"
QMessageBox.warning(None, title, msg, buttons=QMessageBox.Cancel)
def song_info_search(self): def song_info_search(self):
""" """
Open browser tabs for Wikipedia, searching for Open browser tabs for Wikipedia, searching for

View File

@ -357,8 +357,10 @@ class PlaylistTab(QTableWidget):
# Scroll to put current track in centre # Scroll to put current track in centre
scroll_to = self.item(current_row, self.COL_INDEX) scroll_to = self.item(current_row, self.COL_INDEX)
self.scrollToItem(scroll_to, QAbstractItemView.PositionAtCenter) self.scrollToItem(scroll_to, QAbstractItemView.PositionAtCenter)
next_track_id = self._mark_next_track()
self._repaint() # Get next track
next_track_row = self._find_next_track_row()
next_track_id = self._set_next(next_track_row)
return next_track_id return next_track_id
def play_stopped(self): def play_stopped(self):
@ -648,13 +650,13 @@ class PlaylistTab(QTableWidget):
and pos.y() >= rect.center().y() # noqa W503 and pos.y() >= rect.center().y() # noqa W503
) )
def _mark_next_track(self): def _find_next_track_row(self):
""" """
Find next track to play. Find next track to play.
If not found, return None. If not found, return None.
If found, mark row with metadata and return track_id. If found, return row number.
""" """
found_next_track = False found_next_track = False
@ -667,16 +669,14 @@ class PlaylistTab(QTableWidget):
for row in range(start, self.rowCount()): for row in range(start, self.rowCount()):
if row in notes_rows: if row in notes_rows:
continue continue
self._meta_set_next(row)
found_next_track = True found_next_track = True
break break
if not found_next_track: if found_next_track:
return row
else:
return None return None
track_id = self._get_row_id(row)
return track_id
def _meta_clear(self, row): def _meta_clear(self, row):
"Clear metadata for row" "Clear metadata for row"
@ -813,11 +813,13 @@ class PlaylistTab(QTableWidget):
track_id = self._get_row_id(row) track_id = self._get_row_id(row)
if track_id: if track_id:
if self._track_path_is_readable(track_id): if self._track_path_is_readable(track_id):
self._meta_set_next(self.currentRow()) self._meta_set_next(row)
self.master_process.set_next_track(track_id) self.master_process.set_next_track(track_id)
else: else:
self._meta_set_unreadable(self.currentRow()) self._meta_set_unreadable(row)
track_id = None
self._repaint() self._repaint()
return track_id
def _repaint(self, clear_selection=True): def _repaint(self, clear_selection=True):
"Set row colours, fonts, etc" "Set row colours, fonts, etc"