mirror of
https://github.com/glomatico/gamdl.git
synced 2026-06-13 12:15:18 +03:00
Add option to use album release date for songs
This commit is contained in:
@@ -334,6 +334,12 @@ def make_sync(func):
|
||||
help="Download only synced lyrics",
|
||||
default=song_downloader_sig.parameters["synced_lyrics_only"].default,
|
||||
)
|
||||
@click.option(
|
||||
"--use-album-date",
|
||||
is_flag=True,
|
||||
help="Use album release date for songs",
|
||||
default=song_downloader_sig.parameters["use_album_date"].default,
|
||||
)
|
||||
# DownloaderMusicVideo specific options
|
||||
@click.option(
|
||||
"--music-video-codec-priority",
|
||||
@@ -410,6 +416,7 @@ async def main(
|
||||
synced_lyrics_format: SyncedLyricsFormat,
|
||||
no_synced_lyrics: bool,
|
||||
synced_lyrics_only: bool,
|
||||
use_album_date: bool,
|
||||
music_video_codec_priority: list[MusicVideoCodec],
|
||||
music_video_remux_format: RemuxFormatMusicVideo,
|
||||
music_video_resolution: MusicVideoResolution,
|
||||
@@ -507,6 +514,7 @@ async def main(
|
||||
synced_lyrics_format=synced_lyrics_format,
|
||||
no_synced_lyrics=no_synced_lyrics,
|
||||
synced_lyrics_only=synced_lyrics_only,
|
||||
use_album_date=use_album_date,
|
||||
)
|
||||
music_video_downloader = AppleMusicMusicVideoDownloader(
|
||||
base_downloader=base_downloader,
|
||||
|
||||
@@ -19,6 +19,7 @@ class AppleMusicSongDownloader(AppleMusicBaseDownloader):
|
||||
synced_lyrics_format: SyncedLyricsFormat = SyncedLyricsFormat.LRC,
|
||||
no_synced_lyrics: bool = False,
|
||||
synced_lyrics_only: bool = False,
|
||||
use_album_date: bool = False,
|
||||
):
|
||||
self.__dict__.update(base_downloader.__dict__)
|
||||
self.interface = interface
|
||||
@@ -26,6 +27,7 @@ class AppleMusicSongDownloader(AppleMusicBaseDownloader):
|
||||
self.synced_lyrics_format = synced_lyrics_format
|
||||
self.no_synced_lyrics = no_synced_lyrics
|
||||
self.synced_lyrics_only = synced_lyrics_only
|
||||
self.use_album_date = use_album_date
|
||||
|
||||
async def get_download_item(
|
||||
self,
|
||||
@@ -45,9 +47,10 @@ class AppleMusicSongDownloader(AppleMusicBaseDownloader):
|
||||
)
|
||||
|
||||
webplayback = await self.interface.apple_music_api.get_webplayback(song_id)
|
||||
download_item.media_tags = self.interface.get_tags(
|
||||
download_item.media_tags = await self.interface.get_tags(
|
||||
webplayback,
|
||||
download_item.lyrics.unsynced if download_item.lyrics else None,
|
||||
self.use_album_date,
|
||||
)
|
||||
|
||||
if playlist_metadata:
|
||||
|
||||
@@ -3,6 +3,7 @@ import base64
|
||||
import datetime
|
||||
import logging
|
||||
|
||||
from async_lru import alru_cache
|
||||
from pywidevine import PSSH, Cdm
|
||||
|
||||
from ..api.apple_music_api import AppleMusicApi
|
||||
@@ -66,3 +67,21 @@ class AppleMusicInterface:
|
||||
logger.debug(f"Decryption key: {decryption_key}")
|
||||
|
||||
return decryption_key
|
||||
|
||||
@alru_cache()
|
||||
async def get_media_date(
|
||||
self,
|
||||
media_id: str,
|
||||
) -> datetime.datetime | None:
|
||||
lookup_result = await self.itunes_api.get_lookup_result(media_id)
|
||||
if not lookup_result["results"]:
|
||||
return None
|
||||
|
||||
release_date = lookup_result["results"][0].get("releaseDate")
|
||||
if not release_date:
|
||||
return None
|
||||
|
||||
parsed_date = self.parse_date(release_date)
|
||||
logger.debug(f"Parsed media date: {parsed_date}")
|
||||
|
||||
return parsed_date
|
||||
|
||||
@@ -168,10 +168,11 @@ class AppleMusicSongInterface(AppleMusicInterface):
|
||||
|
||||
return f"[{timestamp.strftime('%M:%S.%f')[:-4]}]{text}"
|
||||
|
||||
def get_tags(
|
||||
async def get_tags(
|
||||
self,
|
||||
webplayback: dict,
|
||||
lyrics: str | None = None,
|
||||
use_album_date: bool = False,
|
||||
) -> MediaTags:
|
||||
webplayback_metadata = webplayback["songList"][0]["assets"][0]["metadata"]
|
||||
|
||||
@@ -194,9 +195,13 @@ class AppleMusicSongInterface(AppleMusicInterface):
|
||||
composer_sort=webplayback_metadata.get("sort-composer"),
|
||||
copyright=webplayback_metadata.get("copyright"),
|
||||
date=(
|
||||
self.parse_date(webplayback_metadata["releaseDate"])
|
||||
if webplayback_metadata.get("releaseDate")
|
||||
else None
|
||||
await self.get_media_date(webplayback_metadata["playlistId"])
|
||||
if use_album_date
|
||||
else (
|
||||
self.parse_date(webplayback_metadata["releaseDate"])
|
||||
if webplayback_metadata.get("releaseDate")
|
||||
else None
|
||||
)
|
||||
),
|
||||
disc=webplayback_metadata["discNumber"],
|
||||
disc_total=webplayback_metadata["discCount"],
|
||||
|
||||
Reference in New Issue
Block a user