From fa1aa310f16735b05b788da0720f9cfd24bf8145 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Mon, 17 Jul 2023 16:45:58 +0000 Subject: [PATCH] feat(lib): Add new lib for playlists and implement it for KAA (#1918) --- lib/playlist-utils/build.gradle.kts | 18 + .../lib/playlistutils/PlaylistUtils.kt | 323 ++++++++++++++++++ src/en/kickassanime/build.gradle | 1 + .../en/kickassanime/KickAssAnime.kt | 2 +- .../extractors/KickAssAnimeExtractor.kt | 87 +---- 5 files changed, 346 insertions(+), 85 deletions(-) create mode 100644 lib/playlist-utils/build.gradle.kts create mode 100644 lib/playlist-utils/src/main/java/eu/kanade/tachiyomi/lib/playlistutils/PlaylistUtils.kt diff --git a/lib/playlist-utils/build.gradle.kts b/lib/playlist-utils/build.gradle.kts new file mode 100644 index 000000000..4eb09c560 --- /dev/null +++ b/lib/playlist-utils/build.gradle.kts @@ -0,0 +1,18 @@ + +plugins { + id("com.android.library") + kotlin("android") +} + +android { + compileSdk = AndroidConfig.compileSdk + namespace = "eu.kanade.tachiyomi.lib.playlistutils" + + defaultConfig { + minSdk = AndroidConfig.minSdk + } +} + +dependencies { + compileOnly(libs.bundles.common) +} diff --git a/lib/playlist-utils/src/main/java/eu/kanade/tachiyomi/lib/playlistutils/PlaylistUtils.kt b/lib/playlist-utils/src/main/java/eu/kanade/tachiyomi/lib/playlistutils/PlaylistUtils.kt new file mode 100644 index 000000000..07c3ad18c --- /dev/null +++ b/lib/playlist-utils/src/main/java/eu/kanade/tachiyomi/lib/playlistutils/PlaylistUtils.kt @@ -0,0 +1,323 @@ +package eu.kanade.tachiyomi.lib.playlistutils + +import eu.kanade.tachiyomi.animesource.model.Track +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.OkHttpClient +import okhttp3.internal.commonEmptyHeaders + +class PlaylistUtils(private val client: OkHttpClient, private val headers: Headers = commonEmptyHeaders) { + + // ================================ M3U8 ================================ + + /** + * Extracts videos from a .m3u8 file. + * + * @param playlistUrl the URL of the HLS playlist + * @param referer the referer header value to be sent in the HTTP request (default: "") + * @param masterHeaders header for the master playlist + * @param videoHeaders headers for each video + * @param videoNameGen a function that generates a custom name for each video based on its quality + * - The parameter `quality` represents the quality of the video + * - Returns the custom name for the video (default: identity function) + * @param subtitleList a list of subtitle tracks associated with the HLS playlist, non-empty values will override subtitles present in the m3u8 playlist (default: empty list) + * @param audioList a list of audio tracks associated with the HLS playlist, non-empty values will override audio tracks present in the m3u8 playlist (default: empty list) + * @return a list of Video objects + */ + fun extractFromHls( + playlistUrl: String, + referer: String = "", + masterHeaders: Headers, + videoHeaders: Headers, + videoNameGen: (String) -> String = { quality -> quality }, + subtitleList: List = emptyList(), + audioList: List = emptyList(), + ): List