tagging.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from helper import console
  2. from mutagen.id3 import ID3NoHeaderError
  3. from mutagen.id3 import ID3, TIT2, TALB, TPE1, COMM, TCON, APIC
  4. from helper.sites.request import RawRequest
  5. from tags import available
  6. from helper.settings import Settings
  7. def search_tags(item):
  8. console.output('Searching for id3 tags')
  9. items = []
  10. for site in available:
  11. console.output('Searching {0}'.format(site.url))
  12. _items = site.perform_search('{0}+{1}'.format(item.artist, item.title))
  13. console.output('\tFound {0} results'.format(len(_items)))
  14. items.extend(_items)
  15. if len(items) == 0:
  16. console.output('No matching tags found')
  17. return None
  18. picked_tag = console.option_picker('Pick the most matching tag',
  19. items,
  20. quit=True,
  21. objects=[
  22. '__id__',
  23. 'x.title',
  24. 'x.artist',
  25. 'x.album',
  26. 'x.label'
  27. ],
  28. table=[
  29. ('ID', 2),
  30. ('Title', 50),
  31. ('Artist', 40),
  32. ('Album', 40),
  33. ('Label', 29)
  34. ])
  35. if picked_tag is not None:
  36. return items[picked_tag]
  37. else:
  38. return None
  39. def write_tags_to_file(file, item):
  40. try:
  41. mp3 = ID3(file)
  42. mp3.clear()
  43. except ID3NoHeaderError:
  44. mp3 = ID3()
  45. tagitem = item.tag_item
  46. mp3['TIT2'] = TIT2(encoding=3, text=tagitem.title)
  47. mp3['TALB'] = TALB(encoding=3, text=tagitem.album)
  48. mp3['TPE1'] = TPE1(encoding=3, text=tagitem.artist)
  49. mp3['TCON'] = TCON(encoding=3, text=tagitem.genre)
  50. mp3['APIC'] = APIC(encoding=3,
  51. mime='image/jpeg',
  52. type=3,
  53. desc='Cover',
  54. data=tagitem.cover_image)
  55. mp3.add(COMM(encoding=3, lang=u'eng', text=Settings.CommentFormat.get().format(**tagitem.__dict__)))
  56. mp3.save(file)
  57. print(Settings.CommentFormat.get().format(**tagitem.__dict__))
  58. print(mp3)
  59. def download_artwork(tag):
  60. console.output('Downloading artwork from {0}'.format(tag.cover_url), level=console.DBG_INFO)
  61. cover = RawRequest.get(tag.cover_url)
  62. if len(cover.content) > 0:
  63. tag.set_cover_image(cover.content)
  64. return True
  65. else:
  66. return False