diff --git a/app/playlists.py b/app/playlists.py index 0df0d49..b7ce53c 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -329,6 +329,8 @@ class PlaylistTab(QTableWidget): # Put an item in COL_USERDATA for later item: QTableWidgetItem = QTableWidgetItem() + # Add row metadata + item.setData(self.ROW_METADATA, 0) self.setItem(row, self.COL_USERDATA, item) # Add track details to columns @@ -1082,11 +1084,19 @@ class PlaylistTab(QTableWidget): note = Notes.get_by_id(session, note_id) return note - def _get_played_track_rows(self) -> Optional[List[int]]: + def _get_played_track_rows(self) -> List[int]: """Return rows marked as played, or None""" return self._meta_search(RowMeta.PLAYED, one=False) + def _get_unplayed_track_rows(self) -> Optional[List[int]]: + """Return rows marked as unplayed, or None""" + + unplayed_rows: Set[int] = set(self._meta_notset(RowMeta.PLAYED)) + notes_rows: Set[int] = set(self._get_notes_rows()) + + return list(unplayed_rows - notes_rows) + def _get_row_start_time(self, row: int) -> Optional[datetime]: try: if self.item(row, self.COL_START_TIME): @@ -1232,7 +1242,8 @@ class PlaylistTab(QTableWidget): matches = [] for row in range(self.rowCount()): - if self._meta_get(row): + row_meta = self._meta_get(row) + if row_meta is not None: if not self._meta_get(row) & (1 << metadata): matches.append(row) @@ -1355,15 +1366,15 @@ class PlaylistTab(QTableWidget): # Need to allow multiple rows to be selected self.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) - notes_rows: List[int] = self._get_notes_rows() self.clearSelection() - played_rows: List[int] = self._get_played_track_rows() - for row in range(self.rowCount()): - if row in notes_rows: - continue - if row in played_rows == played: - self.selectRow(row) + if played: + rows = self. _get_played_track_rows() + else: + rows = self._get_unplayed_track_rows() + + for row in rows: + self.selectRow(row) # Reset extended selection self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)