Merge pull request #589 from exislow:486-explicit-tagging

feat(metadata): ✨ add explicit track metadata handling
This commit is contained in:
exislow
2025-10-17 15:41:10 +02:00
committed by GitHub
3 changed files with 11 additions and 1 deletions
+1
View File
@@ -13,6 +13,7 @@ PLAYLIST_EXTENSION: str = ".m3u"
PLAYLIST_PREFIX: str = "_" PLAYLIST_PREFIX: str = "_"
FILENAME_LENGTH_MAX: int = 255 FILENAME_LENGTH_MAX: int = 255
FORMAT_TEMPLATE_EXPLICIT: str = " (Explicit)" FORMAT_TEMPLATE_EXPLICIT: str = " (Explicit)"
METADATA_EXPLICIT: str = " 🅴"
class QualityVideo(StrEnum): class QualityVideo(StrEnum):
+6 -1
View File
@@ -35,6 +35,7 @@ from tidal_dl_ng.constants import (
CHUNK_SIZE, CHUNK_SIZE,
COVER_NAME, COVER_NAME,
EXTENSION_LYRICS, EXTENSION_LYRICS,
METADATA_EXPLICIT,
METADATA_LOOKUP_UPC, METADATA_LOOKUP_UPC,
PLAYLIST_EXTENSION, PLAYLIST_EXTENSION,
PLAYLIST_PREFIX, PLAYLIST_PREFIX,
@@ -1226,6 +1227,9 @@ class Download:
metadata_target_upc = MetadataTargetUPC(self.settings.data.metadata_target_upc) metadata_target_upc = MetadataTargetUPC(self.settings.data.metadata_target_upc)
target_upc: dict[str, str] = METADATA_LOOKUP_UPC[metadata_target_upc] target_upc: dict[str, str] = METADATA_LOOKUP_UPC[metadata_target_upc]
explicit: bool = track.explicit if hasattr(track, "explicit") else False
title = name_builder_title(track)
title += METADATA_EXPLICIT if explicit else ""
# `None` values are not allowed. # `None` values are not allowed.
m: Metadata = Metadata( m: Metadata = Metadata(
@@ -1234,7 +1238,7 @@ class Download:
lyrics=lyrics_synced, lyrics=lyrics_synced,
lyrics_unsynced=lyrics_unsynced, lyrics_unsynced=lyrics_unsynced,
copy_right=copy_right, copy_right=copy_right,
title=name_builder_title(track), title=title,
artists=name_builder_artist(track, delimiter=self.settings.data.metadata_delimiter_artist), artists=name_builder_artist(track, delimiter=self.settings.data.metadata_delimiter_artist),
album=track.album.name if track.album else "", album=track.album.name if track.album else "",
tracknumber=track.track_num, tracknumber=track.track_num,
@@ -1252,6 +1256,7 @@ class Download:
url_share=track.share_url if track.share_url and self.settings.data.metadata_write_url else "", url_share=track.share_url if track.share_url and self.settings.data.metadata_write_url else "",
replay_gain_write=self.settings.data.metadata_replay_gain, replay_gain_write=self.settings.data.metadata_replay_gain,
upc=track.album.upc if track.album and track.album.upc else "", upc=track.album.upc if track.album and track.album.upc else "",
explicit=explicit,
) )
m.save() m.save()
+4
View File
@@ -31,6 +31,7 @@ class Metadata:
replay_gain_write: bool replay_gain_write: bool
upc: str upc: str
target_upc: dict[str, str] target_upc: dict[str, str]
explicit: bool
m: mutagen.mp4.MP4 | mutagen.mp4.MP4 | mutagen.flac.FLAC m: mutagen.mp4.MP4 | mutagen.mp4.MP4 | mutagen.flac.FLAC
def __init__( def __init__(
@@ -59,6 +60,7 @@ class Metadata:
url_share: str = "", url_share: str = "",
replay_gain_write: bool = True, replay_gain_write: bool = True,
upc: str = "", upc: str = "",
explicit: bool = False,
): ):
self.path_file = path_file self.path_file = path_file
self.title = title self.title = title
@@ -84,6 +86,7 @@ class Metadata:
self.replay_gain_write = replay_gain_write self.replay_gain_write = replay_gain_write
self.upc = upc self.upc = upc
self.target_upc = target_upc self.target_upc = target_upc
self.explicit = explicit
self.m: mutagen.FileType = mutagen.File(self.path_file) self.m: mutagen.FileType = mutagen.File(self.path_file)
def _cover(self) -> bool: def _cover(self) -> bool:
@@ -189,6 +192,7 @@ class Metadata:
self.m.tags["isrc"] = self.isrc self.m.tags["isrc"] = self.isrc
self.m.tags["\xa9url"] = self.url_share self.m.tags["\xa9url"] = self.url_share
self.m.tags[f"----:com.apple.iTunes:{self.target_upc['MP4']}"] = self.upc.encode("utf-8") self.m.tags[f"----:com.apple.iTunes:{self.target_upc['MP4']}"] = self.upc.encode("utf-8")
self.m.tags["rtng"] = [1 if self.explicit else 0]
if self.replay_gain_write: if self.replay_gain_write:
self.m.tags["----:com.apple.iTunes:REPLAYGAIN_ALBUM_GAIN"] = str(self.album_replay_gain).encode("utf-8") self.m.tags["----:com.apple.iTunes:REPLAYGAIN_ALBUM_GAIN"] = str(self.album_replay_gain).encode("utf-8")