Correct duplicate values #22
@ -1,5 +1,5 @@
|
||||
import mutagen
|
||||
from mutagen.id3 import ID3, Frame, APIC
|
||||
from mutagen.id3 import ID3, Frame, APIC, USLT
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
import logging
|
||||
@ -7,6 +7,7 @@ from PIL import Image
|
||||
|
||||
from ..utils.config import logging_settings, main_settings
|
||||
from ..objects import Song, Target, Metadata
|
||||
from ..objects.metadata import Mapping
|
||||
from ..connection import Connection
|
||||
|
||||
LOGGER = logging_settings["tagging_logger"]
|
||||
@ -105,6 +106,11 @@ def write_metadata_to_target(metadata: Metadata, target: Target, song: Song):
|
||||
data=converted_target.read_bytes(),
|
||||
)
|
||||
)
|
||||
id3_object.frames.delall("USLT")
|
||||
uslt_val = metadata.get_id3_value(Mapping.UNSYNCED_LYRICS)
|
||||
id3_object.frames.add(
|
||||
USLT(encoding=3, lang=u'eng', desc=u'desc', text=uslt_val)
|
||||
)
|
||||
|
||||
mutagen_file = mutagen.File(target.file_path)
|
||||
|
||||
|
@ -32,7 +32,7 @@ class FormattedText:
|
||||
if self.is_empty and other.is_empty:
|
||||
return True
|
||||
|
||||
return self.doc == other.doc
|
||||
return self.html == other.html
|
||||
|
||||
@property
|
||||
def markdown(self) -> str:
|
||||
|
@ -92,7 +92,7 @@ class Mapping(Enum):
|
||||
key = attribute.value
|
||||
|
||||
if key[0] == 'T':
|
||||
# a text fiel
|
||||
# a text field
|
||||
return cls.get_text_instance(key, value)
|
||||
if key[0] == "W":
|
||||
# an url field
|
||||
@ -355,7 +355,12 @@ class Metadata:
|
||||
return None
|
||||
|
||||
list_data = self.id3_dict[field]
|
||||
|
||||
#correct duplications
|
||||
correct_list_data = list()
|
||||
for data in list_data:
|
||||
if data not in correct_list_data:
|
||||
correct_list_data.append(data)
|
||||
list_data = correct_list_data
|
||||
# convert for example the time objects to timestamps
|
||||
for i, element in enumerate(list_data):
|
||||
# for performance’s sake I don't do other checks if it is already the right type
|
||||
@ -368,7 +373,7 @@ class Metadata:
|
||||
if type(element) == ID3Timestamp:
|
||||
list_data[i] = element.timestamp
|
||||
continue
|
||||
|
||||
|
||||
"""
|
||||
Version 2.4 of the specification prescribes that all text fields (the fields that start with a T, except for TXXX) can contain multiple values separated by a null character.
|
||||
Thus if above conditions are met, I concatenate the list,
|
||||
@ -376,7 +381,7 @@ class Metadata:
|
||||
"""
|
||||
if field.value[0].upper() == "T" and field.value.upper() != "TXXX":
|
||||
return self.NULL_BYTE.join(list_data)
|
||||
|
||||
|
||||
return list_data[0]
|
||||
|
||||
def get_mutagen_object(self, field):
|
||||
@ -395,6 +400,5 @@ class Metadata:
|
||||
"""
|
||||
# set the tagging timestamp to the current time
|
||||
self.__setitem__(Mapping.TAGGING_TIME, [ID3Timestamp.now()])
|
||||
|
||||
for field in self.id3_dict:
|
||||
yield self.get_mutagen_object(field)
|
||||
|
@ -69,7 +69,7 @@ dependencies = [
|
||||
"toml~=0.10.2",
|
||||
"typing_extensions~=4.7.1",
|
||||
|
||||
"python-sponsorblock~=0.0.0",
|
||||
"python-sponsorblock~=0.1.dev1",
|
||||
"youtube_dl",
|
||||
]
|
||||
dynamic = [
|
||||
|
Loading…
Reference in New Issue
Block a user