WIP V3: sort by each element implemented

This commit is contained in:
Keith Edmunds 2023-11-15 08:41:06 +00:00
parent d5871fe77f
commit 3e49ad08b9

View File

@ -1,5 +1,6 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
from enum import auto, Enum from enum import auto, Enum
from operator import attrgetter
from typing import List, Optional from typing import List, Optional
from PyQt6.QtCore import ( from PyQt6.QtCore import (
@ -897,35 +898,44 @@ class PlaylistModel(QAbstractTableModel):
Sort selected rows by artist 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 Sort selected rows by passed attribute name where 'attribute' is a
""" key in PlaylistRowData
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
""" """
# Create a subset of playlist_rows with the rows we are # Create a subset of playlist_rows with the rows we are
# interested in # interested in
shortlist_rows = {k: self.playlist_rows[k] for k in row_numbers} shortlist_rows = {k: self.playlist_rows[k] for k in row_numbers}
sorted_list = [ 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)) 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: def supportedDropActions(self) -> Qt.DropAction:
return Qt.DropAction.MoveAction | Qt.DropAction.CopyAction return Qt.DropAction.MoveAction | Qt.DropAction.CopyAction