import time
-from .meta import Artist, SEPARATOR
+from .meta import Artist, Album, SEPARATOR
+
class Track:
"""
Instantiate with Player replies.
:param str file: media file, defaults to ``None``
- :param int time: duration in second, defaults to 0
+ :param int duration: 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``
+ :param str title|artist|album|albumartist: defaults to ""
+ :param str musicbrainz_{artistid|albumartistid|albumid|trackid}: MusicBrainz IDs, defaults to ``None``
"""
- def __init__(self, file=None, time=0, pos=-1, **kwargs):
- self.title = self.artist = self.album = self.albumartist = ''
+ def __init__(self, file=None, duration=0, pos=-1, **kwargs):
+ self.title = self.artist = self.album = self.albumartist = self.genre = ''
self.musicbrainz_artistid = self.musicbrainz_albumartistid = None
+ self.musicbrainz_albumid = self.musicbrainz_trackid = None
self.pos = int(pos)
self._file = file
self._empty = False
- self._time = time
+ self.duration = float(duration)
if not kwargs:
self._empty = True
self.__dict__.update(**kwargs)
'genre', 'albumartist',
'musicbrainz_artistid',
'musicbrainz_albumartistid']
- # have tags been collapsed?
- self.collapsed_tags = list()
+ # Which tags have been collapsed?
+ self.collapsed_tags = []
# Needed for multiple tags which returns a list instead of a string
self._collapse_tags()
def __str__(self):
return '{artist} - {album} - {title} ({length})'.format(
- length=self.length,
- **self.__dict__
- )
+ length=self.length,
+ **self.__dict__
+ )
def __int__(self):
- return self.time
+ return int(self.duration)
def __add__(self, other):
- return Track(time=self.time + other.time)
+ return Track(duration=self.duration + other.duration)
def __sub__(self, other):
- return Track(time=self.time - other.time)
+ return Track(duration=self.duration - other.duration)
def __hash__(self):
if self.file:
"""file is an immutable attribute that's used for the hash method"""
return self._file
- def get_time(self):
- """get time property"""
- return self._time
-
- def set_time(self, value):
- """set time property"""
- self._time = int(value)
-
- time = property(get_time, set_time, doc='song duration in seconds (use :attr:`length` for human readable time)')
-
@property
def length(self):
- """Get a fancy duration as ``%H:%M:%S`` (use :attr:`time` to get duration in second only)"""
- temps = time.gmtime(int(self.time)) #TODO: returns a date not a duration
+ """Get a fancy duration as ``%H:%M:%S`` (use :attr:`duration` to get
+ duration in second only)"""
+ temps = time.gmtime(self.duration) # TODO: returns a date not a duration
if temps.tm_hour:
fmt = '%H:%M:%S'
else:
def genres(self):
"""Fetches Genres for the track
Multivalue genre are dealt with:
- * when genre tag is multivalued
- * when single tag uses coma or semi-colon separator
+
+ * when genre tag is multivalued
+ * when single tag uses coma or semi-colon separator
"""
- if 'genre' not in self.__dict__:
+ if not self.genre:
return []
genres = self.genre.split(SEPARATOR)
for sep in [',', ';']:
return Artist(name='[unknown]', **self.__dict__)
return Artist(**self.__dict__)
+ @property
+ def Album(self):
+ """Get the :class:`sima.lib.meta.Album` associated to this track"""
+ if not self.album:
+ return Album(name='[unknown]', **self.__dict__)
+ return Album(name=self.album, **self.__dict__)
+
# VIM MODLINE
# vim: ai ts=4 sw=4 sts=4 expandtab