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