# 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 genres(self): for g in self.tags["genre"]: yield g def played(self): self.tags["playcount"] += 1 self.tags["lastplayed"] = datetime.date.today()