Merge remote-tracking branch 'warry-github/master' into feature/json-downloaded
# Conflicts: # README.md
This commit is contained in:
+5
-5
@@ -171,7 +171,7 @@ def _process_url(
|
||||
return False
|
||||
|
||||
if "http" not in url:
|
||||
print(f"It seems like that you have supplied an invalid URL: {url}")
|
||||
print(f"It seems like you have supplied an invalid URL: {url}")
|
||||
return True
|
||||
|
||||
url_clean: str = url_ending_clean(url)
|
||||
@@ -286,7 +286,7 @@ def settings_management(
|
||||
|
||||
Args:
|
||||
names (list[str] | None, optional): None (list all options), one (list the value only for this option) or two arguments (set the value for the option). Defaults to None.
|
||||
editor (bool, optional): If set, your favorite system editor will be opened. Defaults to False.
|
||||
editor (bool, optional): If set, your default system editor will be opened. Defaults to False.
|
||||
"""
|
||||
if editor:
|
||||
config_path: Path = Path(path_file_settings())
|
||||
@@ -333,7 +333,7 @@ def login(ctx: typer.Context) -> bool:
|
||||
Returns:
|
||||
bool: True if login was successful, False otherwise.
|
||||
"""
|
||||
print("Let us check, if you are already logged in... ", end="")
|
||||
print("Let us check if you are already logged in... ", end="")
|
||||
|
||||
settings = Settings()
|
||||
tidal = Tidal(settings)
|
||||
@@ -375,7 +375,7 @@ def download(
|
||||
writable=False,
|
||||
readable=True,
|
||||
resolve_path=True,
|
||||
help="List with URLs to download. One per line",
|
||||
help="File with URLs to download. One URL per line.",
|
||||
),
|
||||
] = None,
|
||||
) -> bool:
|
||||
@@ -395,7 +395,7 @@ def download(
|
||||
text: str = file_urls.read_text()
|
||||
urls = text.splitlines()
|
||||
else:
|
||||
print("Provide either URLs, IDs or a file containing URLs (one per line).")
|
||||
print("Provide either URLs or a file containing URLs (one per line).")
|
||||
|
||||
raise typer.Abort()
|
||||
|
||||
|
||||
@@ -71,7 +71,6 @@ class BaseConfig:
|
||||
|
||||
# Move the invalid config file to the backup location.
|
||||
shutil.move(path, path_bak)
|
||||
# TODO: Implement better global logger.
|
||||
print(
|
||||
"Something is wrong with your config. Maybe it is not compatible anymore due to a new app version."
|
||||
f" You can find a backup of your old config here: '{path_bak}'. A new default config was created."
|
||||
|
||||
@@ -203,7 +203,7 @@ class DialogPreferences(QtWidgets.QDialog):
|
||||
):
|
||||
# If a path is set, use it otherwise the users home directory.
|
||||
path_settings: str = os.path.expanduser(obj_line_edit.text()) if obj_line_edit.text() else ""
|
||||
# Check if obj_line_edit is empty but path_default can be usd instead
|
||||
# Check if obj_line_edit is empty but path_default can be used instead
|
||||
path_settings = (
|
||||
path_settings if path_settings else os.path.expanduser(path_default) if path_default else path_settings
|
||||
)
|
||||
@@ -223,7 +223,7 @@ class DialogPreferences(QtWidgets.QDialog):
|
||||
|
||||
dialog.setDirectory(dir_current)
|
||||
|
||||
# Execute dialog and set path is something is choosen.
|
||||
# Execute dialog and set path if something is chosen.
|
||||
if dialog.exec():
|
||||
dir_name: str = dialog.selectedFiles()[0]
|
||||
path: Path = Path(dir_name)
|
||||
|
||||
+17
-3
@@ -409,7 +409,7 @@ class Download:
|
||||
with path_file.open("wb") as f_target:
|
||||
for dl_segment_result in dl_segment_results:
|
||||
with dl_segment_result.path_segment.open("rb") as f_segment:
|
||||
# Read and write junks, which gives better HDD write performance
|
||||
# Read and write chunks, which gives better HDD write performance
|
||||
while segment := f_segment.read(CHUNK_SIZE):
|
||||
f_target.write(segment)
|
||||
|
||||
@@ -1270,7 +1270,7 @@ class Download:
|
||||
response: requests.Response = requests.get(url, timeout=REQUESTS_TIMEOUT_SEC)
|
||||
result = response.content
|
||||
except Exception as e:
|
||||
# TODO: Implement propper logging.
|
||||
# TODO: Implement proper logging.
|
||||
print(e)
|
||||
finally:
|
||||
response.close()
|
||||
@@ -1279,7 +1279,7 @@ class Download:
|
||||
with open(path_file, "rb") as f:
|
||||
result = f.read()
|
||||
except OSError as e:
|
||||
# TODO: Implement propper logging.
|
||||
# TODO: Implement proper logging.
|
||||
print(e)
|
||||
|
||||
return result
|
||||
@@ -1733,15 +1733,22 @@ class Download:
|
||||
pathlib.Path: Path to the converted MP4 file.
|
||||
"""
|
||||
path_file_out: pathlib.Path = path_file.with_suffix(AudioExtensions.MP4)
|
||||
|
||||
self.fn_logger.debug(f"Converting video: {path_file.name} -> {path_file_out.name}")
|
||||
|
||||
ffmpeg = (
|
||||
FFmpeg(executable=self.settings.data.path_binary_ffmpeg)
|
||||
.option("y")
|
||||
.option("hide_banner")
|
||||
.option("nostdin")
|
||||
.input(url=path_file)
|
||||
.output(url=path_file_out, codec="copy", map=0, loglevel="quiet")
|
||||
)
|
||||
|
||||
ffmpeg.execute()
|
||||
|
||||
self.fn_logger.debug(f"Video conversion complete: {path_file_out.name}")
|
||||
|
||||
return path_file_out
|
||||
|
||||
def _extract_flac(self, path_media_src: pathlib.Path) -> pathlib.Path:
|
||||
@@ -1754,8 +1761,13 @@ class Download:
|
||||
pathlib.Path: Path to the extracted FLAC file.
|
||||
"""
|
||||
path_media_out = path_media_src.with_suffix(AudioExtensions.FLAC)
|
||||
|
||||
self.fn_logger.debug(f"Extracting FLAC: {path_media_src.name} -> {path_media_out.name}")
|
||||
|
||||
ffmpeg = (
|
||||
FFmpeg(executable=self.settings.data.path_binary_ffmpeg)
|
||||
.option("hide_banner")
|
||||
.option("nostdin")
|
||||
.input(url=path_media_src)
|
||||
.output(
|
||||
url=path_media_out,
|
||||
@@ -1769,6 +1781,8 @@ class Download:
|
||||
|
||||
ffmpeg.execute()
|
||||
|
||||
self.fn_logger.debug(f"FLAC extraction complete: {path_media_out.name}")
|
||||
|
||||
return path_media_out
|
||||
|
||||
def _extract_video_stream(self, m3u8_variant: m3u8.M3U8, quality: int) -> tuple[m3u8.M3U8 | bool, str]:
|
||||
|
||||
@@ -69,7 +69,7 @@ class Settings:
|
||||
@dataclass
|
||||
class HelpSettings:
|
||||
skip_existing: str = "Skip download if file already exists."
|
||||
album_cover_save: str = "Safe cover to album folder."
|
||||
album_cover_save: str = "Save cover to album folder."
|
||||
lyrics_embed: str = "Embed lyrics in audio file, if lyrics are available."
|
||||
use_primary_album_artist: str = "Use only the primary album artist for folder paths instead of track artists."
|
||||
lyrics_file: str = "Save lyrics to separate *.lrc file, if lyrics are available."
|
||||
@@ -97,11 +97,11 @@ class HelpSettings:
|
||||
"will be converted to MP4. FFmpeg must be installed."
|
||||
)
|
||||
path_binary_ffmpeg: str = (
|
||||
"Path to FFmpeg binary file (executable). Only necessary if FFmpeg not set in $PATH. Mandatory for Windows: "
|
||||
"The directory of `ffmpeg.exe`must be set in %PATH%."
|
||||
"Path to FFmpeg binary file (executable). Only necessary if FFmpeg is not set in $PATH. Mandatory for Windows: "
|
||||
"The directory of `ffmpeg.exe` must be set in %PATH%."
|
||||
)
|
||||
metadata_cover_dimension: str = (
|
||||
"The dimensions of the cover image embedded into the track. Possible values: 320x320, 640x640x 1280x1280."
|
||||
"The dimensions of the cover image embedded into the track. Possible values: 320x320, 640x640, 1280x1280."
|
||||
)
|
||||
metadata_cover_embed: str = "Embed album cover into file."
|
||||
mark_explicit: str = "Mark explicit tracks with '🅴' in track title (only applies to metadata)."
|
||||
|
||||
Reference in New Issue
Block a user