X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Flib%2Ftrack.py;h=10f2bdcb3a238bf895016454f7985456140071b4;hb=888614f7afac2b23fb473d209c54dcb69216b165;hp=cb168566ab190580b94db3546a96d43becc8bbb6;hpb=1b5cfb4c9187df891bd840b51c044d72ad0077d5;p=mpd-sima.git diff --git a/sima/lib/track.py b/sima/lib/track.py index cb16856..10f2bdc 100644 --- a/sima/lib/track.py +++ b/sima/lib/track.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2009, 2010, 2011, 2013, 2014 Jack Kaliko +# Copyright (c) 2009, 2010, 2011, 2013, 2014, 2015 Jack Kaliko # Copyright (c) 2009 J. Alexander Treuman (Tag collapse method) # Copyright (c) 2008 Rick van Hattem # @@ -23,12 +23,18 @@ import time -from .meta import Artist +from .meta import Artist, SEPARATOR class Track: """ Track object. - Instanciate with Player replies. + Instantiate with Player replies. + + :param str file: media file, defaults to ``None`` + :param int time: duration in second, defaults to 0 + :param int pos: position in queue, defaults to -1 + :param str title|artist|album: defaults to "" + :param str musicbrainz_artistid|musicbrainz_albumartistid: MusicBrainz IDs, defaults to ``None`` """ def __init__(self, file=None, time=0, pos=-1, **kwargs): @@ -48,9 +54,9 @@ class Track: # have tags been collapsed? self.collapsed_tags = list() # Needed for multiple tags which returns a list instead of a string - self.collapse_tags() + self._collapse_tags() - def collapse_tags(self): + def _collapse_tags(self): """ Necessary to deal with tags defined multiple times. These entries are set as lists instead of strings. @@ -60,7 +66,7 @@ class Track: continue if isinstance(value, list): self.collapsed_tags.append(tag) - self.__dict__.update({tag: ', '.join(set(value))}) + self.__dict__.update({tag: SEPARATOR.join(set(value))}) def __repr__(self): return '%s(artist="%s", album="%s", title="%s", file="%s")' % ( @@ -99,6 +105,8 @@ class Track: return hash(self) != hash(other) def __bool__(self): + if not self._file: + return False return not self._empty @property @@ -114,11 +122,11 @@ class Track: """set time property""" self._time = int(value) - time = property(get_time, set_time, doc='song duration in seconds') + time = property(get_time, set_time, doc='song duration in seconds (use :attr:`duration` for human readable time)') @property def duration(self): - """Compute fancy duration""" + """Get a fancy duration as ``%H:%M:%S`` (use :attr:`time` to get duration in second only)""" temps = time.gmtime(int(self.time)) if temps.tm_hour: fmt = '%H:%M:%S' @@ -128,7 +136,12 @@ class Track: @property def Artist(self): - """Get artist object from track""" + """Get the :class:`sima.lib.meta.Artist` associated to this track""" + if not self.artist: + if not self.musicbrainz_artistid: + return Artist(name='[unknown]', + mbid='125ec42a-7229-4250-afc5-e057484327fe') + return Artist(name='[unknown]', **self.__dict__) return Artist(**self.__dict__) # VIM MODLINE