feat: improved interface
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
6e354af0d1
commit
7186f06ce6
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -19,6 +19,7 @@
|
|||||||
"albumsort",
|
"albumsort",
|
||||||
"APIC",
|
"APIC",
|
||||||
"Bandcamp",
|
"Bandcamp",
|
||||||
|
"bitrate",
|
||||||
"dotenv",
|
"dotenv",
|
||||||
"encyclopaedia",
|
"encyclopaedia",
|
||||||
"ENDC",
|
"ENDC",
|
||||||
@ -27,6 +28,7 @@
|
|||||||
"metallum",
|
"metallum",
|
||||||
"musify",
|
"musify",
|
||||||
"OKBLUE",
|
"OKBLUE",
|
||||||
|
"OKGREEN",
|
||||||
"pathvalidate",
|
"pathvalidate",
|
||||||
"Referer",
|
"Referer",
|
||||||
"sponsorblock",
|
"sponsorblock",
|
||||||
|
@ -47,7 +47,7 @@ def correct_codec(target: Target, bitrate_kb: int = main_settings["bitrate"], au
|
|||||||
|
|
||||||
# run the ffmpeg command with a progressbar
|
# run the ffmpeg command with a progressbar
|
||||||
ff = FfmpegProgress(ffmpeg_command)
|
ff = FfmpegProgress(ffmpeg_command)
|
||||||
with tqdm(total=100, desc=f"removing {len(interval_list)} segments") as pbar:
|
with tqdm(total=100, desc=f"processing") as pbar:
|
||||||
for progress in ff.run_command_with_progress():
|
for progress in ff.run_command_with_progress():
|
||||||
pbar.update(progress-pbar.n)
|
pbar.update(progress-pbar.n)
|
||||||
|
|
||||||
|
@ -166,9 +166,9 @@ class Downloader:
|
|||||||
self.genre = genre or get_genre()
|
self.genre = genre or get_genre()
|
||||||
self.process_metadata_anyway = process_metadata_anyway
|
self.process_metadata_anyway = process_metadata_anyway
|
||||||
|
|
||||||
print()
|
output()
|
||||||
print(f"Downloading to: \"{self.genre}\"")
|
output(f"Downloading to: \"{self.genre}\"", color=BColors.HEADER)
|
||||||
print()
|
output()
|
||||||
|
|
||||||
def print_current_options(self):
|
def print_current_options(self):
|
||||||
self.page_dict = dict()
|
self.page_dict = dict()
|
||||||
@ -312,9 +312,7 @@ class Downloader:
|
|||||||
|
|
||||||
def download(self, data_objects: List[DatabaseObject], **kwargs) -> bool:
|
def download(self, data_objects: List[DatabaseObject], **kwargs) -> bool:
|
||||||
output()
|
output()
|
||||||
if len(data_objects) == 1:
|
if len(data_objects) > 1:
|
||||||
output(f"Downloading {data_objects[0].option_string}...", color=BColors.BOLD)
|
|
||||||
else:
|
|
||||||
output(f"Downloading {len(data_objects)} objects...", *("- " + o.option_string for o in data_objects), color=BColors.BOLD, sep="\n")
|
output(f"Downloading {len(data_objects)} objects...", *("- " + o.option_string for o in data_objects), color=BColors.BOLD, sep="\n")
|
||||||
|
|
||||||
_result_map: Dict[DatabaseObject, DownloadResult] = dict()
|
_result_map: Dict[DatabaseObject, DownloadResult] = dict()
|
||||||
|
@ -29,7 +29,7 @@ from ..utils.config import main_settings
|
|||||||
from ..utils.support_classes.query import Query
|
from ..utils.support_classes.query import Query
|
||||||
from ..utils.support_classes.download_result import DownloadResult
|
from ..utils.support_classes.download_result import DownloadResult
|
||||||
from ..utils.string_processing import fit_to_file_system
|
from ..utils.string_processing import fit_to_file_system
|
||||||
from ..utils import trace
|
from ..utils import trace, output, BColors
|
||||||
|
|
||||||
INDEPENDENT_DB_OBJECTS = Union[Label, Album, Artist, Song]
|
INDEPENDENT_DB_OBJECTS = Union[Label, Album, Artist, Song]
|
||||||
INDEPENDENT_DB_TYPES = Union[Type[Song], Type[Album], Type[Artist], Type[Label]]
|
INDEPENDENT_DB_TYPES = Union[Type[Song], Type[Album], Type[Artist], Type[Label]]
|
||||||
@ -328,7 +328,10 @@ class Page:
|
|||||||
naming_dict: NamingDict,
|
naming_dict: NamingDict,
|
||||||
**kwargs
|
**kwargs
|
||||||
) -> DownloadResult:
|
) -> DownloadResult:
|
||||||
trace(f"downloading {type(music_object).__name__} [{music_object.option_string}]")
|
if isinstance(music_object, Song):
|
||||||
|
output(f"Downloading {music_object.option_string} to:", color=BColors.BOLD)
|
||||||
|
else:
|
||||||
|
output(f"Downloading {music_object.option_string}...", color=BColors.BOLD)
|
||||||
|
|
||||||
# Skips all releases, that are defined in shared.ALBUM_TYPE_BLACKLIST, if download_all is False
|
# Skips all releases, that are defined in shared.ALBUM_TYPE_BLACKLIST, if download_all is False
|
||||||
if isinstance(music_object, Album):
|
if isinstance(music_object, Album):
|
||||||
@ -377,32 +380,33 @@ class Page:
|
|||||||
if song.target_collection.empty:
|
if song.target_collection.empty:
|
||||||
song.target_collection.append(new_target)
|
song.target_collection.append(new_target)
|
||||||
|
|
||||||
if not song.source_collection.has_source_page(self.SOURCE_TYPE):
|
|
||||||
return DownloadResult(error_message=f"No {self.__class__.__name__} source found for {song.option_string}.")
|
|
||||||
|
|
||||||
sources = song.source_collection.get_sources(self.SOURCE_TYPE)
|
|
||||||
|
|
||||||
temp_target: Target = Target.temp()
|
|
||||||
|
|
||||||
r = DownloadResult(1)
|
r = DownloadResult(1)
|
||||||
|
temp_target: Target = Target.temp()
|
||||||
|
|
||||||
found_on_disc = False
|
found_on_disc = False
|
||||||
target: Target
|
target: Target
|
||||||
for target in song.target_collection:
|
for target in song.target_collection:
|
||||||
if target.exists:
|
current_exists = target.exists
|
||||||
|
|
||||||
|
if current_exists:
|
||||||
|
output(f'- {target.file_path} {BColors.OKGREEN.value}[already exists]', color=BColors.GREY)
|
||||||
target.copy_content(temp_target)
|
target.copy_content(temp_target)
|
||||||
found_on_disc = True
|
found_on_disc = True
|
||||||
|
|
||||||
r.found_on_disk += 1
|
r.found_on_disk += 1
|
||||||
r.add_target(target)
|
r.add_target(target)
|
||||||
|
else:
|
||||||
|
output(f'- {target.file_path}', color=BColors.GREY)
|
||||||
|
|
||||||
if found_on_disc:
|
if not song.source_collection.has_source_page(self.SOURCE_TYPE):
|
||||||
self.LOGGER.info(f"Found {song.option_string} in the library.")
|
return DownloadResult(error_message=f"No {self.__class__.__name__} source found for {song.option_string}.")
|
||||||
|
|
||||||
|
sources = song.source_collection.get_sources(self.SOURCE_TYPE)
|
||||||
|
|
||||||
skip_intervals = []
|
skip_intervals = []
|
||||||
if not found_on_disc:
|
if not found_on_disc:
|
||||||
for source in sources:
|
for source in sources:
|
||||||
r = self.download_song_to_target(source=source, target=temp_target, desc=song.option_string)
|
r = self.download_song_to_target(source=source, target=temp_target, desc="downloading")
|
||||||
|
|
||||||
if not r.is_fatal_error:
|
if not r.is_fatal_error:
|
||||||
skip_intervals = self.get_skip_intervals(song, source)
|
skip_intervals = self.get_skip_intervals(song, source)
|
||||||
@ -419,12 +423,12 @@ class Page:
|
|||||||
return r
|
return r
|
||||||
|
|
||||||
def _post_process_targets(self, song: Song, temp_target: Target, interval_list: List, found_on_disc: bool) -> DownloadResult:
|
def _post_process_targets(self, song: Song, temp_target: Target, interval_list: List, found_on_disc: bool) -> DownloadResult:
|
||||||
if found_on_disc and self.download_options.process_audio_if_found:
|
if not found_on_disc or self.download_options.process_audio_if_found:
|
||||||
correct_codec(temp_target, interval_list=interval_list)
|
correct_codec(temp_target, interval_list=interval_list)
|
||||||
|
|
||||||
self.post_process_hook(song, temp_target)
|
self.post_process_hook(song, temp_target)
|
||||||
|
|
||||||
if found_on_disc and self.download_options.process_metadata_if_found:
|
if not found_on_disc or self.download_options.process_metadata_if_found:
|
||||||
write_metadata_to_target(song.metadata, temp_target, song)
|
write_metadata_to_target(song.metadata, temp_target, song)
|
||||||
|
|
||||||
r = DownloadResult()
|
r = DownloadResult()
|
||||||
|
@ -12,7 +12,7 @@ if not load_dotenv(Path(__file__).parent.parent.parent / ".env"):
|
|||||||
|
|
||||||
__stage__ = os.getenv("STAGE", "prod")
|
__stage__ = os.getenv("STAGE", "prod")
|
||||||
|
|
||||||
DEBUG = (__stage__ == "dev") and True
|
DEBUG = (__stage__ == "dev") and False
|
||||||
DEBUG_LOGGING = DEBUG and False
|
DEBUG_LOGGING = DEBUG and False
|
||||||
DEBUG_TRACE = DEBUG and True
|
DEBUG_TRACE = DEBUG and True
|
||||||
DEBUG_OBJECT_TRACE = DEBUG and False
|
DEBUG_OBJECT_TRACE = DEBUG and False
|
||||||
|
Loading…
Reference in New Issue
Block a user