Fix select all (un)played tracks

This commit is contained in:
Keith Edmunds 2022-03-03 17:30:37 +00:00
parent 9397adee03
commit ca1b11b545

View File

@ -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)