1 from PyQt4
import QtCore
2 from misc
import ORGNAME
, APPNAME
, sec2min
5 # compare two songs with respect to their album
6 def isSameAlbum(song1
, song2
):
7 return song1
.getAlbum()==song2
.getAlbum() \
8 and song1
.getTag('date')==song2
.getTag('date')
11 """The Song class offers an abstraction of a song."""
14 def __init__(self
, data
):
16 if 'id' in self
._data
:
17 self
._data
['id']=int(self
._data
['id'])
18 if 'track' in self
._data
:
19 # make sure the track is a valid number!
21 for i
in xrange(len(t
)):
22 if ord(t
[i
])<ord('0') or ord(t
[i
])>ord('9'):
24 self
._data
['track']=int(t
[0:i
])
26 self
._data
['track']=-1
28 self
._data
['track']=int(self
._data
['track'])
30 # ensure all string-values are utf-8 encoded
31 for tag
in self
._data
.keys():
32 if isinstance(self
._data
[tag
], str):
33 self
._data
[tag
]=unicode(self
._data
[tag
], "utf-8")
34 if 'time' in self
._data
:
35 self
._data
['time'] = int(self
._data
['time'])
36 self
._data
['timems'] = '%i:%i'%(self
._data
['time'] / 60, self
._data
['time'] % 60)
37 self
._data
['length'] = sec2min(self
._data
['time'])
41 return self
.getTag('id', -1)
45 return self
.getTag('title', self
._data
['file'])
49 return self
.getTag('artist', self
._data
['file'])
53 return self
.getTag('track')
57 return self
.getTag('album')
59 def getFilepath(self
):
60 """Get the filepath."""
61 return self
._data
['file']
64 """Checks if the string str matches this song. Assumes str is lowercase."""
65 return str.__str
__() in self
.__str
__().lower()
68 return "%s - %s [%s]" % (self
.getTag('artist'), self
.getTag('title'), self
.getTag('album'))
70 def getTag(self
, tag
, default
=''):
71 """Get a tag. If it doesn't exist, return $default."""
73 return self
._data
[tag
]
79 def expand_tags(self
, str):
80 """Expands tags in form $tag in str."""
82 for tag
in self
._data
:
83 ret
= ret
.replace('$' + tag
, unicode(self
._data
[tag
]))