Patch
This commit is contained in:
parent
449dfa0ec7
commit
0ceebb5a57
73
animecli.py
73
animecli.py
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user