diff --git a/app/playlistmodel.py b/app/playlistmodel.py index e67f836..a91438d 100644 --- a/app/playlistmodel.py +++ b/app/playlistmodel.py @@ -7,6 +7,7 @@ from datetime import datetime, timedelta from enum import auto, Enum from operator import attrgetter from pprint import pprint +from random import shuffle from typing import List, Optional from PyQt6.QtCore import ( @@ -1315,6 +1316,14 @@ class PlaylistModel(QAbstractTableModel): 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: """ Sort selected rows by title @@ -1603,6 +1612,9 @@ class PlaylistProxyModel(QSortFilterProxyModel): def sort_by_lastplayed(self, row_numbers: List[int]) -> None: 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: return self.source_model.sort_by_title(row_numbers) diff --git a/app/playlists.py b/app/playlists.py index a5c1648..a8b8a26 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -487,6 +487,11 @@ class PlaylistTab(QTableView): lambda: proxy_model.sort_by_lastplayed(self.get_selected_rows()), parent_menu=sort_menu, ) + self._add_context_menu( + "randomly", + lambda: proxy_model.sort_randomly(self.get_selected_rows()), + parent_menu=sort_menu, + ) # Info if track_row: