Patch
This commit is contained in:
parent
55e8693a3f
commit
12cb82a079
39
animecli.py
39
animecli.py
@ -275,7 +275,21 @@ def handle_multi_download(stdscr, conn):
|
||||
# Choix de la source globale (site)
|
||||
sel_src, urls_par_source = choisir_source_globale(stdscr, episode_data)
|
||||
|
||||
selected = [False] * len(episode_data)
|
||||
# Vérification des épisodes déjà présents
|
||||
base_folder = Path(CONFIG["download_dir"]) / titre
|
||||
saison_folder = base_folder / f"Saison {int(saison):02d}"
|
||||
present = set()
|
||||
if saison_folder.exists():
|
||||
for f in saison_folder.glob(f"{titre.replace(' ', '_')} - S{int(saison):02d}E*.mp4"):
|
||||
m = re.search(r"S(\d{2})E(\d{2})", f.name)
|
||||
if m:
|
||||
ep_num = int(m.group(2))
|
||||
present.add(ep_num)
|
||||
|
||||
selected = []
|
||||
for idx in range(len(episode_data)):
|
||||
selected.append((idx + 1) not in present)
|
||||
|
||||
cursor = 0
|
||||
scroll_offset = 0
|
||||
|
||||
@ -311,7 +325,8 @@ def handle_multi_download(stdscr, conn):
|
||||
if y - 2 >= visible_lines:
|
||||
break
|
||||
mark = "[X]" if selected[idx] else "[ ]"
|
||||
line = f"{mark} Épisode {idx+1}"
|
||||
extra = " (Déjà téléchargé)" if (idx + 1) in present else ""
|
||||
line = f"{mark} Épisode {idx+1}{extra}"
|
||||
if cursor == line_idx:
|
||||
stdscr.attron(curses.color_pair(1))
|
||||
safe_addstr(stdscr, y, 2, line)
|
||||
@ -344,7 +359,6 @@ def handle_multi_download(stdscr, conn):
|
||||
return
|
||||
|
||||
qualite = "1080p"
|
||||
base_folder = Path(CONFIG["download_dir"]) / titre
|
||||
download_queue = []
|
||||
for idx in to_download:
|
||||
if idx >= len(urls_par_source):
|
||||
@ -352,28 +366,33 @@ def handle_multi_download(stdscr, conn):
|
||||
chosen_url = urls_par_source[idx]
|
||||
saison_str = f"S{int(saison):02d}"
|
||||
ep_str = f"E{idx+1:02d}"
|
||||
saison_folder = base_folder / f"Saison {int(saison):02d}"
|
||||
saison_folder.mkdir(parents=True, exist_ok=True)
|
||||
filename = f"{titre.replace(' ', '_')} - {saison_str}{ep_str}.%(ext)s"
|
||||
download_queue.append((chosen_url, saison_folder, filename, qualite))
|
||||
download_queue.append((chosen_url, saison_folder, filename, qualite, idx+1))
|
||||
|
||||
curses.endwin()
|
||||
episodes_dl = []
|
||||
with concurrent.futures.ThreadPoolExecutor(max_workers=CONFIG.get("telechargements_simultanes", 2)) as executor:
|
||||
futures = [
|
||||
executor.submit(telecharger_episode, url, folder, fname, qualite)
|
||||
for url, folder, fname, qualite in download_queue
|
||||
for url, folder, fname, qualite, epnum in download_queue
|
||||
]
|
||||
for future in concurrent.futures.as_completed(futures):
|
||||
for (url, folder, fname, qualite, epnum), future in zip(download_queue, futures):
|
||||
success, url = future.result()
|
||||
if success:
|
||||
print(f"Téléchargement réussi: {url}")
|
||||
episodes_dl.append(epnum)
|
||||
else:
|
||||
print(f"Echec téléchargement: {url}")
|
||||
|
||||
if to_download:
|
||||
dernier_url = download_queue[-1][0]
|
||||
# Mise à jour du dernier épisode téléchargé dans la DB (le plus grand numéro téléchargé)
|
||||
if episodes_dl:
|
||||
max_ep = max(episodes_dl)
|
||||
saison_str = f"S{int(saison):02d}"
|
||||
ep_str = f"E{max_ep:02d}"
|
||||
last_file = f"{titre.replace(' ', '_')} - {saison_str}{ep_str}.mp4"
|
||||
c = conn.cursor()
|
||||
c.execute("UPDATE animes SET dernier_episode = ? WHERE id = ?", (dernier_url, anime_id))
|
||||
c.execute("UPDATE animes SET dernier_episode = ? WHERE id = ?", (last_file, anime_id))
|
||||
conn.commit()
|
||||
|
||||
def curses_menu(stdscr, conn):
|
||||
|
Loading…
x
Reference in New Issue
Block a user