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)
|
# Choix de la source globale (site)
|
||||||
sel_src, urls_par_source = choisir_source_globale(stdscr, episode_data)
|
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
|
cursor = 0
|
||||||
scroll_offset = 0
|
scroll_offset = 0
|
||||||
|
|
||||||
@ -311,7 +325,8 @@ def handle_multi_download(stdscr, conn):
|
|||||||
if y - 2 >= visible_lines:
|
if y - 2 >= visible_lines:
|
||||||
break
|
break
|
||||||
mark = "[X]" if selected[idx] else "[ ]"
|
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:
|
if cursor == line_idx:
|
||||||
stdscr.attron(curses.color_pair(1))
|
stdscr.attron(curses.color_pair(1))
|
||||||
safe_addstr(stdscr, y, 2, line)
|
safe_addstr(stdscr, y, 2, line)
|
||||||
@ -344,7 +359,6 @@ def handle_multi_download(stdscr, conn):
|
|||||||
return
|
return
|
||||||
|
|
||||||
qualite = "1080p"
|
qualite = "1080p"
|
||||||
base_folder = Path(CONFIG["download_dir"]) / titre
|
|
||||||
download_queue = []
|
download_queue = []
|
||||||
for idx in to_download:
|
for idx in to_download:
|
||||||
if idx >= len(urls_par_source):
|
if idx >= len(urls_par_source):
|
||||||
@ -352,28 +366,33 @@ def handle_multi_download(stdscr, conn):
|
|||||||
chosen_url = urls_par_source[idx]
|
chosen_url = urls_par_source[idx]
|
||||||
saison_str = f"S{int(saison):02d}"
|
saison_str = f"S{int(saison):02d}"
|
||||||
ep_str = f"E{idx+1: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)
|
saison_folder.mkdir(parents=True, exist_ok=True)
|
||||||
filename = f"{titre.replace(' ', '_')} - {saison_str}{ep_str}.%(ext)s"
|
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()
|
curses.endwin()
|
||||||
|
episodes_dl = []
|
||||||
with concurrent.futures.ThreadPoolExecutor(max_workers=CONFIG.get("telechargements_simultanes", 2)) as executor:
|
with concurrent.futures.ThreadPoolExecutor(max_workers=CONFIG.get("telechargements_simultanes", 2)) as executor:
|
||||||
futures = [
|
futures = [
|
||||||
executor.submit(telecharger_episode, url, folder, fname, qualite)
|
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()
|
success, url = future.result()
|
||||||
if success:
|
if success:
|
||||||
print(f"Téléchargement réussi: {url}")
|
print(f"Téléchargement réussi: {url}")
|
||||||
|
episodes_dl.append(epnum)
|
||||||
else:
|
else:
|
||||||
print(f"Echec téléchargement: {url}")
|
print(f"Echec téléchargement: {url}")
|
||||||
|
|
||||||
if to_download:
|
# Mise à jour du dernier épisode téléchargé dans la DB (le plus grand numéro téléchargé)
|
||||||
dernier_url = download_queue[-1][0]
|
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 = 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()
|
conn.commit()
|
||||||
|
|
||||||
def curses_menu(stdscr, conn):
|
def curses_menu(stdscr, conn):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user