feat(download): download multi-connessione (HTTP Range) per episodi più veloci - #48
Open
andrealiberatoreilardi wants to merge 2 commits into
Open
Conversation
…nge) Molti CDN limitano la banda per-connessione, quindi un download a connessione singola resta lento anche su linee veloci. Ora ogni episodio viene scaricato a segmenti con più connessioni parallele tramite richieste HTTP Range, aggirando il limite per-connessione. - nuova opzione di configurazione "connections-per-download" (default 4), letta come la già esistente "parallel-downloads" - fallback automatico alla connessione singola se il server non supporta i range o non espone la dimensione del file - blocchi di lettura portati da 1 KB a 1 MB per ridurre l'overhead su file di centinaia di MB
…eworld_episode_link Le fixtures si rigenerano dal vivo e il sottodominio del CDN (es. "srv23-masafi") ruota nel tempo, quindi il confronto con un URL hardcoded rendeva il test instabile (rosso in CI a ogni rotazione). Ora verifichiamo la struttura stabile dell'URL (dominio + path) con una regex, mantenendo il controllo sul corretto parsing del <source>.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problema
Il download di un episodio usa una singola connessione e legge lo stream a blocchi da 1 KB. Molti CDN (incluso quello di AnimeWorld,
sweetpixel.org) limitano la banda per-connessione: il risultato è che un download resta lento (~1.5 MB/s) anche su linee molto veloci, e la CPU spende tempo in ~300k iterazioni Python per un file da 300 MB.Soluzione
Ogni episodio viene ora scaricato a segmenti, con più connessioni parallele sullo stesso file tramite richieste HTTP Range, aggirando il limite di banda per-connessione. In più i blocchi di lettura passano da 1 KB a 1 MB.
connections-per-download(default4), letta esattamente come la già esistenteparallel-downloads. Nessuna modifica al file di config di default richiesta (config.tomlè generato per-utente).Accept-Ranges: byteso non espone la dimensione del file: nessuna regressione sui provider che non supportano i range.Benchmark
Misurato sul CDN di AnimeWorld scaricando un episodio reale:
Il default di 4 offre un miglioramento immediato (~4×) restando conservativo verso i server; chi ha bisogno di più può alzarlo in configurazione.
Nota sul secondo commit (fix test)
Incluso anche un piccolo fix indipendente:
test_animeworld_episode_linkconfrontava l'URL del video con un host CDN hardcoded (srv23-abbaia…), ma quel sottodominio ruota nel tempo e le fixtures si rigenerano dal vivo → il test diventa rosso in CI a ogni rotazione. Ora verifica la struttura stabile dell'URL (dominio + path) con una regex. Se preferisci tenerlo separato, posso spostarlo in una PR a parte.Verifica
uv run pyright→ 0 errori, 0 warninguv run pytest→ 65 passed (prima: 64 passed, 1 failed per il flake di cui sopra)