|
@@ -47,6 +47,7 @@ class ID3(_mutagen):
|
|
desc=tag_label,
|
|
desc=tag_label,
|
|
text=[str(data)],
|
|
text=[str(data)],
|
|
)
|
|
)
|
|
|
|
+ # TODO overwrite instead of add() ?
|
|
self._mutagen_file.tags.add(tag)
|
|
self._mutagen_file.tags.add(tag)
|
|
return tag
|
|
return tag
|
|
|
|
|
|
@@ -65,6 +66,8 @@ class ID3(_mutagen):
|
|
|
|
|
|
class MP4(_mutagen):
|
|
class MP4(_mutagen):
|
|
|
|
|
|
|
|
+ _UUID_TAG_KEY = 'symuid:uuid'
|
|
|
|
+
|
|
def __init__(self, mutagen_file):
|
|
def __init__(self, mutagen_file):
|
|
assert mutagen_file.tags, mutagen_file
|
|
assert mutagen_file.tags, mutagen_file
|
|
assert isinstance(mutagen_file.tags, mutagen.mp4.MP4Tags), \
|
|
assert isinstance(mutagen_file.tags, mutagen.mp4.MP4Tags), \
|
|
@@ -87,9 +90,20 @@ class MP4(_mutagen):
|
|
value = MP4._freeform_to_int(values[0])
|
|
value = MP4._freeform_to_int(values[0])
|
|
yield (re.sub(r'^----:', '', label), value)
|
|
yield (re.sub(r'^----:', '', label), value)
|
|
|
|
|
|
|
|
+ def _get_free(self, tag_label):
|
|
|
|
+ # freeform keys start with '----'
|
|
|
|
+ # http://mutagen.readthedocs.io/en/latest/api/mp4.html
|
|
|
|
+ tags = self._mutagen_file.tags['----:' + tag_label]
|
|
|
|
+ assert len(tags) == 1, tags
|
|
|
|
+ return tags[0]
|
|
|
|
+
|
|
def get_free_int(self, tag_label):
|
|
def get_free_int(self, tag_label):
|
|
- tag, = self._mutagen_file.tags['----:' + tag_label]
|
|
|
|
- return MP4._freeform_to_int(tag)
|
|
|
|
|
|
+ return MP4._freeform_to_int(self._get_free(tag_label))
|
|
|
|
+
|
|
|
|
+ def _get_free_uuid(self, tag_label):
|
|
|
|
+ tag = self._get_free(tag_label)
|
|
|
|
+ assert tag.dataformat == mutagen.mp4.AtomDataType.UUID, tag.dataformat
|
|
|
|
+ return tag
|
|
|
|
|
|
def set_free_int(self, tag_label, data):
|
|
def set_free_int(self, tag_label, data):
|
|
assert isinstance(data, int)
|
|
assert isinstance(data, int)
|
|
@@ -101,3 +115,9 @@ class MP4(_mutagen):
|
|
)
|
|
)
|
|
self._mutagen_file.tags['----:' + tag_label] = tag
|
|
self._mutagen_file.tags['----:' + tag_label] = tag
|
|
return tag
|
|
return tag
|
|
|
|
+
|
|
|
|
+ def get_uuid(self):
|
|
|
|
+ try:
|
|
|
|
+ return self._get_free_uuid(self._UUID_TAG_KEY)
|
|
|
|
+ except KeyError:
|
|
|
|
+ return None
|