diff --git a/src/all/jable/build.gradle b/src/all/jable/build.gradle new file mode 100644 index 00000000..f9304496 --- /dev/null +++ b/src/all/jable/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'Jable' + extClass = '.JableFactory' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/jable/res/mipmap-hdpi/ic_launcher.png b/src/all/jable/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..dc1e7326 Binary files /dev/null and b/src/all/jable/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/all/jable/res/mipmap-mdpi/ic_launcher.png b/src/all/jable/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..6d68c4e1 Binary files /dev/null and b/src/all/jable/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/all/jable/res/mipmap-xhdpi/ic_launcher.png b/src/all/jable/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..f46a5539 Binary files /dev/null and b/src/all/jable/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/all/jable/res/mipmap-xxhdpi/ic_launcher.png b/src/all/jable/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..78f0ad3b Binary files /dev/null and b/src/all/jable/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/all/jable/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/jable/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..5b55e575 Binary files /dev/null and b/src/all/jable/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/all/jable/src/eu/kanade/tachiyomi/animeextension/all/jable/Jable.kt b/src/all/jable/src/eu/kanade/tachiyomi/animeextension/all/jable/Jable.kt new file mode 100644 index 00000000..d8b3bc20 --- /dev/null +++ b/src/all/jable/src/eu/kanade/tachiyomi/animeextension/all/jable/Jable.kt @@ -0,0 +1,248 @@ +package eu.kanade.tachiyomi.animeextension.all.jable + +import android.app.Application +import android.content.SharedPreferences +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimeUpdateStrategy +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy + +class Jable(override val lang: String) : AnimeHttpSource() { + override val baseUrl: String + get() = "https://jable.tv" + override val name: String + get() = "Jable" + override val supportsLatest: Boolean + get() = true + + private val preferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + private val json by injectLazy() + private var tagsUpdated = false + + override fun animeDetailsRequest(anime: SAnime): Request { + return GET("$baseUrl${anime.url}?lang=$lang", headers) + } + + override fun animeDetailsParse(response: Response): SAnime { + val doc = response.asJsoup() + return SAnime.create().apply { + val info = doc.select(".info-header") + title = info.select(".header-left h4").text() + author = info.select(".header-left .model") + .joinToString { it.select("span[title]").attr("title") } + genre = doc.select(".tags a").joinToString { it.text() } + update_strategy = AnimeUpdateStrategy.ONLY_FETCH_ONCE + status = SAnime.COMPLETED + description = info.select(".header-right").text() + } + } + + override fun episodeListParse(response: Response) = throw UnsupportedOperationException() + + override suspend fun getEpisodeList(anime: SAnime): List { + return listOf( + SEpisode.create().apply { + name = "Episode" + url = anime.url + }, + ) + } + + override fun videoListParse(response: Response): List