diff --git a/src/all/mangadex/AndroidManifest.xml b/src/all/mangadex/AndroidManifest.xml index d7b6f4f5a..7724e5016 100644 --- a/src/all/mangadex/AndroidManifest.xml +++ b/src/all/mangadex/AndroidManifest.xml @@ -29,6 +29,14 @@ android:host="www.mangadex.org" android:pathPattern="/manga/..*" android:scheme="https" /> + + diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle index 86d3ee6c1..aa3a0ee7a 100644 --- a/src/all/mangadex/build.gradle +++ b/src/all/mangadex/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'MangaDex' pkgNameSuffix = 'all.mangadex' extClass = '.MangaDexFactory' - extVersionCode = 125 + extVersionCode = 126 libVersion = '1.2' containsNsfw = true } diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MDConstants.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MDConstants.kt index 57c929e4f..816a5c555 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MDConstants.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MDConstants.kt @@ -31,6 +31,7 @@ object MDConstants { .apply { timeZone = TimeZone.getTimeZone("UTC") } const val prefixIdSearch = "id:" + const val prefixChSearch = "ch:" const val dataSaverPref = "dataSaverV5" diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDex.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDex.kt index a75cd7cb8..61ba0fcd0 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDex.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDex.kt @@ -173,6 +173,30 @@ abstract class MangaDex(override val lang: String, val dexLang: String) : // SEARCH section + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + if (query.startsWith(MDConstants.prefixChSearch)) { + return getMangaIdFromChapterId(query.removePrefix(MDConstants.prefixChSearch)).flatMap { manga_id -> + super.fetchSearchManga(page, MDConstants.prefixIdSearch + manga_id, filters) + } + } + return super.fetchSearchManga(page, query, filters) + } + + private fun getMangaIdFromChapterId(id: String): Observable { + return client.newCall(GET("${MDConstants.apiChapterUrl}/$id", headers)) + .asObservableSuccess() + .map { response -> + if (response.isSuccessful.not()) { + throw Exception("Unable to process Chapter request. HTTP code: ${response.code}") + } + + helper.json.decodeFromString(response.body!!.string()).relationships + .find { + it.type == MDConstants.manga + }!!.id + } + } + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { if (query.startsWith(MDConstants.prefixIdSearch)) { val url = MDConstants.apiMangaUrl.toHttpUrlOrNull()!!.newBuilder().apply { diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangadexUrlActivity.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangadexUrlActivity.kt index 0956e3719..af88ef61d 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangadexUrlActivity.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangadexUrlActivity.kt @@ -25,7 +25,11 @@ class MangadexUrlActivity : Activity() { val titleid = pathSegments[1] val mainIntent = Intent().apply { action = "eu.kanade.tachiyomi.SEARCH" - putExtra("query", "${MDConstants.prefixIdSearch}$titleid") + if (pathSegments[0].equals("chapter")) { + putExtra("query", "${MDConstants.prefixChSearch}$titleid") + } else { + putExtra("query", "${MDConstants.prefixIdSearch}$titleid") + } putExtra("filter", packageName) }