emmental/trackdb/track.py

53 lines
1.5 KiB
Python
Raw Normal View History

# Copyright 2020 (c) Anna Schumaker.
from lib import metadata
from lib import publisher
import datetime
TrackUpdated = publisher.Publisher()
class Track:
def __init__(self, trackid, filepath, library):
self.trackid = trackid
self.path = filepath.relative_to(library.path)
self.library = library
self.lastplayed = None
self.playcount = 0
with metadata.Metadata(filepath) as meta:
self.title = meta.title()
self.length = meta.length()
self.discnumber = meta.discnumber()
self.tracknumber = meta.tracknumber()
self.album = meta.album()
self.artist = meta.artist()
self.genre = meta.genres()
self.year = meta.year()
def __getitem__(self, item):
tag = self.__dict__.get(item, None)
if item == "length":
(m, s) = divmod(tag, 60)
return f"{m}:{s:02}"
elif item in ("discnumber", "tracknumber"):
return f"{tag:02}"
elif item == "lastplayed":
return "Never" if tag == None else str(tag)
elif item == "genre":
return ", ".join(self.genre)
return None if tag == None else str(tag)
def decade(self):
return (self.year // 10) * 10
def filepath(self):
return self.library.path / self.path
def played(self):
self.playcount += 1
self.lastplayed = datetime.date.today()
TrackUpdated.publish(self)
def reset():
TrackUpdated.reset()