diff --git a/src/zh/copymangas/build.gradle.kts b/src/zh/copymangas/build.gradle.kts index 3fdb1838bb9..af570d865f5 100644 --- a/src/zh/copymangas/build.gradle.kts +++ b/src/zh/copymangas/build.gradle.kts @@ -6,7 +6,7 @@ plugins { keiyoushi { name = "CopyMangas" - versionCode = 57 + versionCode = 58 contentWarning = ContentWarning.SAFE libVersion = "1.6" diff --git a/src/zh/copymangas/proguard-rules.pro b/src/zh/copymangas/proguard-rules.pro new file mode 100644 index 00000000000..2dc64d3ffb1 --- /dev/null +++ b/src/zh/copymangas/proguard-rules.pro @@ -0,0 +1,4 @@ +-keep class eu.kanade.tachiyomi.extension.zh.copymangas.CopyMangas { + public java.lang.Object getMangaDetails(eu.kanade.tachiyomi.source.model.SManga, kotlin.coroutines.Continuation); + public java.lang.Object getChapterList(eu.kanade.tachiyomi.source.model.SManga, kotlin.coroutines.Continuation); +} diff --git a/src/zh/copymangas/src/eu/kanade/tachiyomi/extension/zh/copymangas/CopyMangas.kt b/src/zh/copymangas/src/eu/kanade/tachiyomi/extension/zh/copymangas/CopyMangas.kt index df2d8bc9ea2..b216d1f3bed 100644 --- a/src/zh/copymangas/src/eu/kanade/tachiyomi/extension/zh/copymangas/CopyMangas.kt +++ b/src/zh/copymangas/src/eu/kanade/tachiyomi/extension/zh/copymangas/CopyMangas.kt @@ -114,8 +114,15 @@ abstract class CopyMangas : override fun OkHttpClient.Builder.configureClient() = sslSocketFactory(sslContext.socketFactory, trustManager) .rateLimit(preferences.getString(CHAPTER_API_RATE_PREF, "15")!!.toInt(), 61.seconds) { it.toString().contains(chapterRatelimitRegex) } - .addInterceptor(CommentsInterceptor) - .addInterceptor(::responseInterceptor) + .apply { + interceptors().apply { + val uncaughtExceptionInterceptor = first { it.javaClass.simpleName == "UncaughtExceptionInterceptor" } + remove(uncaughtExceptionInterceptor) + add(0, uncaughtExceptionInterceptor) + add(1, ::responseInterceptor) + } + addInterceptor(CommentsInterceptor) + } private fun Headers.Builder.setUserAgent(userAgent: String) = set("User-Agent", userAgent) private fun Headers.Builder.setWebp(useWebp: Boolean) = set( @@ -298,6 +305,22 @@ abstract class CopyMangas : apiHeaders, ).parseAs>().results + suspend fun getMangaDetails(manga: SManga): SManga = getMangaDetails(manga.url.removePrefix(MangaDto.URL_PREFIX)).toSMangaDetails() + + suspend fun getChapterList(manga: SManga): List { + val mangaSlug = manga.url.removePrefix(MangaDto.URL_PREFIX) + val mangaDetails = getMangaDetails(mangaSlug) + return fetchChapterList(mangaSlug, mangaDetails.groups) + } + + private suspend fun fetchChapterList(manga: String, groups: ChapterGroups?): List { + val result = ArrayList() + for (group in groups.orEmpty().values) { + result += fetchChapterGroup(manga, group.path_word, group.name) + } + return result + } + private suspend fun fetchChapterGroup(manga: String, key: String, name: String): List { val result = ArrayList(0) var offset = 0 @@ -326,15 +349,16 @@ abstract class CopyMangas : fetchDetails: Boolean, fetchChapters: Boolean, ): SMangaUpdate { - val mangaDetails = getMangaDetails(manga.url.removePrefix(MangaDto.URL_PREFIX)) - val chapterList = ArrayList() - val groups = mangaDetails.groups!!.values - val mangaSlug = manga.url.removePrefix(MangaDto.URL_PREFIX) - for (group in groups) { - chapterList += fetchChapterGroup(mangaSlug, group.path_word, group.name) + if (!fetchDetails && !fetchChapters) { + return SMangaUpdate(manga, chapters) } - return SMangaUpdate(mangaDetails.toSMangaDetails(), chapterList) + val mangaSlug = manga.url.removePrefix(MangaDto.URL_PREFIX) + val mangaDetails = getMangaDetails(mangaSlug) + val updatedManga = if (fetchDetails) mangaDetails.toSMangaDetails() else manga + val chapterList = if (fetchChapters) fetchChapterList(mangaSlug, mangaDetails.groups) else chapters + + return SMangaUpdate(updatedManga, chapterList) } override fun getChapterUrl(chapter: SChapter) = baseUrl + chapter.url.replace("/chapter2/", "/chapter/") diff --git a/src/zh/copymangas/src/eu/kanade/tachiyomi/extension/zh/copymangas/CopyMangasDto.kt b/src/zh/copymangas/src/eu/kanade/tachiyomi/extension/zh/copymangas/CopyMangasDto.kt index abc4c246330..43ea78f2c00 100644 --- a/src/zh/copymangas/src/eu/kanade/tachiyomi/extension/zh/copymangas/CopyMangasDto.kt +++ b/src/zh/copymangas/src/eu/kanade/tachiyomi/extension/zh/copymangas/CopyMangasDto.kt @@ -29,19 +29,19 @@ class MangaDto( thumbnail_url = cover.removeSuffix(".328x422.jpg") } - fun toSMangaDetails(groups: ChapterGroups) = toSManga().apply { - description = ( + fun toSMangaDetails() = toSManga().apply { + description = brief?.let { if (convertToSc) { - ChineseUtils.toSimplified(brief) + ChineseUtils.toSimplified(it) } else { - brief + it } - ) - genre = buildList(theme!!.size + 1) { - add(region!!.display) - theme.mapTo(this) { it.name } + } + genre = buildList { + this@MangaDto.region?.display?.let { add(it) } + this@MangaDto.theme.orEmpty().mapTo(this) { it.name } }.joinToString { ChineseUtils.toSimplified(it) } - status = when (this@MangaDto.status!!.value) { + status = when (this@MangaDto.status?.value) { 0 -> SManga.ONGOING 1 -> SManga.COMPLETED else -> SManga.UNKNOWN @@ -89,7 +89,7 @@ class ValueDto(val value: Int, val display: String) @Serializable class MangaWrapperDto(val comic: MangaDto, val groups: ChapterGroups? = null) { fun toSManga() = comic.toSManga() - fun toSMangaDetails() = comic.toSMangaDetails(groups!!) + fun toSMangaDetails() = comic.toSMangaDetails() } typealias ChapterGroups = LinkedHashMap