summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Honz <exislow+github@gmail.com>2024-02-01 20:53:45 +0100
committerRobert Honz <exislow+github@gmail.com>2024-02-01 20:53:45 +0100
commitf94cd0d51cf1b6534dcf563cc4aa2d2ca9387c4a (patch)
tree4e40533aca8d04e2272da0084287d10a621552c6
parent1137fe26596f6be069021998d1d161aa5e44fe6b (diff)
downloadtidal-dl-ng-f94cd0d51cf1b6534dcf563cc4aa2d2ca9387c4a.tar.gz
✨ Lyrics are downloaded to separate *.lrc file. Implements #19
-rw-r--r--tidal_dl_ng/constants.py1
-rw-r--r--tidal_dl_ng/download.py29
2 files changed, 29 insertions, 1 deletions
diff --git a/tidal_dl_ng/constants.py b/tidal_dl_ng/constants.py
index 8c8fd6a..1348a74 100644
--- a/tidal_dl_ng/constants.py
+++ b/tidal_dl_ng/constants.py
@@ -2,6 +2,7 @@ from enum import Enum
CTX_TIDAL: str = "tidal"
REQUESTS_TIMEOUT_SEC = 45
+EXTENSION_LYRICS = ".lrc"
class QualityVideo(Enum):
diff --git a/tidal_dl_ng/download.py b/tidal_dl_ng/download.py
index 04ba1f7..e67ce96 100644
--- a/tidal_dl_ng/download.py
+++ b/tidal_dl_ng/download.py
@@ -18,6 +18,7 @@ from tidalapi import Album, Mix, Playlist, Session, Track, UserPlaylist, Video
from tidal_dl_ng.config import Settings
from tidal_dl_ng.constants import (
+ EXTENSION_LYRICS,
REQUESTS_TIMEOUT_SEC,
AudioExtensions,
CoverDimensions,
@@ -239,6 +240,10 @@ class Download:
# Move final file to the configured destination directory.
os.makedirs(os.path.dirname(path_file), exist_ok=True)
shutil.move(tmp_path_file, path_file)
+
+ # Move lyrics file
+ if self.settings.data.lyrics_file:
+ self._move_lyrics(path_file, tmp_path_file)
else:
self.fn_logger.debug(f"Download skipped, since file exists: '{path_file}'")
@@ -254,12 +259,31 @@ class Download:
return not download_skip, path_file
+ def _move_lyrics(self, file_media_dst: str, file_media_src: str):
+ # Build tmp lyrics filename
+ tmp_lyrics_file_path: str = file_media_src + EXTENSION_LYRICS
+ # Check if the file was downloaded
+ if os.path.isfile(tmp_lyrics_file_path):
+ # Move it.
+ shutil.move(tmp_lyrics_file_path, os.path.splitext(file_media_dst)[0] + EXTENSION_LYRICS)
+
def cover_url(self, sid: str, dimension: CoverDimensions = CoverDimensions.Px320):
if sid is None:
return ""
return f"https://resources.tidal.com/images/{sid.replace('-', '/')}/{dimension.value}.jpg"
+ def lyrics_write_file(self, file_path: str, lyrics: str) -> str:
+ result: str = file_path
+
+ try:
+ with open(file_path, "x", encoding="utf-8") as f:
+ f.write(lyrics)
+ except:
+ result = ""
+
+ return result
+
def metadata_write(self, track: Track, path_file: str):
result: bool = False
release_date: str = (
@@ -269,7 +293,7 @@ class Download:
isrc: str = track.isrc if hasattr(track, "isrc") and track.isrc else ""
lyrics: str = ""
- if self.settings.data.lyrics_embed:
+ if self.settings.data.lyrics_embed or self.settings.data.lyrics_file:
# Try to retrieve lyrics.
try:
lyrics: str = track.lyrics().subtitles if hasattr(track, "lyrics") else ""
@@ -277,6 +301,9 @@ class Download:
# TODO: Implement proper logging.
print(f"Could not retrieve lyrics for `{name_builder_item(track)}`.")
+ if lyrics:
+ self.lyrics_write_file(path_file + EXTENSION_LYRICS, lyrics)
+
# `None` values are not allowed.
m: Metadata = Metadata(
path_file=path_file,