Conversation
Collaborator
|
Per caso c'è un motivo particolare oltre alla ridondanza, per cui vuole aggiungere AnimeSaturn tra i providers? |
Author
|
L'ho proposto principalmente per la continuità di servizio, quando uno dei due siti viene oscurato o cambia struttura, una terza fonte riduce la finestra di inoperatività della CLI prima della fix. Se il costo di manutenzione non vale il beneficio, chiudo la PR senza problemi o posso adattarlo come fallback. |
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.
Descrizione
Aggiunge AnimeSaturn come terzo provider, selezionabile dal menu di configurazione (
aw-cli -a).Implementazione
/filter?key=..., seguendo il linkrel="next"fino aMAX_SEARCH_PAGES(3) pagine da 30 risultati./rss/episodes, più stabile dell'HTML della homepage. I filtri sub/dub usano lo slug (le versioni doppiate hanno-ita-prima dell'ID).play.saturncdn.net/embed/{id}→window.__E(id, token, scadenza) → endpoint/embed/{id}/playlist, che restituisce la sorgente offuscata (base64 + XOR con il token, come la funzionedec()del sito). Il risultato è una playlist HLS.m3u8, oppure un video YouTube per alcuni episodi.Nessuna nuova dipendenza Python (l'RSS usa
xml.etreedella libreria standard).Download degli stream HLS
AnimeSaturn fornisce stream HLS invece di mp4 diretti, quindi il download li salvava come file non validi.
La logica è tutta in un nuovo modulo
streams.py: riconosce i link.m3u8e li scarica con ffmpeg(
-c copy, senza ricodifica), mantenendo la barra di avanzamento. Se il link punta a YouTube,il download si interrompe con un messaggio chiaro invece di salvare un file rotto.
download.pycambia solo di 5 righe aggiunte, senza modifiche al codice esistente: se il link è unostream lo gestisce
streams.py, altrimenti prosegue il download multi-connessione introdotto in #48.Il branch è già rebasato su
main(v2.3.3).ffmpeg serve solo per scaricare da provider HLS; la riproduzione con mpv funziona senza.
Altre modifiche
run.py: il menu di scelta del provider ora leggePROVIDERS_AVAILABLEinvece di una lista scritta a mano.run.py: corretto un errore di pyright già presente (Episode | strpassato comeEpisodenel menu dopo la riproduzione), emerso toccando il file.isinstance(res, str)è equivalente al controllo precedente, perché l'unica stringa restituita dalle azioni è"break".README.md: aggiunto AnimeSaturn tra le fonti e ffmpeg tra i requisiti per il download.Test
tests/providers/test_animesaturn.py(14 test) etests/core/test_streams.py(15 test). Le fixtures di AnimeSaturn sono aggiunte aconftest.pycome le esistenti; embed e playlist sono simulate perché contengono token che scadono dopo ~12 ore.uv run pytest→ 102 test passatiuv run pyright→ 0 errori