diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-03-07 14:14:03 +0100 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-03-07 14:14:03 +0100 |
commit | 2b72b4e8f8b00f9835e376b7a10bea78df5d93de (patch) | |
tree | 64c07b2cb790769ef5eb6b45b75beb11da48b8c8 /nephilim/song.py | |
parent | 011c8f43a9fa9a12c72535f5b719c713578f55e7 (diff) |
clSong->song
Diffstat (limited to 'nephilim/song.py')
-rw-r--r-- | nephilim/song.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/nephilim/song.py b/nephilim/song.py new file mode 100644 index 0000000..3bd319c --- /dev/null +++ b/nephilim/song.py @@ -0,0 +1,76 @@ +from PyQt4 import QtCore +import os + +from misc import sec2min + +class Song: + """The Song class offers an abstraction of a song.""" + _data = None + + def __init__(self, data): + self._data = data + if 'id' in self._data: + self._data['id'] = int(self._data['id']) + if 'track' in self._data: + # make sure the track is a valid number! + t=self._data['track'] + for i in xrange(len(t)): + if ord(t[i])<ord('0') or ord(t[i])>ord('9'): + try: + self._data['track']=int(t[0:i]) + except TypeError: + self._data['track']=-1 + break + self._data['track']=int(self._data['track']) + + # ensure all string-values are utf-8 encoded + for tag in self._data.keys(): + if isinstance(self._data[tag], str): + self._data[tag] = self._data[tag].decode('utf-8') + if 'time' in self._data: + self._data['time'] = int(self._data['time']) + self._data['timems'] = '%i:%i'%(self._data['time'] / 60, self._data['time'] % 60) + self._data['length'] = sec2min(self._data['time']) + + def id(self): + """Get the song's playlist ID. (-1 if not in playlist).""" + return self.tag('id', -1) + + def title(self): + """Get the song's title (or filename if it has no title).""" + return self.tag('title', self._data['file']) + + def artist(self): + """Get the song's artist.""" + return self.tag('artist') + + def track(self): + """Get the song's track number.""" + return self.tag('track') + + def album(self): + """Get the album.""" + return self.tag('album') + + def filepath(self): + """Get the filepath.""" + return self._data['file'] + + def tag(self, tag, default=''): + """Get a tag. If it doesn't exist, return default.""" + if tag in self._data: + return self._data[tag] + if tag=='song': + return self.__str__() + + return default + + def expand_tags(self, str): + """Expands tags in form $tag in str.""" + ret = str + ret = ret.replace('$title', self.title()) #to ensure that it is set to at least filename + for tag in self._data: + ret = ret.replace('$' + tag, unicode(self._data[tag])) + ret = ret.replace('$songdir', os.path.dirname(self.filepath())) + return ret + |