65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
# Copyright 2022 (c) Anna Schumaker.
|
|
"""A custom Gio.ListModel for working with tracks."""
|
|
from gi.repository import GObject
|
|
from . import table
|
|
|
|
|
|
PLAYED_THRESHOLD = 2 / 3
|
|
|
|
|
|
class Track(table.Row):
|
|
"""Our custom Track object."""
|
|
|
|
trackid = GObject.Property(type=int)
|
|
libraryid = GObject.Property(type=int)
|
|
mediumid = GObject.Property(type=int)
|
|
year = GObject.Property(type=int)
|
|
|
|
active = GObject.Property(type=bool, default=False)
|
|
favorite = GObject.Property(type=bool, default=False)
|
|
|
|
path = GObject.Property(type=GObject.TYPE_PYOBJECT)
|
|
mbid = GObject.Property(type=str)
|
|
title = GObject.Property(type=str)
|
|
artist = GObject.Property(type=str)
|
|
number = GObject.Property(type=int)
|
|
length = GObject.Property(type=float)
|
|
mtime = GObject.Property(type=float)
|
|
playcount = GObject.Property(type=int)
|
|
added = GObject.Property(type=GObject.TYPE_PYOBJECT)
|
|
|
|
laststarted = GObject.Property(type=GObject.TYPE_PYOBJECT)
|
|
lastplayed = GObject.Property(type=GObject.TYPE_PYOBJECT)
|
|
restarted = GObject.Property(type=GObject.TYPE_PYOBJECT)
|
|
|
|
def do_update(self, column: str) -> bool:
|
|
"""Update a Track object."""
|
|
match column:
|
|
case "trackid" | "libraryid" | "active" | "path" | "playcount" | \
|
|
"laststarted" | "lastplayed" | "restarted": pass
|
|
case _: return super().do_update(column)
|
|
return True
|
|
|
|
def get_library(self) -> table.Row | None:
|
|
"""Get the Library associated with this Track."""
|
|
return self.table.sql.libraries.rows.get(self.libraryid)
|
|
|
|
def get_medium(self) -> table.Row | None:
|
|
"""Get the Medium associated with this Track."""
|
|
return self.table.sql.media.rows.get(self.mediumid)
|
|
|
|
def get_year(self) -> table.Row | None:
|
|
"""Get the Year associated with this Track."""
|
|
return self.table.sql.years.rows.get(self.year)
|
|
|
|
def update_properties(self, **kwargs) -> None:
|
|
"""Update one or more of this Track's properties."""
|
|
for (property, newval) in kwargs.items():
|
|
if self.get_property(property) != newval:
|
|
self.set_property(property, newval)
|
|
|
|
@property
|
|
def primary_key(self) -> int:
|
|
"""Get the primary key for this Track."""
|
|
return self.trackid
|