Browse Source

symuid.Track: refactor

Fabian Peter Hammerle 6 years ago
parent
commit
906127b967
2 changed files with 16 additions and 8 deletions
  1. 2 1
      symuid-import-itunes
  2. 14 7
      symuid/__init__.py

+ 2 - 1
symuid-import-itunes

@@ -27,7 +27,8 @@ def symuid_import_itunes(xml_library_path, path_regex_sub):
                     library_id=lib.id,
                     register_dt=itunes_track.last_play_dt,
                     play_count=itunes_track.play_count,
-                    tag_set_cb=lambda tr, tag: print('{!r}: set tag {!r}'.format(tr.path, tag)),
+                    tag_set_cb=lambda tr, tag:
+                        print('{!r}: set tag {!r}'.format(tr.path, tag)),
                 )
 
 

+ 14 - 7
symuid/__init__.py

@@ -27,6 +27,17 @@ class Track:
     def has_mp4_tags(self):
         return self.has_tags and isinstance(self._mutagen.tags, mutagen.mp4.MP4Tags)
 
+    def _set_mp4_freeform_int(self, tag_label, data):
+        assert isinstance(data, int)
+        tag = mutagen.mp4.MP4FreeForm(
+            # "a signed big-endian integer with length one of { 1,2,3,4,8 } bytes"
+            dataformat=mutagen.mp4.AtomDataType.INTEGER,
+            # TODO set byte length properly
+            data=data.to_bytes(1, byteorder='big', signed=True),
+        )
+        self._mutagen.tags['----:' + tag_label] = tag
+        return tag
+
     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
@@ -63,13 +74,9 @@ class Track:
                 )
                 assert reg_count == play_count, (reg_count, play_count)
             else:
-                self._mutagen.tags[tag_label_mp4] = tag = mutagen.mp4.MP4FreeForm(
-                    # "a signed big-endian integer with length one of { 1,2,3,4,8 } bytes"
-                    # TODO set byte length properly
-                    # setting signed=True just to be explicit here
-                    #  (irrelevant for positive integers)
-                    data=play_count.to_bytes(1, byteorder='big', signed=True),
-                    dataformat=mutagen.mp4.AtomDataType.INTEGER,
+                tag = self._set_mp4_freeform_int(
+                    tag_label=tag_label,
+                    data=play_count,
                 )
                 self._mutagen.save()
                 if tag_set_cb: