From 3e49ad08b9bb090a2a852ed4e7c71b0bf503bea2 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Wed, 15 Nov 2023 08:41:06 +0000 Subject: [PATCH] WIP V3: sort by each element implemented --- app/playlistmodel.py | 46 +++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/app/playlistmodel.py b/app/playlistmodel.py index e3f562e..1362b19 100644 --- a/app/playlistmodel.py +++ b/app/playlistmodel.py @@ -1,5 +1,6 @@ from datetime import datetime, timedelta from enum import auto, Enum +from operator import attrgetter from typing import List, Optional from PyQt6.QtCore import ( @@ -897,35 +898,44 @@ class PlaylistModel(QAbstractTableModel): Sort selected rows by artist """ - pass + self.sort_by_attribute(row_numbers, 'artist') - def sort_by_duration(self, row_numbers: List[int]) -> None: + def sort_by_attribute(self, row_numbers: List[int], attr_name: str) -> None: """ - Sort selected rows by duration - """ - - pass - - def sort_by_lastplayed(self, row_numbers: List[int]) -> None: - """ - Sort selected rows by lastplayed - """ - - pass - - def sort_by_title(self, row_numbers: List[int]) -> None: - """ - Sort selected rows by title + Sort selected rows by passed attribute name where 'attribute' is a + key in PlaylistRowData """ # Create a subset of playlist_rows with the rows we are # interested in shortlist_rows = {k: self.playlist_rows[k] for k in row_numbers} sorted_list = [ - k for k, v in sorted(shortlist_rows.items(), key=lambda item: item[1].title) + plr.plr_rownum for plr in + sorted(shortlist_rows.values(), key=attrgetter(attr_name)) ] self.move_rows(sorted_list, min(sorted_list)) + def sort_by_duration(self, row_numbers: List[int]) -> None: + """ + Sort selected rows by duration + """ + + self.sort_by_attribute(row_numbers, 'duration') + + def sort_by_lastplayed(self, row_numbers: List[int]) -> None: + """ + Sort selected rows by lastplayed + """ + + self.sort_by_attribute(row_numbers, 'lastplayed') + + def sort_by_title(self, row_numbers: List[int]) -> None: + """ + Sort selected rows by title + """ + + self.sort_by_attribute(row_numbers, 'title') + def supportedDropActions(self) -> Qt.DropAction: return Qt.DropAction.MoveAction | Qt.DropAction.CopyAction