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)
}