emmental/trackdb/track.py

49 lines
1.8 KiB
Python
Raw Normal View History

# Copyright 2020 (c) Anna Schumaker.
import datetime
import mutagen
import re
class Track:
def __init__(self, trackid, filepath):
self.trackid = trackid
self.filepath = filepath
self.tags = { "lastplayed" : None, "playcount" : 0 }
f = mutagen.File(filepath)
self.tags["album"] = f.get("album", ["Unknown Album"])[0]
self.tags["artist"] = f.get("artist", ["Unknown Artist"])[0]
self.tags["artist"] = f.get("albumartist", [self.tags["artist"]])[0]
self.tags["discnumber"] = int(f.get("discnumber", [1])[0])
self.tags["genre"] = f.get("genre", [ "" ])[0]
self.tags["genre"] = [ g.strip() for g in re.split(",|;|/|:", self.tags["genre"]) ]
self.tags["length"] = int(f.info.length)
self.tags["title"] = f.get("title", [""])[0]
self.tags["tracknumber"] = int(f.get("tracknumber", [0])[0])
self.tags["year"] = f.get("date", ["0"])[0]
self.tags["year"] = f.get("originalyear", [self.tags["year"]])[0]
self.tags["year"] = int(re.match("\d+", self.tags["year"]).group(0))
def __getitem__(self, item):
tag = self.tags.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.tags["genre"])
return None if tag == None else str(tag)
def decade(self):
return (self.tags["year"] // 10) * 10
def genres(self):
for g in self.tags["genre"]:
yield g
def played(self):
self.tags["playcount"] += 1
self.tags["lastplayed"] = datetime.date.today()