Version 0.5.5 commit.
/mp3togo/tags.py
blob:fe1ae65e85f74809d3e54fa96fa96d61f03e9dff -> blob:1803b06b3abe74d35e87d9b1bdbfe59601599596
--- mp3togo/tags.py
+++ mp3togo/tags.py
@@ -35,12 +35,21 @@ else:
HAVE_VORBIS = True
try:
+ import eyeD3
+except ImportError:
+ HAVE_eyeD3 = False
+else:
+ HAVE_eyeD3 = True
+
+try:
import ID3
except ImportError:
HAVE_ID3 = False
else:
HAVE_ID3 = True
+import codecs
+
HAVE_METAFLAC=False
for path in os.environ['PATH'].split(':'):
if os.path.exists(os.path.join(path, 'metaflac')):
@@ -84,9 +93,18 @@ class Tags(UserDict.DictMixin):
return o
if self._type == 'mp3' and HAVE_ID3:
- info = ID3.ID3(self._file, as_tuple=1).as_dict()
- self._tags = copytags(info)
- del info
+ if HAVE_eyeD3:
+ eye = eyeD3.Tag()
+ eye.link(self._file)
+ self._tags['ARTIST'] = [eye.getArtist() or '']
+ self._tags['ALBUM'] = [eye.getAlbum() or '']
+ self._tags['TITLE'] = [eye.getTitle() or '']
+ self._tags['GENRE'] = [eye.getGenre().name or '']
+ del eye
+ elif HAVE_ID3:
+ info = ID3.ID3(self._file, as_tuple=1).as_dict()
+ self._tags = copytags(info)
+ del info
elif self._type == 'ogg' and HAVE_VORBIS:
info = ogg.vorbis.VorbisFile(self._file).comment().as_dict()
self._tags = copytags(info)
@@ -158,14 +176,31 @@ class Tags(UserDict.DictMixin):
del out
del vf
elif fmt == 'mp3':
- out = ID3.ID3(filename, as_tuple=1)
- puttags(out)
- try:
- out.write()
- except:
- # Tagging failed, but the file should be okay.
- pass
- del out
+ if HAVE_eyeD3:
+ out = eyeD3.Tag()
+ out.link(filename, eyeD3.ID3_V1)
+ out.setVersion(eyeD3.ID3_V1)
+ d = {}
+ d = puttags(d)
+ out.setArtist(d['ARTIST'])
+ out.setAlbum(d['ALBUM'])
+ out.setTitle(d['TITLE'])
+ g = eyeD3.Genre()
+ g.setId(d['GENRE'])
+ out.setGenre(g)
+ if d.has_key('COMMENT'):
+ out.addComment(d['COMMENT'])
+ out.update()
+ del out
+ elif HAVE_ID3:
+ out = ID3.ID3(filename, as_tuple=1)
+ puttags(out)
+ try:
+ out.write()
+ except:
+ # Tagging failed, but the file should be okay.
+ pass
+ del out
else:
self._lock.release()
raise setup.ErrorUnknownFileType
@@ -179,7 +214,7 @@ class Tags(UserDict.DictMixin):
return False
try:
- ifile = file(indexname, 'a')
+ ifile = codecs.open(indexname, 'a', 'utf-8')
ifile.write(filename + "\n")
keys = self._tags.keys()
keys.sort()