]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/track.py
Sphinx documentation and API cleanup
[mpd-sima.git] / sima / lib / track.py
index 52d1ce2197ddd7e15d45144efbd9e9502cb492dc..b5ffc15545d0092303d51bc266d67e3adeb117ee 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
 # -*- coding: utf-8 -*-
 
-# Copyright (c) 2009, 2010, 2011, 2013 Jack Kaliko <kaliko@azylum.org>
+# Copyright (c) 2009, 2010, 2011, 2013, 2014, 2015 Jack Kaliko <kaliko@azylum.org>
 # Copyright (c) 2009 J. Alexander Treuman (Tag collapse method)
 # Copyright (c) 2008 Rick van Hattem
 #
 # Copyright (c) 2009 J. Alexander Treuman (Tag collapse method)
 # Copyright (c) 2008 Rick van Hattem
 #
 
 import time
 
 
 import time
 
+from .meta import Artist, SEPARATOR
 
 
-class Track(object):
+class Track:
     """
     Track object.
     """
     Track object.
-    Instanciate with mpd replies.
+    Instantiate with Player replies.
     """
 
     """
 
-    def __init__(self, file=None, time=0, pos=0, **kwargs):
+    def __init__(self, file=None, time=0, pos=-1, **kwargs):
         self.title = self.artist = self.album = self.albumartist = ''
         self.title = self.artist = self.album = self.albumartist = ''
-        self._pos = pos
-        self.empty = False
+        self.musicbrainz_artistid = self.musicbrainz_albumartistid = None
+        self.pos = int(pos)
         self._file = file
         self._file = file
+        self._empty = False
+        self._time = time
         if not kwargs:
         if not kwargs:
-            self.empty = True
-        self.time = time
+            self._empty = True
         self.__dict__.update(**kwargs)
         self.__dict__.update(**kwargs)
-        self.tags_to_collapse = list(['artist', 'album', 'title', 'date',
-            'genre', 'albumartist'])
+        self.tags_to_collapse = ['artist', 'album', 'title', 'date',
+                                 'genre', 'albumartist',
+                                 'musicbrainz_artistid',
+                                 'musicbrainz_albumartistid']
         #  have tags been collapsed?
         #  have tags been collapsed?
-        self.collapse_tags_bool = False
         self.collapsed_tags = list()
         # Needed for multiple tags which returns a list instead of a string
         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.
         """
         Necessary to deal with tags defined multiple times.
         These entries are set as lists instead of strings.
@@ -56,18 +59,11 @@ class Track(object):
             if tag not in self.tags_to_collapse:
                 continue
             if isinstance(value, list):
             if tag not in self.tags_to_collapse:
                 continue
             if isinstance(value, list):
-                self.collapse_tags_bool = True
                 self.collapsed_tags.append(tag)
                 self.collapsed_tags.append(tag)
-                self.__dict__.update({tag: ', '.join(set(value))})
-
-    def get_filename(self):
-        """return filename"""
-        if not self.file:
-            return None
-        return self.file
+                self.__dict__.update({tag: SEPARATOR.join(set(value))})
 
     def __repr__(self):
 
     def __repr__(self):
-        return '%s(artist="%s", album="%s", title="%s", filename="%s")' % (
+        return '%s(artist="%s", album="%s", title="%s", file="%s")' % (
             self.__class__.__name__,
             self.artist,
             self.album,
             self.__class__.__name__,
             self.artist,
             self.album,
@@ -103,12 +99,9 @@ class Track(object):
         return hash(self) != hash(other)
 
     def __bool__(self):
         return hash(self) != hash(other)
 
     def __bool__(self):
-        return not self.empty
-
-    @property
-    def pos(self):
-        """return position of track in the playlist"""
-        return int(self._pos)
+        if not self._file:
+            return False
+        return not self._empty
 
     @property
     def file(self):
 
     @property
     def file(self):
@@ -123,11 +116,11 @@ class Track(object):
         """set time property"""
         self._time = int(value)
 
         """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):
 
     @property
     def duration(self):
-        """Compute fancy duration"""
+        """Get a fancy duration %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'
         temps = time.gmtime(int(self.time))
         if temps.tm_hour:
             fmt = '%H:%M:%S'
@@ -135,13 +128,15 @@ class Track(object):
             fmt = '%M:%S'
         return time.strftime(fmt, temps)
 
             fmt = '%M:%S'
         return time.strftime(fmt, temps)
 
-
-def main():
-    pass
-
-# Script starts here
-if __name__ == '__main__':
-    main()
+    @property
+    def Artist(self):
+        """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
 # vim: ai ts=4 sw=4 sts=4 expandtab
 
 # VIM MODLINE
 # vim: ai ts=4 sw=4 sts=4 expandtab