From 21bc5b8bfb2c580d4202d92f78ed5121b74d334e Mon Sep 17 00:00:00 2001 From: AlphaBoom <30779939+AlphaBoom@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:41:12 +0800 Subject: [PATCH] =?UTF-8?q?Add=20Xiaoxintv(=E5=B0=8F=E5=AE=9D=E5=BD=B1?= =?UTF-8?q?=E9=99=A2)=20(#341)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/zh/xiaoxintv/build.gradle | 7 + .../xiaoxintv/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3656 bytes .../xiaoxintv/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2067 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5607 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10171 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15387 bytes .../animeextension/zh/xiaoxintv/Filters.kt | 221 ++++++++++++++ .../animeextension/zh/xiaoxintv/Xiaoxintv.kt | 278 ++++++++++++++++++ 8 files changed, 506 insertions(+) create mode 100644 src/zh/xiaoxintv/build.gradle create mode 100644 src/zh/xiaoxintv/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/zh/xiaoxintv/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/zh/xiaoxintv/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/zh/xiaoxintv/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/zh/xiaoxintv/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/zh/xiaoxintv/src/eu/kanade/tachiyomi/animeextension/zh/xiaoxintv/Filters.kt create mode 100644 src/zh/xiaoxintv/src/eu/kanade/tachiyomi/animeextension/zh/xiaoxintv/Xiaoxintv.kt diff --git a/src/zh/xiaoxintv/build.gradle b/src/zh/xiaoxintv/build.gradle new file mode 100644 index 00000000..67d7a839 --- /dev/null +++ b/src/zh/xiaoxintv/build.gradle @@ -0,0 +1,7 @@ +ext { + extName = 'Xiaoxintv' + extClass = '.Xiaoxintv' + extVersionCode = 1 +} + +apply from: "$rootDir/common.gradle" diff --git a/src/zh/xiaoxintv/res/mipmap-hdpi/ic_launcher.png b/src/zh/xiaoxintv/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..3f719488914ba3c42a55b27fc08f9ad6da8d7a9f GIT binary patch literal 3656 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 literal 0 HcmV?d00001 diff --git a/src/zh/xiaoxintv/res/mipmap-xhdpi/ic_launcher.png b/src/zh/xiaoxintv/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..57026442c4b5825b3d02c6ff34c5bcf389671a90 GIT binary patch literal 5607 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 BuuT8} literal 0 HcmV?d00001 diff --git a/src/zh/xiaoxintv/res/mipmap-xxhdpi/ic_launcher.png b/src/zh/xiaoxintv/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e07f13814eea28514b64177acb6128d63cbf54 GIT binary patch literal 10171 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
9r)NZ#MYCV{ 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 literal 0 HcmV?d00001 diff --git a/src/zh/xiaoxintv/res/mipmap-xxxhdpi/ic_launcher.png b/src/zh/xiaoxintv/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..149a7beead87e1e722f6ff5622563665c20d4202 GIT binary patch literal 15387 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 FV1kJls>lEU literal 0 HcmV?d00001 diff --git a/src/zh/xiaoxintv/src/eu/kanade/tachiyomi/animeextension/zh/xiaoxintv/Filters.kt b/src/zh/xiaoxintv/src/eu/kanade/tachiyomi/animeextension/zh/xiaoxintv/Filters.kt new file mode 100644 index 00000000..68930c85 --- /dev/null +++ b/src/zh/xiaoxintv/src/eu/kanade/tachiyomi/animeextension/zh/xiaoxintv/Filters.kt @@ -0,0 +1,221 @@ +@file:Suppress("LocalVariableName", "PropertyName") + +package eu.kanade.tachiyomi.animeextension.zh.xiaoxintv + +import android.content.SharedPreferences +import eu.kanade.tachiyomi.animesource.model.AnimeFilter +import kotlinx.serialization.Serializable +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json + +private const val PREF_KEY_FILTER_CONFIG_PREFIX = "STORED_SEARCH_CONFIG" + +open class PathFilter(name: String, private val beans: Array) : + AnimeFilter.Select(name, beans.map { it.name }.toTypedArray()) { + val selected + get() = beans[state] +} + +class GroupFilter(name: String, filters: List) : + AnimeFilter.Group(name, filters) + +internal enum class FilterType(val title: String) { + TYPE("类型"), + CLASS("分类"), + YEAR("年份"), + LANG("语言"), + SORT("排序"), + REGION("地区"), +} + +interface SearchBean { + val name: String + val ignore: Boolean + fun toPath(): String +} + +@Serializable +data class SearchType( + override val name: String, + val id: String, + override val ignore: Boolean = false, +) : SearchBean { + constructor(name: String, id: Int) : this(name, "$id") + + override fun toPath() = "/id/$id" +} + +internal fun SearchType.toFilter(): PathFilter { + return PathFilter(name, arrayOf(this)) +} + +@Serializable +data class SearchSort( + override val name: String, + val by: String, + override val ignore: Boolean = false, +) : SearchBean { + override fun toPath() = "/by/$by" +} + +@Serializable +data class SearchYear(override val name: String, override val ignore: Boolean = false) : + SearchBean { + override fun toPath() = "/year/$name" +} + +@Serializable +data class SearchLang(override val name: String, override val ignore: Boolean = false) : + SearchBean { + override fun toPath() = "/lang/$name" +} + +@Serializable +data class SearchClass(override val name: String, override val ignore: Boolean = false) : + SearchBean { + override fun toPath() = "/class/$name" +} + +@Serializable +data class SearchRegion(override val name: String, override val ignore: Boolean = false) : + SearchBean { + override fun toPath() = "/area/$name" +} + +@Serializable +data class SearchFilterConfig( + val type: List, + val category: List = emptyList(), + val year: List = emptyList(), + val lang: List = emptyList(), + val region: List = emptyList(), +) { + fun isEmpty() = + type.isEmpty() && category.isEmpty() && year.isEmpty() && lang.isEmpty() && region.isEmpty() +} + +private inline fun c(): Class { + return T::class.java +} + +private val searchPriority = arrayOf( + c(), + c(), + c(), + c(), + c(), + c(), +) + +internal fun Iterable.toPath(): String { + return this.asSequence().filterNot { it.ignore } + .groupBy { it::class.java }.flatMap { it.value.subList(it.value.size - 1, it.value.size) } + .sortedBy { + searchPriority.indexOf(it::class.java) + } + .joinToString(separator = "") { it.toPath() }.removePrefix("/") +} + +private val defaultLangList = + listOf( + SearchLang("全部", ignore = true), + SearchLang("国语"), + SearchLang("粤语"), + SearchLang("英语"), + SearchLang("其他"), + ) + +private val typeAll = SearchType("全部", "-1", ignore = true) +private val categoryAll = SearchClass("全部", ignore = true) +private val yearAll = SearchYear("全部", ignore = true) +private val regionAll = SearchRegion("全部", ignore = true) + +private val defaultSearchFilterConfig = mapOf( + // anime + "5" to SearchFilterConfig( + type = listOf(typeAll, SearchType("国产动漫", 51), SearchType("日本动漫", 52)), + category = listOf( + categoryAll, + SearchClass("热血"), + SearchClass("格斗"), + SearchClass("其他"), + ), + year = listOf(yearAll), + lang = defaultLangList, + ), + // movie + "7" to SearchFilterConfig( + type = listOf(typeAll), + region = listOf(regionAll), + year = listOf(yearAll), + lang = defaultLangList, + ), + // tv + "6" to SearchFilterConfig( + type = listOf(typeAll), + category = listOf(categoryAll), + year = listOf(yearAll), + lang = defaultLangList, + ), + // variety show + "3" to SearchFilterConfig( + type = listOf(typeAll), + category = listOf(categoryAll), + year = listOf(yearAll), + lang = defaultLangList, + ), + // documentary + "21" to SearchFilterConfig( + type = emptyList(), + region = listOf(regionAll), + year = listOf(yearAll), + lang = defaultLangList, + ), + // short show + "64" to SearchFilterConfig( + type = listOf(typeAll), + ), +) + +private fun findDefaultSearchFilterConfig(majorTypeId: String): SearchFilterConfig { + return defaultSearchFilterConfig.getOrElse(majorTypeId) { + SearchFilterConfig( + listOf(typeAll), + ) + } +} + +private fun genFilterConfigKey(majorTypeId: String): String { + return PREF_KEY_FILTER_CONFIG_PREFIX + "_$majorTypeId" +} + +internal val defaultMajorSearchTypeSet = arrayOf( + SearchType("动漫", 5), + SearchType("电影", 7), + SearchType("电视剧", 6), + SearchType("综艺", 3), + SearchType("纪录片", 21), + SearchType("短剧", 64), +) + +internal val defaultSortTypeSet = + arrayOf( + SearchSort("时间", "time", ignore = true), + SearchSort("人气", "hits"), + SearchSort("评分", "score"), + ) + +fun SharedPreferences.findSearchFilterConfig(majorTypeId: String, json: Json): SearchFilterConfig { + // check shared preferences + return getString(genFilterConfigKey(majorTypeId), null)?.let { json.decodeFromString(it) } + ?: findDefaultSearchFilterConfig(majorTypeId) +} + +fun SharedPreferences.saveSearchFilterConfig( + majorTypeId: String, + searchFilterConfig: SearchFilterConfig, + json: Json, +) { + edit().putString(genFilterConfigKey(majorTypeId), json.encodeToString(searchFilterConfig)) + .apply() +} diff --git a/src/zh/xiaoxintv/src/eu/kanade/tachiyomi/animeextension/zh/xiaoxintv/Xiaoxintv.kt b/src/zh/xiaoxintv/src/eu/kanade/tachiyomi/animeextension/zh/xiaoxintv/Xiaoxintv.kt new file mode 100644 index 00000000..01d5e151 --- /dev/null +++ b/src/zh/xiaoxintv/src/eu/kanade/tachiyomi/animeextension/zh/xiaoxintv/Xiaoxintv.kt @@ -0,0 +1,278 @@ +package eu.kanade.tachiyomi.animeextension.zh.xiaoxintv + +import android.app.Application +import android.content.SharedPreferences +import eu.kanade.tachiyomi.animesource.model.AnimeFilter +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +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.json.Json +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy + +private object HotSortFilter : + PathFilter(FilterType.SORT.title, arrayOf(SearchSort("人气", "hits"))) + +class Xiaoxintv : AnimeHttpSource() { + override val baseUrl: String + get() = "https://xiaoxintv.cc" + override val lang: String + get() = "zh" + override val name: String + get() = "小宝影院" + override val supportsLatest: Boolean + get() = true + + private val majorSearchTypeSet: Array + get() = defaultMajorSearchTypeSet + private val searchSortTypeSet: Array + get() = defaultSortTypeSet + private val filterUpdateRecord by lazy { + majorSearchTypeSet.associateWith { + false + }.toMutableMap() + } + private val json by injectLazy() + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + override fun animeDetailsParse(response: Response): SAnime { + val document = response.asJsoup() + return SAnime.create().apply { + thumbnail_url = + document.select(".myui-vodlist__thumb.picture img").attr("data-original") + url = document.select(".myui-vodlist__thumb.picture").attr("href") + title = document.select(".myui-content__detail .title").text() + author = document.selectFirst("p.data:contains(主演:)")?.text() + artist = document.selectFirst("p.data:contains(导演:)")?.text() + description = document.selectFirst("p.data:contains(简介:)")?.ownText() + } + } + + override fun episodeListParse(response: Response): List { + val document = response.asJsoup() + return document.select("#playlist1 ul li").mapIndexed { index, element -> + SEpisode.create().apply { + url = element.select("a").attr("href") + name = element.attr("title") + episode_number = index.toFloat() + } + }.reversed() + } + + private fun findVideoUrl(document: Document): String { + val script = document.select("script:containsData(player_aaaa)").first()!!.data() + val info = script.substringAfter("player_aaaa=").let { json.parseToJsonElement(it) } + return info.jsonObject["url"]!!.jsonPrimitive.content + } + + override fun videoListParse(response: Response): List