diff --git a/gmusicprocurator/id3.py b/gmusicprocurator/id3.py index 4229892..55f852e 100644 --- a/gmusicprocurator/id3.py +++ b/gmusicprocurator/id3.py @@ -40,4 +40,26 @@ def set_albumart(id3, key, urls): EasyID3.RegisterKey('albumart', setter=set_albumart) + +def convert_google_field_to_mp3(google_value): + """ + Convert a Google metadata field value to the equivalent ID3 tag value. + + :rtype: str + """ + if isinstance(google_value, basestring): + return google_value + elif isinstance(google_value, list): + # take the first value, see what it is + item = google_value[0] + if isinstance(item, basestring): + return item + elif isinstance(item, dict) and 'url' in item: + # e.g., albumArtRef + return item['url'] + else: + return str(item) + else: + return str(google_value) + __all__ = ('EasyMP3',) diff --git a/gmusicprocurator/views/proxy.py b/gmusicprocurator/views/proxy.py index 5cb0488..c63a0f4 100644 --- a/gmusicprocurator/views/proxy.py +++ b/gmusicprocurator/views/proxy.py @@ -28,7 +28,7 @@ from xspf import Xspf from ..app import app, music -from ..id3 import EasyMP3 +from ..id3 import convert_google_field_to_mp3, EasyMP3 HALF_MB = 1024 * 512 # in bytes @@ -166,22 +166,10 @@ def add_id3_tags_to_mp3(song_id, input_data): f.write(input_data.getvalue()) f.flush() audio = EasyMP3(f.name) - for gmf, id3f in METADATA_FIELDS.iteritems(): - if gmf in song_info: - if isinstance(song_info[gmf], basestring): - audio[id3f] = song_info[gmf] - elif isinstance(song_info[gmf], list): - # take the first value, see what it is - val = song_info[gmf][0] - if isinstance(val, basestring): - audio[id3f] = val - elif isinstance(val, dict) and 'url' in val: - # e.g., albumArtRef - audio[id3f] = val['url'] - else: - audio[id3f] = str(val) - else: - audio[id3f] = str(song_info[gmf]) + audio.update(dict( + [(id3_field, convert_google_field_to_mp3(song_info[google_field])) + for google_field, id3_field in METADATA_FIELDS.iteritems() + if google_field in song_info])) audio.save() copyfileobj(open(f.name, 'rb'), output) return output