__init__.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. # -*- coding: utf-8 -*-
  2. import datetime as dt
  3. import mutagen
  4. import symuid.tag_interface
  5. class Track:
  6. def __init__(self, path):
  7. mutagen_file = mutagen.File(filename=path)
  8. if isinstance(mutagen_file.tags, mutagen.id3.ID3):
  9. self._iface = symuid.tag_interface.ID3(mutagen_file)
  10. elif isinstance(mutagen_file.tags, mutagen.mp4.MP4Tags):
  11. self._iface = symuid.tag_interface.MP4(mutagen_file)
  12. else:
  13. raise NotImplementedError((path, type(mutagen_file)))
  14. @property
  15. def path(self):
  16. return self._iface.track_path
  17. def register_play_count(self, player, library_id, register_dt, play_count, tag_set_cb=None):
  18. assert isinstance(register_dt, dt.datetime), register_dt
  19. assert isinstance(play_count, int), play_count
  20. tag_label = 'symuid:pcnt:{}:{}:{:.0f}'.format(
  21. player, library_id, register_dt.timestamp(),
  22. )
  23. try:
  24. current_count = self._iface.get_free_int(tag_label)
  25. assert current_count == play_count, (current_count, play_count)
  26. except KeyError:
  27. new_tag = self._iface.set_free_int(tag_label, play_count)
  28. self._iface.save()
  29. if tag_set_cb:
  30. tag_set_cb(self, new_tag)