This commit is contained in:
CatChow0 2025-06-04 18:46:58 +02:00
parent 55e8693a3f
commit 12cb82a079

View File

@ -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):