]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/track.py
Removed useless WrongUUID4 Exception
[mpd-sima.git] / sima / lib / track.py
index cb168566ab190580b94db3546a96d43becc8bbb6..10f2bdcb3a238bf895016454f7985456140071b4 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
 # -*- coding: utf-8 -*-
 
-# Copyright (c) 2009, 2010, 2011, 2013, 2014 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
+from .meta import Artist, SEPARATOR
 
 class Track:
     """
     Track object.
 
 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):
     """
 
     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
         #  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.
         """
         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)
                 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")' % (
 
     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):
         return hash(self) != hash(other)
 
     def __bool__(self):
+        if not self._file:
+            return False
         return not self._empty
 
     @property
         return not self._empty
 
     @property
@@ -114,11 +122,11 @@ class Track:
         """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 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'
         temps = time.gmtime(int(self.time))
         if temps.tm_hour:
             fmt = '%H:%M:%S'
@@ -128,7 +136,12 @@ class Track:
 
     @property
     def Artist(self):
 
     @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
         return Artist(**self.__dict__)
 
 # VIM MODLINE