From c0e22429bbb36a04e62c81f2811749022506d7f9 Mon Sep 17 00:00:00 2001 From: stevenyomi <95685115+stevenyomi@users.noreply.github.com> Date: Sun, 24 Aug 2025 09:54:20 +0000 Subject: [PATCH] Remove Bilibili Manga and Kuaikanmanhua (#10255) --- src/zh/bilibilimanga/AndroidManifest.xml | 25 - src/zh/bilibilimanga/README.md | 46 -- src/zh/bilibilimanga/build.gradle | 7 - .../res/mipmap-hdpi/ic_launcher.png | Bin 8672 -> 0 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 4313 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 12420 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 23755 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 34304 -> 0 bytes .../extension/zh/bilibilimanga/Bilibili.kt | 520 ------------------ .../extension/zh/bilibilimanga/BilibiliDto.kt | 117 ---- .../zh/bilibilimanga/BilibiliFilters.kt | 29 - .../zh/bilibilimanga/BilibiliIntl.kt | 226 -------- .../zh/bilibilimanga/BilibiliManga.kt | 85 --- .../zh/bilibilimanga/BilibiliUrlActivity.kt | 47 -- src/zh/kuaikanmanhua/AndroidManifest.xml | 29 - src/zh/kuaikanmanhua/build.gradle | 7 - .../res/mipmap-hdpi/ic_launcher.png | Bin 4880 -> 0 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 2537 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 7245 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 14333 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 22520 -> 0 bytes .../zh/kuaikanmanhua/Kuaikanmanhua.kt | 285 ---------- .../kuaikanmanhua/KuaikanmanhuaUrlActivity.kt | 38 -- 23 files changed, 1461 deletions(-) delete mode 100644 src/zh/bilibilimanga/AndroidManifest.xml delete mode 100644 src/zh/bilibilimanga/README.md delete mode 100644 src/zh/bilibilimanga/build.gradle delete mode 100644 src/zh/bilibilimanga/res/mipmap-hdpi/ic_launcher.png delete mode 100644 src/zh/bilibilimanga/res/mipmap-mdpi/ic_launcher.png delete mode 100644 src/zh/bilibilimanga/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 src/zh/bilibilimanga/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 src/zh/bilibilimanga/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/Bilibili.kt delete mode 100644 src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliDto.kt delete mode 100644 src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliFilters.kt delete mode 100644 src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliIntl.kt delete mode 100644 src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliManga.kt delete mode 100644 src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliUrlActivity.kt delete mode 100644 src/zh/kuaikanmanhua/AndroidManifest.xml delete mode 100644 src/zh/kuaikanmanhua/build.gradle delete mode 100644 src/zh/kuaikanmanhua/res/mipmap-hdpi/ic_launcher.png delete mode 100644 src/zh/kuaikanmanhua/res/mipmap-mdpi/ic_launcher.png delete mode 100644 src/zh/kuaikanmanhua/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 src/zh/kuaikanmanhua/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 src/zh/kuaikanmanhua/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 src/zh/kuaikanmanhua/src/eu/kanade/tachiyomi/extension/zh/kuaikanmanhua/Kuaikanmanhua.kt delete mode 100644 src/zh/kuaikanmanhua/src/eu/kanade/tachiyomi/extension/zh/kuaikanmanhua/KuaikanmanhuaUrlActivity.kt diff --git a/src/zh/bilibilimanga/AndroidManifest.xml b/src/zh/bilibilimanga/AndroidManifest.xml deleted file mode 100644 index 37cf7b4d8..000000000 --- a/src/zh/bilibilimanga/AndroidManifest.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/zh/bilibilimanga/README.md b/src/zh/bilibilimanga/README.md deleted file mode 100644 index 003a4b3bf..000000000 --- a/src/zh/bilibilimanga/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Bilibili - -Table of Content -- [FAQ](#FAQ) - - [Why are some chapters missing?](#why-are-some-chapters-missing) -- [Guides](#Guides) - - [Reading already paid chapters](#reading-already-paid-chapters) - -Don't find the question you are looking for? Go check out our general FAQs and Guides -over at [Extension FAQ] or [Getting Started]. - -[Extension FAQ]: https://tachiyomi.org/help/faq/#extensions -[Getting Started]: https://tachiyomi.org/help/guides/getting-started/#installation - -## FAQ - -### Why are some chapters missing? - -Bilibili now have series with paid chapters. These will be filtered out from -the chapter list by default if you didn't buy it before or if you're not signed in. -To sign in with your existing account, follow the guide available above. - -## Guides - -### Reading already paid chapters - -The **Bilibili Comics** sources allows the reading of paid chapters in your account. -Follow the following steps to be able to sign in and get access to them: - -1. Open the popular or latest section of the source. -2. Open the WebView by clicking the button with a globe icon. -3. Do the login with your existing account *(read the observations section)*. -4. Close the WebView and refresh the chapter list of the titles - you want to read the already paid chapters. - -#### Observations - -- Sign in with your Google account is not supported due to WebView restrictions - access that Google have. **You need to have a simple account in order to be able - to login via WebView**. -- You may sometime face the *"Failed to refresh the token"* error. To fix it, - you just need to open the WebView, await for the website to completely load. - After that, you can close the WebView and try again. -- The extension **will not** bypass any payment requirement. You still do need - to buy the chapters you want to read or wait until they become available and - added to your account. diff --git a/src/zh/bilibilimanga/build.gradle b/src/zh/bilibilimanga/build.gradle deleted file mode 100644 index 96fe55c39..000000000 --- a/src/zh/bilibilimanga/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -ext { - extName = 'BILIBILI MANGA' - extClass = '.BilibiliManga' - extVersionCode = 13 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/zh/bilibilimanga/res/mipmap-hdpi/ic_launcher.png b/src/zh/bilibilimanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db7eed80c3f9728c1440176ca796443c6794fba7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8672 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%0DtIZ0T$ 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 "cn" - else -> lang - } - - protected open val defaultPopularSort: Int = 0 - - protected open val defaultLatestSort: Int = 1 - - private val preferences: SharedPreferences by getPreferencesLazy() - - protected val json: Json by injectLazy() - - protected open val signedIn: Boolean = false - - override fun popularMangaRequest(page: Int): Request = searchMangaRequest( - page = page, - query = "", - filters = FilterList( - SortFilter("", getAllSortOptions(), defaultPopularSort), - ), - ) - - override fun popularMangaParse(response: Response): MangasPage = searchMangaParse(response) - - override fun latestUpdatesRequest(page: Int): Request = searchMangaRequest( - page = page, - query = "", - filters = FilterList( - SortFilter("", getAllSortOptions(), defaultLatestSort), - ), - ) - - override fun latestUpdatesParse(response: Response): MangasPage = searchMangaParse(response) - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - ID_SEARCH_PATTERN.matchEntire(query)?.let { - val (id) = it.destructured - val temporaryManga = SManga.create().apply { url = "/detail/mc$id" } - return mangaDetailsRequest(temporaryManga) - } - - val price = filters.firstInstanceOrNull()?.state ?: 0 - - val jsonPayload = buildJsonObject { - put("area_id", filters.firstInstanceOrNull()?.selected?.id ?: -1) - put("is_finish", filters.firstInstanceOrNull()?.state?.minus(1) ?: -1) - put("is_free", if (price == 0) -1 else price) - put("order", filters.firstInstanceOrNull()?.selected?.id ?: 0) - put("page_num", page) - put("page_size", if (query.isBlank()) POPULAR_PER_PAGE else SEARCH_PER_PAGE) - put("style_id", filters.firstInstanceOrNull()?.selected?.id ?: -1) - put("style_prefer", "[]") - - if (query.isNotBlank()) { - put("need_shield_prefer", true) - put("key_word", query) - } - } - val requestBody = jsonPayload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val refererUrl = if (query.isBlank()) { - "$baseUrl/genre" - } else { - "$baseUrl/search".toHttpUrl().newBuilder() - .addQueryParameter("keyword", query) - .toString() - } - - val newHeaders = headersBuilder() - .set("Referer", refererUrl) - .build() - - val apiUrl = "$baseUrl/$API_COMIC_V1_COMIC_ENDPOINT/".toHttpUrl().newBuilder() - .addPathSegment(if (query.isBlank()) "ClassPage" else "Search") - .addCommonParameters() - .toString() - - return POST(apiUrl, newHeaders, requestBody) - } - - override fun searchMangaParse(response: Response): MangasPage { - val requestUrl = response.request.url.toString() - if (requestUrl.contains("ComicDetail")) { - val comic = mangaDetailsParse(response) - return MangasPage(listOf(comic), hasNextPage = false) - } - - if (requestUrl.contains("ClassPage")) { - val result = response.parseAs>() - - if (result.code != 0) { - return MangasPage(emptyList(), hasNextPage = false) - } - - val comicList = result.data!!.map(::searchMangaFromObject) - val hasNextPage = comicList.size == POPULAR_PER_PAGE - - return MangasPage(comicList, hasNextPage) - } - - val result = response.parseAs() - - if (result.code != 0) { - return MangasPage(emptyList(), hasNextPage = false) - } - - val comicList = result.data!!.list.map(::searchMangaFromObject) - val hasNextPage = comicList.size == SEARCH_PER_PAGE - - return MangasPage(comicList, hasNextPage) - } - - private fun searchMangaFromObject(comic: BilibiliComicDto): SManga = SManga.create().apply { - title = Jsoup.parse(comic.title).text() - thumbnail_url = comic.verticalCover + THUMBNAIL_RESOLUTION - - val comicId = if (comic.id == 0) comic.seasonId else comic.id - url = "/detail/mc$comicId" - } - - override fun getMangaUrl(manga: SManga): String = baseUrl + manga.url - - override fun mangaDetailsRequest(manga: SManga): Request { - val comicId = manga.url.substringAfterLast("/mc").toInt() - - val jsonPayload = buildJsonObject { put("comic_id", comicId) } - val requestBody = jsonPayload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .set("Referer", baseUrl + manga.url) - .build() - - val apiUrl = "$baseUrl/$API_COMIC_V1_COMIC_ENDPOINT/ComicDetail".toHttpUrl() - .newBuilder() - .addCommonParameters() - .toString() - - return POST(apiUrl, newHeaders, requestBody) - } - - override fun mangaDetailsParse(response: Response): SManga = SManga.create().apply { - val comic = response.parseAs().data!! - - title = comic.title - author = comic.authorName.joinToString() - genre = comic.styles.joinToString() - status = when { - comic.isFinish == 1 -> SManga.COMPLETED - comic.isOnHiatus -> SManga.ON_HIATUS - else -> SManga.ONGOING - } - description = buildString { - if (comic.hasPaidChapters && !signedIn) { - append("${intl.hasPaidChaptersWarning(comic.paidChaptersCount)}\n\n") - } - - append(comic.classicLines) - - if (comic.updateWeekdays.isNotEmpty() && status == SManga.ONGOING) { - append("\n\n${intl.informationTitle}:") - append("\n• ${intl.getUpdateDays(comic.updateWeekdays)}") - } - } - thumbnail_url = comic.verticalCover - url = "/detail/mc" + comic.id - } - - // Chapters are available in the same url of the manga details. - override fun chapterListRequest(manga: SManga): Request = mangaDetailsRequest(manga) - - override fun chapterListParse(response: Response): List { - val result = response.parseAs() - - if (result.code != 0) { - return emptyList() - } - - return result.data!!.episodeList.map { ep -> chapterFromObject(ep, result.data.id) } - } - - protected open fun chapterFromObject( - episode: BilibiliEpisodeDto, - comicId: Int, - isUnlocked: Boolean = false, - ): SChapter = SChapter.create().apply { - name = buildString { - if (episode.isPaid && !isUnlocked) { - append("$EMOJI_LOCKED ") - } - - append(episode.shortTitle) - - if (episode.title.isNotBlank()) { - append(" - ${episode.title}") - } - } - date_upload = episode.publicationTime.toDate() - url = "/mc$comicId/${episode.id}" - } - - override fun getChapterUrl(chapter: SChapter): String = baseUrl + chapter.url - - override fun pageListRequest(chapter: SChapter): Request = imageIndexRequest(chapter.url, "") - - override fun pageListParse(response: Response): List = imageIndexParse(response) - - @Suppress("SameParameterValue") - protected open fun imageIndexRequest(chapterUrl: String, credential: String): Request { - val chapterId = chapterUrl.substringAfterLast("/").toInt() - - val jsonPayload = buildJsonObject { - put("credential", credential) - put("ep_id", chapterId) - } - val requestBody = jsonPayload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .set("Referer", baseUrl + chapterUrl) - .build() - - val apiUrl = "$baseUrl/$API_COMIC_V1_COMIC_ENDPOINT/GetImageIndex".toHttpUrl() - .newBuilder() - .addCommonParameters() - .toString() - - return POST(apiUrl, newHeaders, requestBody) - } - - protected open fun imageIndexParse(response: Response): List { - val result = response.parseAs() - - if (result.code != 0) { - return emptyList() - } - - val imageQuality = preferences.chapterImageQuality - val imageFormat = preferences.chapterImageFormat - - val imageUrls = result.data!!.images.map { it.url(imageQuality, imageFormat) } - val imageTokenRequest = imageTokenRequest(imageUrls) - val imageTokenResponse = client.newCall(imageTokenRequest).execute() - val imageTokenResult = imageTokenResponse.parseAs>() - return imageTokenResult.data!!.zip(imageUrls).mapIndexed { i, pair -> - Page(i, pair.second, pair.first.imageUrl) - } - } - - protected open fun imageTokenRequest(urls: List): Request { - val jsonPayload = buildJsonObject { - put("urls", json.encodeToString(urls)) - } - val requestBody = jsonPayload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val apiUrl = "$baseUrl/$API_COMIC_V1_COMIC_ENDPOINT/ImageToken".toHttpUrl() - .newBuilder() - .addCommonParameters() - .toString() - - return POST(apiUrl, headers, requestBody) - } - - override fun imageUrlParse(response: Response): String = "" - - override fun setupPreferenceScreen(screen: PreferenceScreen) { - val imageQualityPref = ListPreference(screen.context).apply { - key = "${IMAGE_QUALITY_PREF_KEY}_$lang" - title = intl.imageQualityPrefTitle - entries = intl.imageQualityPrefEntries - entryValues = IMAGE_QUALITY_PREF_ENTRY_VALUES - setDefaultValue(IMAGE_QUALITY_PREF_DEFAULT_VALUE) - summary = "%s" - } - - val imageFormatPref = ListPreference(screen.context).apply { - key = "${IMAGE_FORMAT_PREF_KEY}_$lang" - title = intl.imageFormatPrefTitle - entries = IMAGE_FORMAT_PREF_ENTRIES - entryValues = IMAGE_FORMAT_PREF_ENTRY_VALUES - setDefaultValue(IMAGE_FORMAT_PREF_DEFAULT_VALUE) - summary = "%s" - } - - screen.addPreference(imageQualityPref) - screen.addPreference(imageFormatPref) - } - - abstract fun getAllGenres(): Array - - protected open fun getAllAreas(): Array = emptyArray() - - protected open fun getAllSortOptions(): Array = arrayOf( - BilibiliTag(intl.sortInterest, 0), - BilibiliTag(intl.sortUpdated, 4), - ) - - protected open fun getAllStatus(): Array = - arrayOf(intl.statusAll, intl.statusOngoing, intl.statusComplete) - - protected open fun getAllPrices(): Array = emptyArray() - - override fun getFilterList(): FilterList { - val allAreas = getAllAreas() - val allPrices = getAllPrices() - - val filters = listOfNotNull( - StatusFilter(intl.statusLabel, getAllStatus()), - SortFilter(intl.sortLabel, getAllSortOptions(), defaultPopularSort), - PriceFilter(intl.priceLabel, getAllPrices()).takeIf { allPrices.isNotEmpty() }, - GenreFilter(intl.genreLabel, getAllGenres()), - AreaFilter(intl.areaLabel, allAreas).takeIf { allAreas.isNotEmpty() }, - ) - - return FilterList(filters) - } - - override fun imageRequest(page: Page): Request { - return super.imageRequest(page).newBuilder().tag(TAG_IMAGE_REQUEST) - .tag(TagImagePath::class.java, TagImagePath(page.url)).build() - } - - private fun decryptImageIntercept(chain: Interceptor.Chain): Response { - val request = chain.request() - val response = chain.proceed(request) - if (response.isSuccessful && request.tag() == TAG_IMAGE_REQUEST) { - if (response.body.contentType()?.type == "image") { - return response - } - val cpx = request.url.queryParameter("cpx") - val iv = Base64.decode(cpx, Base64.DEFAULT).copyOfRange(60, 76) - val allBytes = response.body.bytes() - val size = - ByteBuffer.wrap(allBytes.copyOfRange(1, 5)).order(ByteOrder.BIG_ENDIAN).getInt() - val data = allBytes.copyOfRange(5, 5 + size) - val key = allBytes.copyOfRange(5 + size, allBytes.size) - val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") - val ivSpec = IvParameterSpec(iv) - cipher.init(Cipher.DECRYPT_MODE, SecretKeySpec(key, "AES"), ivSpec) - val encryptedSize = 20 * 1024 + 16 - val decryptedSegment = cipher.doFinal(data, 0, encryptedSize.coerceAtMost(data.size)) - val decryptedData = if (encryptedSize < data.size) { - // append remaining data - decryptedSegment + data.copyOfRange(encryptedSize, data.size) - } else { - decryptedSegment - } - val imageExtension = request.url.encodedPath.substringAfterLast(".", "jpg") - return response.newBuilder() - .body(decryptedData.toResponseBody("image/$imageExtension".toMediaType())).build() - } - return response - } - - private fun expiredImageTokenIntercept(chain: Interceptor.Chain): Response { - val request = chain.request() - val response = chain.proceed(request) - // Get a new image token if the current one expired. - if (response.code == 400 && request.tag() == TAG_IMAGE_REQUEST) { - val imagePath = request.tag(TagImagePath::class) - if (imagePath?.path.isNullOrEmpty()) { - return response - } - response.close() - val imageTokenRequest = imageTokenRequest(listOf(imagePath!!.path)) - val imageTokenResponse = chain.proceed(imageTokenRequest) - val imageTokenResult = imageTokenResponse.parseAs>() - imageTokenResponse.close() - - val newPage = imageTokenResult.data!!.first() - val newPageUrl = newPage.imageUrl - - val newRequest = imageRequest(Page(0, imagePath.path, newPageUrl)) - - return chain.proceed(newRequest) - } - - return response - } - - private val SharedPreferences.chapterImageQuality - get() = when ( - getString( - "${IMAGE_QUALITY_PREF_KEY}_$lang", - IMAGE_QUALITY_PREF_DEFAULT_VALUE, - )!! - ) { - "hd" -> "1600w" - "sd" -> "1000w" - "low" -> "800w_50q" - else -> "raw" - } - - private val SharedPreferences.chapterImageFormat - get() = getString("${IMAGE_FORMAT_PREF_KEY}_$lang", IMAGE_FORMAT_PREF_DEFAULT_VALUE)!! - - private inline fun List<*>.firstInstanceOrNull(): R? = firstOrNull { it is R } as? R - - protected open fun HttpUrl.Builder.addCommonParameters(): HttpUrl.Builder = apply { - if (name == "BILIBILI COMICS") { - addQueryParameter("lang", apiLang) - addQueryParameter("sys_lang", apiLang) - } - - addQueryParameter("device", "pc") - addQueryParameter("platform", "web") - } - - protected inline fun Response.parseAs(): BilibiliResultDto = use { - json.decodeFromString(it.body.string()) - } - - private fun String.toDate(): Long { - return runCatching { DATE_FORMATTER.parse(this)?.time } - .getOrNull() ?: 0L - } - - private class TagImagePath(val path: String) - - companion object { - const val CDN_URL = "https://manga.hdslb.com" - const val MODIFIED_CDN_URL = "https://mangaup.hdslb.com" - const val COVER_CDN_URL = "https://i0.hdslb.com" - - const val API_COMIC_V1_COMIC_ENDPOINT = "twirp/comic.v1.Comic" - - private const val ACCEPT_JSON = "application/json, text/plain, */*" - private const val TAG_IMAGE_REQUEST = "tag_image_request" - - val JSON_MEDIA_TYPE = "application/json;charset=UTF-8".toMediaType() - - private const val POPULAR_PER_PAGE = 18 - private const val SEARCH_PER_PAGE = 9 - - const val PREFIX_ID_SEARCH = "id:" - private val ID_SEARCH_PATTERN = "^${PREFIX_ID_SEARCH}mc(\\d+)$".toRegex() - - private const val IMAGE_QUALITY_PREF_KEY = "chapterImageQuality" - private val IMAGE_QUALITY_PREF_ENTRY_VALUES = arrayOf("raw", "hd", "sd", "low") - private val IMAGE_QUALITY_PREF_DEFAULT_VALUE = IMAGE_QUALITY_PREF_ENTRY_VALUES[1] - - private const val IMAGE_FORMAT_PREF_KEY = "chapterImageFormat" - private val IMAGE_FORMAT_PREF_ENTRIES = arrayOf("JPG", "WEBP", "PNG") - private val IMAGE_FORMAT_PREF_ENTRY_VALUES = arrayOf("jpg", "webp", "png") - private val IMAGE_FORMAT_PREF_DEFAULT_VALUE = IMAGE_FORMAT_PREF_ENTRY_VALUES[0] - - const val THUMBNAIL_RESOLUTION = "@512w.jpg" - - private val DATE_FORMATTER by lazy { - SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH) - } - - private const val EMOJI_LOCKED = "\uD83D\uDD12" - const val EMOJI_WARNING = "\u26A0\uFE0F" - } -} diff --git a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliDto.kt b/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliDto.kt deleted file mode 100644 index fabcda8d4..000000000 --- a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliDto.kt +++ /dev/null @@ -1,117 +0,0 @@ -package eu.kanade.tachiyomi.extension.zh.bilibilimanga - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class BilibiliResultDto( - val code: Int = 0, - val data: T? = null, - @SerialName("msg") val message: String = "", -) - -@Serializable -data class BilibiliSearchDto( - val list: List = emptyList(), -) - -@Serializable -data class BilibiliComicDto( - @SerialName("author_name") val authorName: List = emptyList(), - @SerialName("classic_lines") val classicLines: String = "", - @SerialName("comic_id") val comicId: Int = 0, - @SerialName("ep_list") val episodeList: List = emptyList(), - val id: Int = 0, - @SerialName("is_finish") val isFinish: Int = 0, - @SerialName("temp_stop_update") val isOnHiatus: Boolean = false, - @SerialName("season_id") val seasonId: Int = 0, - val styles: List = emptyList(), - val title: String, - @SerialName("update_weekday") val updateWeekdays: List = emptyList(), - @SerialName("vertical_cover") val verticalCover: String = "", -) { - val hasPaidChapters: Boolean - get() = paidChaptersCount > 0 - - val paidChaptersCount: Int - get() = episodeList.filter { it.isPaid }.size -} - -@Serializable -data class BilibiliEpisodeDto( - val id: Int, - @SerialName("is_in_free") val isInFree: Boolean, - @SerialName("is_locked") val isLocked: Boolean, - @SerialName("pay_gold") val payGold: Int, - @SerialName("pay_mode") val payMode: Int, - @SerialName("pub_time") val publicationTime: String, - @SerialName("short_title") val shortTitle: String, - val title: String, -) { - val isPaid = payMode == 1 && payGold > 0 -} - -@Serializable -data class BilibiliReader( - val images: List = emptyList(), -) - -@Serializable -data class BilibiliImageDto( - val path: String, - @SerialName("x") val width: Int, - @SerialName("y") val height: Int, -) { - - fun url(quality: String, format: String): String { - val imageWidth = if (quality == "raw") "${width}w" else quality - - return "$path@$imageWidth.$format" - } -} - -@Serializable -data class BilibiliPageDto( - val token: String, - val url: String, - @SerialName("complete_url") - val completeUrl: String, -) { - val imageUrl: String - get() = completeUrl.ifEmpty { "$url?token=$token" } -} - -@Serializable -data class BilibiliAccessTokenCookie( - val accessToken: String, - val refreshToken: String, - val area: String, -) - -@Serializable -data class BilibiliAccessToken( - @SerialName("access_token") val accessToken: String, - @SerialName("refresh_token") val refreshToken: String, -) - -@Serializable -data class BilibiliUserEpisodes( - @SerialName("unlocked_eps") val unlockedEpisodes: List? = emptyList(), -) - -@Serializable -data class BilibiliUnlockedEpisode( - @SerialName("ep_id") val id: Int = 0, -) - -@Serializable -data class BilibiliGetCredential( - @SerialName("comic_id") val comicId: Int, - @SerialName("ep_id") val episodeId: Int, - val type: Int, -) - -@Serializable -data class BilibiliCredential( - val credential: String, -) diff --git a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliFilters.kt b/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliFilters.kt deleted file mode 100644 index 42193c01c..000000000 --- a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliFilters.kt +++ /dev/null @@ -1,29 +0,0 @@ -package eu.kanade.tachiyomi.extension.zh.bilibilimanga - -import eu.kanade.tachiyomi.source.model.Filter - -data class BilibiliTag(val name: String, val id: Int) { - override fun toString(): String = name -} - -open class EnhancedSelect(name: String, values: Array, state: Int = 0) : - Filter.Select(name, values, state) { - - val selected: T? - get() = values.getOrNull(state) -} - -class GenreFilter(label: String, genres: Array) : - EnhancedSelect(label, genres) - -class AreaFilter(label: String, genres: Array) : - EnhancedSelect(label, genres) - -class SortFilter(label: String, options: Array, state: Int = 0) : - EnhancedSelect(label, options, state) - -class StatusFilter(label: String, statuses: Array) : - Filter.Select(label, statuses) - -class PriceFilter(label: String, prices: Array) : - Filter.Select(label, prices) diff --git a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliIntl.kt b/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliIntl.kt deleted file mode 100644 index aedf7db94..000000000 --- a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliIntl.kt +++ /dev/null @@ -1,226 +0,0 @@ -package eu.kanade.tachiyomi.extension.zh.bilibilimanga - -import java.text.DateFormatSymbols -import java.text.NumberFormat -import java.util.Locale - -class BilibiliIntl(private val lang: String) { - - private val locale by lazy { Locale.forLanguageTag(lang) } - - private val dateFormatSymbols by lazy { DateFormatSymbols(locale) } - - private val numberFormat by lazy { NumberFormat.getInstance(locale) } - - val statusLabel: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "进度" - SPANISH -> "Estado" - else -> "Status" - } - - val sortLabel: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "排序" - INDONESIAN -> "Urutkan dengan" - SPANISH -> "Ordenar por" - else -> "Sort by" - } - - val genreLabel: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "题材" - SPANISH -> "Género" - else -> "Genre" - } - - val areaLabel: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "地区" - else -> "Area" - } - - val priceLabel: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "收费" - INDONESIAN -> "Harga" - SPANISH -> "Precio" - else -> "Price" - } - - fun hasPaidChaptersWarning(chapterCount: Int): String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> - "${Bilibili.EMOJI_WARNING} 此漫画有 ${chapterCount.localized} 个付费章节,已在目录中隐藏。" + - "如果你已购买,请在 WebView 登录并刷新目录,即可阅读已购章节。" - SPANISH -> - "${Bilibili.EMOJI_WARNING} ADVERTENCIA: Esta serie tiene ${chapterCount.localized} " + - "capítulos pagos que fueron filtrados de la lista de capítulos. Si ya has " + - "desbloqueado y tiene alguno en su cuenta, inicie sesión en WebView y " + - "actualice la lista de capítulos para leerlos." - else -> - "${Bilibili.EMOJI_WARNING} WARNING: This series has ${chapterCount.localized} paid " + - "chapters. If you have any unlocked in your account then sign in through WebView " + - "to be able to read them." - } - - val imageQualityPrefTitle: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "章节图片质量" - INDONESIAN -> "Kualitas gambar" - SPANISH -> "Calidad de imagen del capítulo" - else -> "Chapter image quality" - } - - val imageQualityPrefEntries: Array = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> arrayOf("原图", "高清 (1600w)", "标清 (1000w)", "低清 (800w)") - else -> arrayOf("Raw", "HD (1600w)", "SD (1000w)", "Low (800w)") - } - - val imageFormatPrefTitle: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "章节图片格式" - INDONESIAN -> "Format gambar" - SPANISH -> "Formato de la imagen del capítulo" - else -> "Chapter image format" - } - - val sortInterest: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "为你推荐" - INDONESIAN -> "Kamu Mungkin Suka" - SPANISH -> "Sugerencia" - else -> "Interest" - } - - @Suppress("UNUSED") // In BilibiliManga - val sortPopular: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "人气推荐" - INDONESIAN -> "Populer" - SPANISH -> "Popularidad" - FRENCH -> "Préférences" - else -> "Popular" - } - - val sortUpdated: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "更新时间" - INDONESIAN -> "Terbaru" - SPANISH -> "Actualización" - FRENCH -> "Récent" - else -> "Updated" - } - - @Suppress("UNUSED") // In BilibiliManga - val sortAdded: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "上架时间" - else -> "Added" - } - - @Suppress("UNUSED") // In BilibiliManga - val sortFollowers: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "追漫人数" - else -> "Followers count" - } - - val statusAll: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "全部" - INDONESIAN -> "Semua" - SPANISH -> "Todos" - FRENCH -> "Tout" - else -> "All" - } - - val statusOngoing: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "连载中" - INDONESIAN -> "Berlangsung" - SPANISH -> "En curso" - FRENCH -> "En cours" - else -> "Ongoing" - } - - val statusComplete: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "已完结" - INDONESIAN -> "Tamat" - SPANISH -> "Finalizado" - FRENCH -> "Complet" - else -> "Completed" - } - - @Suppress("UNUSED") // In BilibiliManga - val priceAll: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "全部" - INDONESIAN -> "Semua" - SPANISH -> "Todos" - else -> "All" - } - - @Suppress("UNUSED") // In BilibiliManga - val priceFree: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "免费" - INDONESIAN -> "Bebas" - SPANISH -> "Gratis" - else -> "Free" - } - - @Suppress("UNUSED") // In BilibiliManga - val pricePaid: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "付费" - INDONESIAN -> "Dibayar" - SPANISH -> "Pago" - else -> "Paid" - } - - @Suppress("UNUSED") // In BilibiliManga - val priceWaitForFree: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "等就免费" - else -> "Wait for free" - } - - @Suppress("UNUSED") // In BilibiliComics - val failedToRefreshToken: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "无法刷新令牌。请打开 WebView 修正错误。" - SPANISH -> "Error al actualizar el token. Abra el WebView para solucionar este error." - else -> "Failed to refresh the token. Open the WebView to fix this error." - } - - @Suppress("UNUSED") // In BilibiliComics - val failedToGetCredential: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "无法获取阅读章节所需的凭证。" - SPANISH -> "Erro al obtener la credencial para leer el capítulo." - else -> "Failed to get the credential to read the chapter." - } - - val informationTitle: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "信息" - SPANISH -> "Información" - else -> "Information" - } - - private val updatesDaily: String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "每日更新" - SPANISH -> "Actualizaciones diarias" - else -> "Updates daily" - } - - private fun updatesEvery(days: String): String = when (lang) { - CHINESE, SIMPLIFIED_CHINESE -> "${days}更新" - SPANISH -> "Actualizaciones todos los $days" - else -> "Updates every $days" - } - - fun getUpdateDays(dayIndexes: List): String { - val shortWeekDays = dateFormatSymbols.shortWeekdays.filterNot(String::isBlank) - if (dayIndexes.size == shortWeekDays.size) return updatesDaily - val shortWeekDaysUpperCased = shortWeekDays.map { - it.replaceFirstChar { char -> char.uppercase(locale) } - } - - val days = dayIndexes.joinToString { shortWeekDaysUpperCased[it] } - return updatesEvery(days) - } - - private val Int.localized: String - get() = numberFormat.format(this) - - companion object { - const val CHINESE = "zh" - const val INDONESIAN = "id" - const val SIMPLIFIED_CHINESE = "zh-Hans" - const val SPANISH = "es" - const val FRENCH = "fr" - - @Suppress("UNUSED") // In BilibiliComics - const val ENGLISH = "en" - } -} diff --git a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliManga.kt b/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliManga.kt deleted file mode 100644 index 197612a91..000000000 --- a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliManga.kt +++ /dev/null @@ -1,85 +0,0 @@ -package eu.kanade.tachiyomi.extension.zh.bilibilimanga - -import eu.kanade.tachiyomi.source.model.SChapter -import okhttp3.Headers -import okhttp3.Response - -class BilibiliManga : Bilibili( - "哔哩哔哩漫画", - "https://manga.bilibili.com", - BilibiliIntl.SIMPLIFIED_CHINESE, -) { - - override val id: Long = 3561131545129718586 - - override fun headersBuilder() = Headers.Builder().apply { - add("User-Agent", DEFAULT_USER_AGENT) - } - - override fun chapterListParse(response: Response): List { - val result = response.parseAs() - - if (result.code != 0) { - return emptyList() - } - - val data = result.data!! - val id = data.id - return data.episodeList.mapNotNull { episode -> - if (episode.isInFree || !episode.isLocked) { - chapterFromObject(episode, id) - } else { - null - } - } - } - - override val defaultPopularSort: Int = 0 - - override val defaultLatestSort: Int = 1 - - override fun getAllSortOptions(): Array = arrayOf( - BilibiliTag(intl.sortPopular, 0), - BilibiliTag(intl.sortUpdated, 1), - BilibiliTag(intl.sortFollowers, 2), - BilibiliTag(intl.sortAdded, 3), - ) - - override fun getAllPrices(): Array = - arrayOf(intl.priceAll, intl.priceFree, intl.pricePaid, intl.priceWaitForFree) - - override fun getAllGenres(): Array = arrayOf( - BilibiliTag("全部", -1), - BilibiliTag("竞技", 1034), - BilibiliTag("冒险", 1013), - BilibiliTag("热血", 999), - BilibiliTag("搞笑", 994), - BilibiliTag("恋爱", 995), - BilibiliTag("少女", 1026), - BilibiliTag("日常", 1020), - BilibiliTag("校园", 1001), - BilibiliTag("治愈", 1007), - BilibiliTag("古风", 997), - BilibiliTag("玄幻", 1016), - BilibiliTag("奇幻", 998), - BilibiliTag("惊奇", 996), - BilibiliTag("悬疑", 1023), - BilibiliTag("都市", 1002), - BilibiliTag("剧情", 1030), - BilibiliTag("总裁", 1004), - BilibiliTag("科幻", 1015), - BilibiliTag("正能量", 1028), - ) - - override fun getAllAreas(): Array = arrayOf( - BilibiliTag("全部", -1), - BilibiliTag("大陆", 1), - BilibiliTag("日本", 2), - BilibiliTag("韩国", 6), - BilibiliTag("其他", 5), - ) - - companion object { - const val DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63" - } -} diff --git a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliUrlActivity.kt b/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliUrlActivity.kt deleted file mode 100644 index e51e47e85..000000000 --- a/src/zh/bilibilimanga/src/eu/kanade/tachiyomi/extension/zh/bilibilimanga/BilibiliUrlActivity.kt +++ /dev/null @@ -1,47 +0,0 @@ -package eu.kanade.tachiyomi.extension.zh.bilibilimanga - -import android.app.Activity -import android.content.ActivityNotFoundException -import android.content.Intent -import android.os.Bundle -import android.util.Log -import kotlin.system.exitProcess - -/** - * Springboard that accepts https://www.bilibilicomics.com/detail/xxx intents and redirects them to - * the main tachiyomi process. The idea is to not install the intent filter unless - * you have this extension installed, but still let the main tachiyomi app control - * things. - * - * Main goal was to make it easier to open manga in Tachiyomi in spite of the DDoS blocking - * the usual search screen from working. - */ -class BilibiliUrlActivity : Activity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - val pathSegments = intent?.data?.pathSegments - if (pathSegments != null && pathSegments.size > 1) { - // Mobile site of https://manga.bilibili.com starts with path "m" - val titleId = if (pathSegments[0] == "m") pathSegments[2] else pathSegments[1] - - val mainIntent = Intent().apply { - action = "eu.kanade.tachiyomi.SEARCH" - putExtra("query", Bilibili.PREFIX_ID_SEARCH + titleId) - putExtra("filter", packageName) - } - - try { - startActivity(mainIntent) - } catch (e: ActivityNotFoundException) { - Log.e("BilibiliUrlActivity", e.toString()) - } - } else { - Log.e("BilibiliUrlActivity", "Could not parse URI from intent $intent") - } - - finish() - exitProcess(0) - } -} diff --git a/src/zh/kuaikanmanhua/AndroidManifest.xml b/src/zh/kuaikanmanhua/AndroidManifest.xml deleted file mode 100644 index c88d31966..000000000 --- a/src/zh/kuaikanmanhua/AndroidManifest.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/src/zh/kuaikanmanhua/build.gradle b/src/zh/kuaikanmanhua/build.gradle deleted file mode 100644 index b64077b72..000000000 --- a/src/zh/kuaikanmanhua/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -ext { - extName = 'Kuaikanmanhua' - extClass = '.Kuaikanmanhua' - extVersionCode = 10 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/zh/kuaikanmanhua/res/mipmap-hdpi/ic_launcher.png b/src/zh/kuaikanmanhua/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 47365f396dc2db03220931ca8ed49218650195b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4880 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 diff --git a/src/zh/kuaikanmanhua/res/mipmap-xhdpi/ic_launcher.png b/src/zh/kuaikanmanhua/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index ef6a83fdf09094f3d745b220fc48b464eaaf189f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7245 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 diff --git a/src/zh/kuaikanmanhua/res/mipmap-xxxhdpi/ic_launcher.png b/src/zh/kuaikanmanhua/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 6c0e6a1d2ef678fd3b124dcb17bf0d472a61218b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22520 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�<^L8X2Ch2W?OvtrczKFM$0*wO;ro{i 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 9 && !isSearch) - } - - // Latest - - override fun latestUpdatesRequest(page: Int): Request { - return GET("$apiUrl/v1/topic_new/lists/get_by_tag?tag=19&since=${(page - 1) * 10}", headers) - } - - override fun latestUpdatesParse(response: Response): MangasPage = popularMangaParse(response) - - // Search - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - if (query.startsWith(TOPIC_ID_SEARCH_PREFIX)) { - val newQuery = query.removePrefix(TOPIC_ID_SEARCH_PREFIX) - return client.newCall(GET("$apiUrl/v1/topics/$newQuery")) - .asObservableSuccess() - .map { response -> - val details = mangaDetailsParse(response) - details.url = "/web/topic/$newQuery" - MangasPage(listOf(details), false) - } - } - return super.fetchSearchManga(page, query, filters) - } - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - return if (query.isNotEmpty()) { - GET("$apiUrl/v1/search/topic?q=$query&size=18", headers) - } else { - lateinit var genre: String - lateinit var status: String - filters.forEach { filter -> - when (filter) { - is GenreFilter -> { - genre = filter.toUriPart() - } - is StatusFilter -> { - status = filter.toUriPart() - } - else -> {} - } - } - GET("$apiUrl/v1/search/by_tag?since=${(page - 1) * 10}&tag=$genre&sort=1&query_category=%7B%22update_status%22:$status%7D") - } - } - - override fun searchMangaParse(response: Response): MangasPage { - val body = response.body.string() - val jsonObj = json.parseToJsonElement(body).jsonObject["data"]!!.jsonObject - if (jsonObj["hit"] != null) { - return parseMangaJsonArray(jsonObj["hit"]!!.jsonArray, true) - } - - return parseMangaJsonArray(jsonObj["topics"]!!.jsonArray, false) - } - - // Details - - override fun fetchMangaDetails(manga: SManga): Observable { - // Convert the stored url to one that works with the api - val newUrl = apiUrl + "/v1/topics/" + manga.url.trimEnd('/').substringAfterLast("/") - val response = client.newCall(GET(newUrl)).execute() - val sManga = mangaDetailsParse(response).apply { initialized = true } - return Observable.just(sManga) - } - - override fun mangaDetailsParse(response: Response): SManga = SManga.create().apply { - val data = json.parseToJsonElement(response.body.string()) - .jsonObject["data"]!! - .jsonObject - - title = data["title"]!!.jsonPrimitive.content - thumbnail_url = data["vertical_image_url"]!!.jsonPrimitive.content - author = data["user"]!!.jsonObject["nickname"]!!.jsonPrimitive.content - description = data["description"]!!.jsonPrimitive.content - status = data["update_status_code"]!!.jsonPrimitive.int - } - - // Chapters & Pages - - override fun fetchChapterList(manga: SManga): Observable> { - val newUrl = apiUrl + "/v1/topics/" + manga.url.trimEnd('/').substringAfterLast("/") - val response = client.newCall(GET(newUrl)).execute() - val chapters = chapterListParse(response) - return Observable.just(chapters) - } - - override fun chapterListParse(response: Response): List { - val data = json.parseToJsonElement(response.body.string()) - .jsonObject["data"]!! - .jsonObject - val chaptersJson = data["comics"]!!.jsonArray - val chapters = mutableListOf() - - for (i in 0 until chaptersJson.size) { - val obj = chaptersJson[i].jsonObject - chapters.add( - SChapter.create().apply { - url = "/web/comic/" + obj["id"]!!.jsonPrimitive.content - name = obj["title"]!!.jsonPrimitive.content + - if (!obj["can_view"]!!.jsonPrimitive.boolean) { - " \uD83D\uDD12" - } else { - "" - } - date_upload = obj["created_at"]!!.jsonPrimitive.long * 1000 - }, - ) - } - return chapters - } - - override fun fetchPageList(chapter: SChapter): Observable> { - val request = client.newCall(pageListRequest(chapter)).execute() - return Observable.just(pageListParse(request)) - } - - override fun pageListRequest(chapter: SChapter): Request { - // if (chapter.name.endsWith("🔒")) { - // throw Exception("[此章节为付费内容]") - // } - return GET(baseUrl + chapter.url) - } - - private val fixJson: (MatchResult) -> CharSequence = { - match: MatchResult -> - val str = match.value - val out = str[0] + "\"" + str.subSequence(1, str.length - 1) + "\"" + str[str.length - 1] - out - } - - override fun pageListParse(response: Response): List { - val document = response.asJsoup() - val script = document.selectFirst("script:containsData(comicImages)")!!.data() - val images = script.substringAfter("comicImages:") - .substringBefore(",is_vip_exclusive") - .replace("""(:([^\[\{\"]+?)[\},])""".toRegex(), fixJson) - .replace("""([,{]([^\[\{\"]+?)[\}:])""".toRegex(), fixJson) - .let { json.parseToJsonElement(it).jsonArray } - val variable = script.substringAfter("(function(") - .substringBefore("){") - .split(",") - val value = script.substringAfterLast("}}(") - .substringBefore("));") - .split(",") - - return images.mapIndexed { index, jsonEl -> - val urlVar = jsonEl.jsonObject["url"]!!.jsonPrimitive.content - val imageUrl = value[variable.indexOf(urlVar)] - .replace("\\u002F", "/") - .replace("\"", "") - - Page(index, "", imageUrl) - } - } - - // Filters - - override fun getFilterList() = FilterList( - Filter.Header("注意:不影響按標題搜索"), - StatusFilter(), - GenreFilter(), - ) - - override fun imageUrlParse(response: Response): String { - throw UnsupportedOperationException() - } - - private class GenreFilter : UriPartFilter( - "题材", - arrayOf( - Pair("全部", "0"), - Pair("恋爱", "20"), - Pair("古风", "46"), - Pair("校园", "47"), - Pair("奇幻", "22"), - Pair("大女主", "77"), - Pair("治愈", "27"), - Pair("总裁", "52"), - Pair("完结", "40"), - Pair("唯美", "58"), - Pair("日漫", "57"), - Pair("韩漫", "60"), - Pair("穿越", "80"), - Pair("正能量", "54"), - Pair("灵异", "32"), - Pair("爆笑", "24"), - Pair("都市", "48"), - Pair("萌系", "62"), - Pair("玄幻", "63"), - Pair("日常", "19"), - Pair("投稿", "76"), - ), - ) - - private class StatusFilter : UriPartFilter( - "类别", - arrayOf( - Pair("全部", "1"), - Pair("连载中", "2"), - Pair("已完结", "3"), - ), - ) - - private open class UriPartFilter(displayName: String, val vals: Array>) : - Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { - fun toUriPart() = vals[state].second - } - - companion object { - const val TOPIC_ID_SEARCH_PREFIX = "topic:" - } -} diff --git a/src/zh/kuaikanmanhua/src/eu/kanade/tachiyomi/extension/zh/kuaikanmanhua/KuaikanmanhuaUrlActivity.kt b/src/zh/kuaikanmanhua/src/eu/kanade/tachiyomi/extension/zh/kuaikanmanhua/KuaikanmanhuaUrlActivity.kt deleted file mode 100644 index 42d56f8e8..000000000 --- a/src/zh/kuaikanmanhua/src/eu/kanade/tachiyomi/extension/zh/kuaikanmanhua/KuaikanmanhuaUrlActivity.kt +++ /dev/null @@ -1,38 +0,0 @@ -package eu.kanade.tachiyomi.extension.zh.kuaikanmanhua - -import android.app.Activity -import android.content.ActivityNotFoundException -import android.content.Intent -import android.os.Bundle -import android.util.Log -import kotlin.system.exitProcess - -class KuaikanmanhuaUrlActivity : Activity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val host = intent?.data?.host - val pathSegments = intent?.data?.pathSegments - if (pathSegments != null && pathSegments.size > 1) { - val id = when (host) { - "m.kuaikanmanhua.com" -> pathSegments[1] - else -> pathSegments[2] - } - val mainIntent = Intent().apply { - action = "eu.kanade.tachiyomi.SEARCH" - putExtra("query", "${Kuaikanmanhua.TOPIC_ID_SEARCH_PREFIX}$id") - putExtra("filter", packageName) - } - - try { - startActivity(mainIntent) - } catch (e: ActivityNotFoundException) { - Log.e("KkmhUrlActivity", e.toString()) - } - } else { - Log.e("KkmhUrlActivity", "could not parse uri from intent $intent") - } - - finish() - exitProcess(0) - } -}