diff --git a/app/playlists.py b/app/playlists.py index b7ce53c..bc4e314 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -268,7 +268,7 @@ class PlaylistTab(QTableWidget): set note row to be end of playlist. """ - row: int = self.get_selected_row() + row: Optional[int] = self.get_selected_row() if not row: row = self.rowCount() @@ -277,7 +277,7 @@ class PlaylistTab(QTableWidget): dlg.setInputMode(QInputDialog.TextInput) dlg.setLabelText("Note:") dlg.resize(500, 100) - ok: bool = dlg.exec() + ok: int = dlg.exec() if ok: with Session() as session: note: Notes = Notes( @@ -407,6 +407,8 @@ class PlaylistTab(QTableWidget): # Mark next-track row as current current_row = self._get_next_track_row() + if not current_row: + return self._set_current_track_row(current_row) # Mark current row as played @@ -656,9 +658,9 @@ class PlaylistTab(QTableWidget): next_row: Optional[int] = self._get_next_track_row() notes: List[int] = self._get_notes_rows() played: Optional[List[int]] = self._get_played_track_rows() - unreadable: Optional[List[int]] = self._get_unreadable_track_rows() + unreadable: List[int] = self._get_unreadable_track_rows() - last_played_str: Optional[str] + last_played_str: str last_playedtime: Optional[datetime] next_start_time: Optional[datetime] = None note_colour: str @@ -811,8 +813,8 @@ class PlaylistTab(QTableWidget): open_in_audacity(track.path) @staticmethod - def _calculate_track_end_time(track: Tracks, - start: datetime) -> Optional[datetime]: + def _calculate_track_end_time( + track: Tracks, start: Optional[datetime]) -> Optional[datetime]: """Return this track's end time given its start time""" if start is None: @@ -828,7 +830,7 @@ class PlaylistTab(QTableWidget): self.menu.exec_(self.mapToGlobal(pos)) - def _copy_path(self, row: int) -> Optional[str]: + def _copy_path(self, row: int) -> None: """ If passed row is track row, copy the track path to the clipboard. Otherwise, return None. @@ -842,7 +844,7 @@ class PlaylistTab(QTableWidget): with Session() as session: track: Optional[Tracks] = self._get_row_track_object(row, session) if track: - cb: QApplication.clipboard = QApplication.clipboard() + cb = QApplication.clipboard() cb.clear(mode=cb.Clipboard) cb.setText(track.path, mode=cb.Clipboard) @@ -1035,12 +1037,20 @@ class PlaylistTab(QTableWidget): def _get_current_track_row(self) -> Optional[int]: """Return row marked as current, or None""" - return self._meta_search(RowMeta.CURRENT) + row = self._meta_search(RowMeta.CURRENT) + if len(row) > 0: + return row[0] + else: + return None def _get_next_track_row(self) -> Optional[int]: """Return row marked as next, or None""" - return self._meta_search(RowMeta.NEXT) + row = self._meta_search(RowMeta.NEXT) + if len(row) > 0: + return row[0] + else: + return None @staticmethod def _get_note_text_time(text: str) -> Optional[datetime]: @@ -1122,7 +1132,7 @@ class PlaylistTab(QTableWidget): return self._meta_notset(RowMeta.NOTE) - def _get_unreadable_track_rows(self) -> Optional[List[int]]: + def _get_unreadable_track_rows(self) -> List[int]: """Return rows marked as unreadable, or None""" return self._meta_search(RowMeta.UNREADABLE, one=False) @@ -1228,7 +1238,7 @@ class PlaylistTab(QTableWidget): if next_row is not None: self._meta_clear_attribute(next_row, RowMeta.NEXT) - def _meta_get(self, row: int) -> Optional[int]: + def _meta_get(self, row: int) -> int: """Return row metadata""" return self.item(row, self.COL_USERDATA).data(self.ROW_METADATA) @@ -1249,8 +1259,7 @@ class PlaylistTab(QTableWidget): return matches - def _meta_search(self, metadata: int, one: bool = True) -> Union[ - List[int], int, None]: + def _meta_search(self, metadata: int, one: bool = True) -> List[int]: """ Search rows for metadata. @@ -1269,10 +1278,8 @@ class PlaylistTab(QTableWidget): if not one: return matches - if len(matches) == 0: - return None - elif len(matches) == 1: - return matches[0] + if len(matches) <= 1: + return matches else: ERROR( f"Multiple matches for metadata '{metadata}' found " @@ -1288,9 +1295,9 @@ class PlaylistTab(QTableWidget): current_metadata: int = self._meta_get(row) if not current_metadata: - new_metadata = (1 << attribute) + new_metadata: int = (1 << attribute) else: - new_metadata: int = self._meta_get(row) | (1 << attribute) + new_metadata = self._meta_get(row) | (1 << attribute) self.item(row, self.COL_USERDATA).setData( self.ROW_METADATA, new_metadata) @@ -1399,8 +1406,8 @@ class PlaylistTab(QTableWidget): - Check row is a track row - Check track is readable - Mark as next track - - Notify musicmuster - Update display + - Notify musicmuster """ DEBUG(f"_set_next({row=})") @@ -1421,12 +1428,12 @@ class PlaylistTab(QTableWidget): # Mark as next track self._set_next_track_row(row) - # Notify musicmuster - self.musicmuster.this_is_the_next_track(self, track) - # Update display self.update_display(session) + # Notify musicmuster + self.musicmuster.this_is_the_next_track(self, track) + def _set_row_bold(self, row: int, bold: bool = True) -> None: """Make row bold (bold=True) or not bold"""