emmental/emmental/playlist/previous.py

40 lines
1.6 KiB
Python

# Copyright 2023 (c) Anna Schumaker.
"""A Playlist model configured for the Previous Tracks playlist."""
from gi.repository import GObject
from . import playlist
from .. import db
class Previous(playlist.Playlist):
"""A Playlist configured for Previous Tracks."""
can_go_forward = GObject.Property(type=bool, default=False)
def __init__(self, sql: db.Connection, playlist: db.playlist.Playlist):
"""Initialize the Previous Playlist object."""
super().__init__(sql=sql, playlist=playlist)
self.connect("notify::current-track", self.__notify_current_track)
def __notify_current_track(self, plist: playlist.Playlist, param) -> None:
current = self.current_track
self.can_go_forward = current and current != self[0]
def do_get_sort_key(self, trackid: int) -> float:
"""Get the sort key for a given trackid."""
track = self.sql.tracks.rows.get(trackid)
return 0 if track is None else -track.laststarted.timestamp()
def on_trackid_added(self, set: db.tracks.TrackidSet,
trackid: int) -> None:
"""Handle the TrackidSet::trackid-added signal."""
super().on_trackid_added(set, trackid)
self.playlist.current_trackid = self.trackids[0]
self.notify("current-track")
def previous_track(self) -> db.tracks.Track | None:
"""Go backwards one Track."""
if self.playlist is not None and len(self.trackids) > 0:
if (index := self.index(self.current_track)) > 0:
self.current_track = self[index - 1]
return self.current_track