Merge pull request #27 from exislow/19-adding-lyrics-to-stand-alone-lrc-file

#19 adding lyrics to stand alone lrc file
This commit is contained in:
exislow
2024-02-01 20:54:49 +01:00
committed by GitHub
3 changed files with 33 additions and 3 deletions
+1
View File
@@ -2,6 +2,7 @@ from enum import Enum
CTX_TIDAL: str = "tidal"
REQUESTS_TIMEOUT_SEC = 45
EXTENSION_LYRICS = ".lrc"
class QualityVideo(Enum):
+28 -1
View File
@@ -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_save:
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,
+4 -2
View File
@@ -12,7 +12,8 @@ class Settings:
skip_existing: SkipExisting = SkipExisting.Disabled
# TODO: Implement cover download to a separate file.
# album_cover_save: bool = True
lyrics_save: bool = False
lyrics_embed: bool = False
lyrics_file: bool = False
# TODO: Implement API KEY selection.
# api_key_index: bool = 0
# TODO: Implement album info download to separate file.
@@ -41,7 +42,8 @@ class HelpSettings:
"different file extension exists."
)
album_cover_save: str = "Safe cover to album folder."
lyrics_save: str = "Safe lyrics to audio file."
lyrics_embed: str = "Embed lyrics in audio file."
lyrics_file: str = "Save lyrics to separate *.lrc file."
api_key_index: str = "Set the device API KEY."
album_info_save: str = "Save album info to track?"
video_download: str = "Allow download of videos."