Implement random sort

This commit is contained in:
Keith Edmunds 2024-03-08 23:25:07 +00:00
parent b116f062e9
commit 609544ddd4
2 changed files with 17 additions and 0 deletions

View File

@ -7,6 +7,7 @@ from datetime import datetime, timedelta
from enum import auto, Enum from enum import auto, Enum
from operator import attrgetter from operator import attrgetter
from pprint import pprint from pprint import pprint
from random import shuffle
from typing import List, Optional from typing import List, Optional
from PyQt6.QtCore import ( from PyQt6.QtCore import (
@ -1315,6 +1316,14 @@ class PlaylistModel(QAbstractTableModel):
self.sort_by_attribute(row_numbers, "lastplayed") self.sort_by_attribute(row_numbers, "lastplayed")
def sort_randomly(self, row_numbers: List[int]) -> None:
"""
Sort selected rows randomly
"""
shuffle(row_numbers)
self.move_rows(row_numbers, min(row_numbers))
def sort_by_title(self, row_numbers: List[int]) -> None: def sort_by_title(self, row_numbers: List[int]) -> None:
""" """
Sort selected rows by title Sort selected rows by title
@ -1603,6 +1612,9 @@ class PlaylistProxyModel(QSortFilterProxyModel):
def sort_by_lastplayed(self, row_numbers: List[int]) -> None: def sort_by_lastplayed(self, row_numbers: List[int]) -> None:
return self.source_model.sort_by_lastplayed(row_numbers) return self.source_model.sort_by_lastplayed(row_numbers)
def sort_randomly(self, row_numbers: List[int]) -> None:
return self.source_model.sort_randomly(row_numbers)
def sort_by_title(self, row_numbers: List[int]) -> None: def sort_by_title(self, row_numbers: List[int]) -> None:
return self.source_model.sort_by_title(row_numbers) return self.source_model.sort_by_title(row_numbers)

View File

@ -487,6 +487,11 @@ class PlaylistTab(QTableView):
lambda: proxy_model.sort_by_lastplayed(self.get_selected_rows()), lambda: proxy_model.sort_by_lastplayed(self.get_selected_rows()),
parent_menu=sort_menu, parent_menu=sort_menu,
) )
self._add_context_menu(
"randomly",
lambda: proxy_model.sort_randomly(self.get_selected_rows()),
parent_menu=sort_menu,
)
# Info # Info
if track_row: if track_row: