better output

This commit is contained in:
Lukas Pupka-Lipinski 2025-08-28 20:21:47 +02:00
parent 03bbb224ad
commit c3f9e4aa84
2 changed files with 45 additions and 22 deletions

View File

@ -2,6 +2,7 @@ import sys
import os import os
import logging import logging
from src.Loaders import AniWorldLoader from src.Loaders import AniWorldLoader
import progressbar
import SerieList import SerieList
import SerieScanner import SerieScanner
from src.Loaders.Loaders import Loaders from src.Loaders.Loaders import Loaders
@ -37,6 +38,8 @@ class SeriesApp:
def __init__(self, directory_to_search: str): def __init__(self, directory_to_search: str):
print("Please wait while initializing...") print("Please wait while initializing...")
self.barTotal = None
self.bar = None
self.directory_to_search = directory_to_search self.directory_to_search = directory_to_search
self.Loaders = Loaders() self.Loaders = Loaders()
loader = self.Loaders.GetLoader(key="aniworld.to") loader = self.Loaders.GetLoader(key="aniworld.to")
@ -87,11 +90,6 @@ class SeriesApp:
print("No valid series selected. Going back to the result display.") print("No valid series selected. Going back to the result display.")
return None return None
def print_progress_bar(self, current, total, length=20):
"""Generate progress bar string"""
filled_length = int(length * current // total)
bar = "@" * filled_length + "-" * (length - filled_length)
return f"[{bar}] {current} / {total}"
def retry(self, func, max_retries=3, delay=2, *args, **kwargs): def retry(self, func, max_retries=3, delay=2, *args, **kwargs):
for attempt in range(1, max_retries + 1): for attempt in range(1, max_retries + 1):
@ -111,28 +109,39 @@ class SeriesApp:
"""Simulate the downloading process with a progress bar.""" """Simulate the downloading process with a progress bar."""
total_downloaded = 0 total_downloaded = 0
total_episodes = sum(sum(len(ep) for ep in serie.episodeDict.values()) for serie in series) total_episodes = sum(sum(len(ep) for ep in serie.episodeDict.values()) for serie in series)
self.barTotal = progressbar.ProgressBar(
max_value=total_episodes,
widgets=[
progressbar.FormatLabel(f'Processing:'),
' ', progressbar.Percentage(),
' ', progressbar.Bar(),
' ', progressbar.ETA()
]
)
for serie in series: for serie in series:
serie_episodes = sum(len(ep) for ep in serie.episodeDict.values()) serie_episodes = sum(len(ep) for ep in serie.episodeDict.values())
downloaded = 0 downloaded = 0
self.bar = progressbar.ProgressBar(
print(f"\nStarting download for {serie.folder}...\n") max_value=serie_episodes,
widgets=[
progressbar.FormatLabel(f'Processing {serie.name}:'),
' ', progressbar.Percentage(),
' ', progressbar.Bar(),
' ', progressbar.ETA()
]
)
for season, episodes in serie.episodeDict.items(): for season, episodes in serie.episodeDict.items():
for episode in episodes: for episode in episodes:
loader = self.Loaders.GetLoader(key="aniworld.to") loader = self.Loaders.GetLoader(key="aniworld.to")
if loader.IsLanguage(season, episode, serie.key): if loader.IsLanguage(season, episode, serie.key):
print(f"\ndownload {serie.folder} {season} {episode}\n")
self.retry(loader.Download, 3, 1, self.directory_to_search, serie.folder, season, episode, serie.key) self.retry(loader.Download, 3, 1, self.directory_to_search, serie.folder, season, episode, serie.key)
downloaded += 1 downloaded += 1
total_downloaded += 1 total_downloaded += 1
progress = self.print_progress_bar(downloaded, serie_episodes) self.bar.update(downloaded)
total_progress = self.print_progress_bar(total_downloaded, total_episodes) self.bar.update(total_downloaded)
sys.stdout.write(f"\r{serie.name}: {progress} (Total: {total_progress})")
sys.stdout.flush()
print("\nDownload complete!\n")
def search_mode(self): def search_mode(self):
@ -165,6 +174,9 @@ class SeriesApp:
except ValueError: except ValueError:
print("Invalid input. Try again.") print("Invalid input. Try again.")
def updateFromReinit(self, folder, counter):
if self.bar != None:
self.bar.update(counter)
def run(self): def run(self):
"""Main function to run the app.""" """Main function to run the app."""
@ -177,8 +189,16 @@ class SeriesApp:
print("\nRescanning series...\n") print("\nRescanning series...\n")
self.bar = progressbar.ProgressBar(
max_value=progressbar.UnknownLength,
widgets=[
progressbar.Counter(), ' items processed ',
progressbar.AnimatedMarker()
]
)
self.SerieScanner.Reinit() self.SerieScanner.Reinit()
self.SerieScanner.Scan() self.SerieScanner.Scan(self.updateFromReinit)
self.List = SerieList.SerieList(self.directory_to_search) self.List = SerieList.SerieList(self.directory_to_search)
self.__InitList__() self.__InitList__()
@ -186,10 +206,6 @@ class SeriesApp:
selected_series = self.get_user_selection() selected_series = self.get_user_selection()
if selected_series: if selected_series:
self.download_series(selected_series) self.download_series(selected_series)
print("\nProgress: [@@@@@@@@@@@@@@@@@@@@] Complete")
break
else:
print("Invalid action. Please enter 'search' or 'local'.")
# Run the app # Run the app
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -21,12 +21,19 @@ class SerieScanner:
def is_null_or_whitespace(self, s): def is_null_or_whitespace(self, s):
return s is None or s.strip() == "" return s is None or s.strip() == ""
def Scan(self):
def GetTotalToScan(self):
result = self.__find_mp4_files()
return sum(1 for _ in result)
def Scan(self, callback):
logging.info("Starting process to load missing episodes") logging.info("Starting process to load missing episodes")
result = self.__find_mp4_files() result = self.__find_mp4_files()
counter = 0
for folder, mp4_files in result: for folder, mp4_files in result:
try: try:
counter += 1
callback(folder, counter)
serie = self.__ReadDataFromFile(folder) serie = self.__ReadDataFromFile(folder)
if (serie != None and not self.is_null_or_whitespace(serie.key)): if (serie != None and not self.is_null_or_whitespace(serie.key)):
missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files) missings, site = self.__GetMissingEpisodesAndSeason(serie.key, mp4_files)