MangaDex: Make chapter URLs deeplink to series page in Tachiyomi (#8205)

* MangaDex: Chapter URLs deeplink to series page in Tachiyomi

* Changes to getMangaIdFromChapterId:
* Remove FORCE_NETWORK from request
* Decode to ChapterDto instead of manually parsing json
* Make exception on unsuccessful response more verbose

* Use constant instead of "manga" literal
This commit is contained in:
lord-ne 2021-07-21 11:20:09 -04:00 committed by GitHub
parent f3e86f75be
commit 233746b94d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 39 additions and 2 deletions

View File

@ -29,6 +29,14 @@
android:host="www.mangadex.org"
android:pathPattern="/manga/..*"
android:scheme="https" />
<data
android:host="mangadex.org"
android:pathPattern="/chapter/..*"
android:scheme="https" />
<data
android:host="www.mangadex.org"
android:pathPattern="/chapter/..*"
android:scheme="https" />
</intent-filter>
</activity>
</application>

View File

@ -6,7 +6,7 @@ ext {
extName = 'MangaDex'
pkgNameSuffix = 'all.mangadex'
extClass = '.MangaDexFactory'
extVersionCode = 125
extVersionCode = 126
libVersion = '1.2'
containsNsfw = true
}

View File

@ -31,6 +31,7 @@ object MDConstants {
.apply { timeZone = TimeZone.getTimeZone("UTC") }
const val prefixIdSearch = "id:"
const val prefixChSearch = "ch:"
const val dataSaverPref = "dataSaverV5"

View File

@ -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<MangasPage> {
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<String> {
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<ChapterDto>(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 {

View File

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