from helper import console from mutagen.id3 import ID3NoHeaderError from mutagen.id3 import ID3, TIT2, TALB, TPE1, COMM, TCON, APIC from helper.sites.request import RawRequest from tags import available from helper.settings import Settings def search_tags(item): console.output('Searching for id3 tags') items = [] for site in available: console.output('Searching {0}'.format(site.url)) _items = site.perform_search('{0}+{1}'.format(item.artist, item.title)) console.output('\tFound {0} results'.format(len(_items))) items.extend(_items) if len(items) == 0: console.output('No matching tags found') return None picked_tag = console.option_picker('Pick the most matching tag', items, quit=True, objects=[ '__id__', 'x.title', 'x.artist', 'x.album', 'x.label' ], table=[ ('ID', 2), ('Title', 50), ('Artist', 40), ('Album', 40), ('Label', 29) ]) if picked_tag is not None: return items[picked_tag] else: return None def write_tags_to_file(file, item): try: mp3 = ID3(file) mp3.clear() except ID3NoHeaderError: mp3 = ID3() tagitem = item.tag_item mp3['TIT2'] = TIT2(encoding=3, text=tagitem.title) mp3['TALB'] = TALB(encoding=3, text=tagitem.album) mp3['TPE1'] = TPE1(encoding=3, text=tagitem.artist) mp3['TCON'] = TCON(encoding=3, text=tagitem.genre) mp3['APIC'] = APIC(encoding=3, mime='image/jpeg', type=3, desc='Cover', data=tagitem.cover_image) mp3.add(COMM(encoding=3, lang=u'eng', text=Settings.CommentFormat.get().format(**tagitem.__dict__))) mp3.save(file) print(Settings.CommentFormat.get().format(**tagitem.__dict__)) print(mp3) def download_artwork(tag): console.output('Downloading artwork from {0}'.format(tag.cover_url), level=console.DBG_INFO) cover = RawRequest.get(tag.cover_url) if len(cover.content) > 0: tag.set_cover_image(cover.content) return True else: return False