diff --git a/src/fr/hds/build.gradle b/src/fr/hds/build.gradle new file mode 100644 index 000000000..e95a9aafb --- /dev/null +++ b/src/fr/hds/build.gradle @@ -0,0 +1,14 @@ +ext { + extName = 'HDS' + extClass = '.Hds' + themePkg = 'dooplay' + baseUrl = 'https://www.hds.quest' + overrideVersionCode = 0 +} + +apply from: "$rootDir/common.gradle" + +dependencies { + implementation(project(':lib:filemoon-extractor')) + implementation(project(':lib:streamhidevid-extractor')) +} \ No newline at end of file diff --git a/src/fr/hds/res/mipmap-hdpi/ic_launcher.png b/src/fr/hds/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..dc1e5469c Binary files /dev/null and b/src/fr/hds/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/fr/hds/res/mipmap-mdpi/ic_launcher.png b/src/fr/hds/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..91f8e763e Binary files /dev/null and b/src/fr/hds/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/fr/hds/res/mipmap-xhdpi/ic_launcher.png b/src/fr/hds/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..03e66c72d Binary files /dev/null and b/src/fr/hds/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/fr/hds/res/mipmap-xxhdpi/ic_launcher.png b/src/fr/hds/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..aa969b4aa Binary files /dev/null and b/src/fr/hds/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/fr/hds/res/mipmap-xxxhdpi/ic_launcher.png b/src/fr/hds/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..79165346d Binary files /dev/null and b/src/fr/hds/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/fr/hds/src/eu/kanade/tachiyomi/animeextension/fr/hds/Hds.kt b/src/fr/hds/src/eu/kanade/tachiyomi/animeextension/fr/hds/Hds.kt new file mode 100644 index 000000000..c83cbed76 --- /dev/null +++ b/src/fr/hds/src/eu/kanade/tachiyomi/animeextension/fr/hds/Hds.kt @@ -0,0 +1,75 @@ +package eu.kanade.tachiyomi.animeextension.fr.hds + +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor +import eu.kanade.tachiyomi.lib.streamhidevidextractor.StreamHideVidExtractor +import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.util.asJsoup +import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import okhttp3.Response +import org.jsoup.nodes.Document +import uy.kohesive.injekt.injectLazy + +class Hds : DooPlay( + "fr", + "HDS", + "https://www.hds.quest", +) { + + private val json: Json by injectLazy() + + // ============================== Popular =============================== + override fun popularAnimeRequest(page: Int) = GET("$baseUrl/tendance/page/$page/", headers) + + override fun popularAnimeSelector() = latestUpdatesSelector() + + override fun popularAnimeNextPageSelector() = "#nextpagination" + + // =============================== Latest =============================== + override val supportsLatest = false + + // =============================== Search =============================== + override fun searchAnimeNextPageSelector() = popularAnimeNextPageSelector() + + // ============================== Filters =============================== + override fun genresListSelector() = ".genres.scrolling li a" + + // =========================== Anime Details ============================ + override fun animeDetailsParse(document: Document) = super.animeDetailsParse(document).apply { + if (document.select(".dt-breadcrumb li:nth-child(2)").text() == "Films") { + status = SAnime.COMPLETED + } + } + + // ============================ Video Links ============================= + @Serializable + data class VideoLinkDTO(@SerialName("embed_url") val url: String) + + private val fileMoonExtractor by lazy { FilemoonExtractor(client) } + private val streamHideVidExtractor by lazy { StreamHideVidExtractor(client) } + + override fun videoListParse(response: Response): List