This commit is contained in:
CatChow0 2025-06-04 13:52:09 +02:00
parent 449dfa0ec7
commit 0ceebb5a57

View File

@ -7,19 +7,49 @@ import curses
import re
from urllib.parse import urljoin
import concurrent.futures
import configparser
import os
# Chemins par défaut
DB_DIR = Path.home() / ".animecli"
DB_PATH = DB_DIR / "animes.db"
DOWNLOAD_DIR = Path.home() / "MesAnimes"
CONFIG_PATH = DB_DIR / "config.ini"
CONFIG = {
"vitesse_max": 0, # 0 = illimité, sinon en Ko/s
"telechargements_simultanes": 1 # Nombre de téléchargements simultanés
# Valeurs par défaut
DEFAULT_CONFIG = {
"vitesse_max": "0",
"telechargements_simultanes": "1",
"download_dir": str(DOWNLOAD_DIR),
"db_path": str(DB_PATH)
}
CONFIG = {}
def load_config():
config = configparser.ConfigParser()
if CONFIG_PATH.exists():
config.read(CONFIG_PATH)
if "animecli" in config:
for k, v in DEFAULT_CONFIG.items():
CONFIG[k] = config["animecli"].get(k, v)
else:
CONFIG.update(DEFAULT_CONFIG)
else:
CONFIG.update(DEFAULT_CONFIG)
CONFIG["vitesse_max"] = int(CONFIG["vitesse_max"])
CONFIG["telechargements_simultanes"] = int(CONFIG["telechargements_simultanes"])
def save_config():
config = configparser.ConfigParser()
config["animecli"] = {k: str(v) for k, v in CONFIG.items()}
DB_DIR.mkdir(parents=True, exist_ok=True)
with open(CONFIG_PATH, "w") as f:
config.write(f)
def init_db():
DB_DIR.mkdir(parents=True, exist_ok=True)
conn = sqlite3.connect(DB_PATH)
db_path = Path(CONFIG.get("db_path", str(DB_PATH)))
db_path.parent.mkdir(parents=True, exist_ok=True)
conn = sqlite3.connect(db_path)
c = conn.cursor()
c.execute(
"""
@ -100,7 +130,7 @@ def choisir_source(stdscr, sources_infos):
elif k == curses.KEY_DOWN and sel < len(sources_infos) - 1:
sel += 1
elif k in [curses.KEY_ENTER, 10, 13]:
return sel # retourne l'index choisi
return sel
def extract_episode_sources(url_page):
resp = requests.get(url_page)
@ -201,16 +231,15 @@ def handle_multi_download(stdscr, conn):
return
selected = [False] * len(episode_data)
cursor = 0 # 0 = "Tout sélectionner", 1...N = épisodes
cursor = 0
scroll_offset = 0
while True:
stdscr.clear()
max_y, max_x = stdscr.getmaxyx()
visible_lines = max_y - 3 # 1 ligne titre + 2 marges
total_lines = len(episode_data) + 1 # +1 pour "Tout sélectionner"
visible_lines = max_y - 3
total_lines = len(episode_data) + 1
# Gestion du scroll
if cursor < scroll_offset:
scroll_offset = cursor
elif cursor >= scroll_offset + visible_lines:
@ -218,7 +247,6 @@ def handle_multi_download(stdscr, conn):
stdscr.addstr(0, 0, "Sélectionnez les épisodes à télécharger (Espace pour cocher, Entrée pour valider) :")
# Affichage de la case "Tout sélectionner"
tout_sel = all(selected) and len(selected) > 0
mark = "[X]" if tout_sel else "[ ]"
y = 2
@ -231,9 +259,8 @@ def handle_multi_download(stdscr, conn):
safe_addstr(stdscr, y, 2, f"{mark} Tout sélectionner")
y += 1
# Affichage des épisodes visibles
for idx in range(len(episode_data)):
line_idx = idx + 1 # +1 à cause de "Tout sélectionner"
line_idx = idx + 1
if line_idx < scroll_offset:
continue
if y - 2 >= visible_lines:
@ -256,7 +283,6 @@ def handle_multi_download(stdscr, conn):
cursor += 1
elif k == ord(' '):
if cursor == 0:
# (Dé)sélectionner tout
new_val = not all(selected)
for i in range(len(selected)):
selected[i] = new_val
@ -273,7 +299,7 @@ def handle_multi_download(stdscr, conn):
return
qualite = "1080p"
base_folder = DOWNLOAD_DIR / titre
base_folder = Path(CONFIG["download_dir"]) / titre
download_queue = []
for idx in to_download:
sources, _ = episode_data[idx]
@ -306,7 +332,6 @@ def handle_multi_download(stdscr, conn):
else:
print(f"Echec téléchargement: {url}")
# Mise à jour du dernier épisode téléchargé
if to_download:
dernier_url = download_queue[-1][0]
c = conn.cursor()
@ -402,7 +427,9 @@ def popup_menu(stdscr, title, options, default_sel=0):
def handle_config(stdscr):
options = [
f"Vitesse max: {CONFIG['vitesse_max']} KB/s (0 = illimité)",
f"Téléchargements simultanés: {CONFIG['telechargements_simultanes']}"
f"Téléchargements simultanés: {CONFIG['telechargements_simultanes']}",
f"Dossier de téléchargement: {CONFIG['download_dir']}",
f"Emplacement de la base de données: {CONFIG['db_path']}"
]
sel = 0
while True:
@ -435,6 +462,17 @@ def handle_config(stdscr):
if sim_idx is not None:
CONFIG["telechargements_simultanes"] = int(sim_options[sim_idx])
options[1] = f"Téléchargements simultanés: {CONFIG['telechargements_simultanes']}"
elif sel == 2:
new_dir = get_input(stdscr, "Nouveau dossier de téléchargement: ")
if new_dir:
CONFIG["download_dir"] = new_dir
options[2] = f"Dossier de téléchargement: {CONFIG['download_dir']}"
elif sel == 3:
new_db = get_input(stdscr, "Nouvel emplacement de la base de données: ")
if new_db:
CONFIG["db_path"] = new_db
options[3] = f"Emplacement de la base de données: {CONFIG['db_path']}"
save_config()
elif k in [ord('q'), ord('Q')]:
break
@ -505,6 +543,7 @@ def safe_addstr(stdscr, y, x, text):
stdscr.addstr(y, x, text[:max_x - x - 1])
def main():
load_config()
conn = init_db()
curses.wrapper(setup_and_run, conn)