12345678910111213141516171819202122232425262728293031323334353637 |
- # -*- coding: utf-8 -*-
- import datetime as dt
- import mutagen
- import symuid.tag_interface
- class Track:
- def __init__(self, path):
- mutagen_file = mutagen.File(filename=path)
- if isinstance(mutagen_file.tags, mutagen.id3.ID3):
- self._iface = symuid.tag_interface.ID3(mutagen_file)
- elif isinstance(mutagen_file.tags, mutagen.mp4.MP4Tags):
- self._iface = symuid.tag_interface.MP4(mutagen_file)
- else:
- raise NotImplementedError((path, type(mutagen_file)))
- @property
- def path(self):
- return self._iface.track_path
- def register_play_count(self, player, library_id, register_dt, play_count, tag_set_cb=None):
- assert isinstance(register_dt, dt.datetime), register_dt
- assert isinstance(play_count, int), play_count
- tag_label = 'symuid:pcnt:{}:{}:{:.0f}'.format(
- player, library_id, register_dt.timestamp(),
- )
- try:
- current_count = self._iface.get_free_int(tag_label)
- assert current_count == play_count, (current_count, play_count)
- except KeyError:
- new_tag = self._iface.set_free_int(tag_label, play_count)
- self._iface.save()
- if tag_set_cb:
- tag_set_cb(self, new_tag)
|