From 41a1d83cd0feee82904aa0f1528a7ddf7683d01a Mon Sep 17 00:00:00 2001
From: jopejoe1 <34899572+jopejoe1@users.noreply.github.com>
Date: Sat, 5 Mar 2022 22:50:16 +1300
Subject: [PATCH] Added url intent for author and uploader to managadex
(#11015)
* Update build.gradle
* Added Support for author and uploader url intended
---
src/all/mangadex/AndroidManifest.xml | 6 +
src/all/mangadex/build.gradle | 2 +-
.../extension/all/mangadex/MDConstants.kt | 2 +
.../extension/all/mangadex/MangaDex.kt | 104 +++++++++++++-----
.../all/mangadex/MangadexUrlActivity.kt | 2 +
5 files changed, 90 insertions(+), 26 deletions(-)
diff --git a/src/all/mangadex/AndroidManifest.xml b/src/all/mangadex/AndroidManifest.xml
index 907c1591f..d3558b582 100644
--- a/src/all/mangadex/AndroidManifest.xml
+++ b/src/all/mangadex/AndroidManifest.xml
@@ -28,6 +28,12 @@
+
+
diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle
index 76d66684c..f9141ab5a 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 = 155
+ extVersionCode = 156
isNsfw = 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 30c822941..c605f1306 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
@@ -35,6 +35,8 @@ object MDConstants {
const val prefixIdSearch = "id:"
const val prefixChSearch = "ch:"
const val prefixGrpSearch = "grp:"
+ const val prefixAuthSearch = "author:"
+ const val prefixUsrSearch = "usr:"
const val coverQualityPref = "thumbnailQuality"
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 7436206fc..eb02b7136 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
@@ -196,6 +196,11 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
super.fetchSearchManga(page, MDConstants.prefixIdSearch + manga_id, filters)
}
}
+ if (query.startsWith(MDConstants.prefixUsrSearch)) {
+ return client.newCall(searchMangaUploaderRequest(page, query.removePrefix(MDConstants.prefixUsrSearch)))
+ .asObservableSuccess()
+ .map { latestUpdatesParse(it) }
+ }
return super.fetchSearchManga(page, query, filters)
}
@@ -215,39 +220,52 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
}
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
- if (query.startsWith(MDConstants.prefixIdSearch)) {
- val url = MDConstants.apiMangaUrl.toHttpUrlOrNull()!!.newBuilder().apply {
- addQueryParameter("ids[]", query.removePrefix(MDConstants.prefixIdSearch))
- addQueryParameter("includes[]", MDConstants.coverArt)
- addQueryParameter("contentRating[]", "safe")
- addQueryParameter("contentRating[]", "suggestive")
- addQueryParameter("contentRating[]", "erotica")
- addQueryParameter("contentRating[]", "pornographic")
- }.build().toString()
-
- return GET(url, headers, CacheControl.FORCE_NETWORK)
- }
-
val tempUrl = MDConstants.apiMangaUrl.toHttpUrl().newBuilder().apply {
addQueryParameter("limit", MDConstants.mangaLimit.toString())
addQueryParameter("offset", (helper.getMangaListOffset(page)))
addQueryParameter("includes[]", MDConstants.coverArt)
}
- if (query.startsWith(MDConstants.prefixGrpSearch)) {
- val groupID = query.removePrefix(MDConstants.prefixGrpSearch)
- if (!helper.containsUuid(groupID)) {
- throw Exception("Not a valid group ID")
- }
+ when {
+ query.startsWith(MDConstants.prefixIdSearch) -> {
+ val url = MDConstants.apiMangaUrl.toHttpUrlOrNull()!!.newBuilder().apply {
+ addQueryParameter("ids[]", query.removePrefix(MDConstants.prefixIdSearch))
+ addQueryParameter("includes[]", MDConstants.coverArt)
+ addQueryParameter("contentRating[]", "safe")
+ addQueryParameter("contentRating[]", "suggestive")
+ addQueryParameter("contentRating[]", "erotica")
+ addQueryParameter("contentRating[]", "pornographic")
+ }.build().toString()
- tempUrl.apply {
- addQueryParameter("group", groupID)
+ return GET(url, headers, CacheControl.FORCE_NETWORK)
}
- } else {
- tempUrl.apply {
- val actualQuery = query.replace(MDConstants.whitespaceRegex, " ")
- if (actualQuery.isNotBlank()) {
- addQueryParameter("title", actualQuery)
+ query.startsWith(MDConstants.prefixGrpSearch) -> {
+ val groupID = query.removePrefix(MDConstants.prefixGrpSearch)
+ if (!helper.containsUuid(groupID)) {
+ throw Exception("Not a valid group ID")
+ }
+
+ tempUrl.apply {
+ addQueryParameter("group", groupID)
+ }
+ }
+ query.startsWith(MDConstants.prefixAuthSearch) -> {
+ val authorID = query.removePrefix(MDConstants.prefixAuthSearch)
+ if (!helper.containsUuid(authorID)) {
+ throw Exception("Not a valid author ID")
+ }
+
+ tempUrl.apply {
+ addQueryParameter("authors[]", authorID)
+ addQueryParameter("artists[]", authorID)
+ }
+ }
+ else -> {
+ tempUrl.apply {
+ val actualQuery = query.replace(MDConstants.whitespaceRegex, " ")
+ if (actualQuery.isNotBlank()) {
+ addQueryParameter("title", actualQuery)
+ }
}
}
}
@@ -259,6 +277,42 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
override fun searchMangaParse(response: Response): MangasPage = popularMangaParse(response)
+ private fun searchMangaUploaderRequest(page: Int, uploader: String): Request {
+ val url = MDConstants.apiChapterUrl.toHttpUrlOrNull()!!.newBuilder().apply {
+ addQueryParameter("offset", helper.getLatestChapterOffset(page))
+ addQueryParameter("limit", MDConstants.latestChapterLimit.toString())
+ addQueryParameter("translatedLanguage[]", dexLang)
+ addQueryParameter("order[publishAt]", "desc")
+ addQueryParameter("includeFutureUpdates", "0")
+ addQueryParameter("uploader", uploader)
+ preferences.getStringSet(
+ MDConstants.getOriginalLanguagePrefKey(dexLang),
+ setOf()
+ )?.forEach {
+ addQueryParameter("originalLanguage[]", it)
+ // dex has zh and zh-hk for chinese manhua
+ if (it == MDConstants.originalLanguagePrefValChinese) {
+ addQueryParameter("originalLanguage[]", MDConstants.originalLanguagePrefValChineseHk)
+ }
+ }
+ preferences.getStringSet(
+ MDConstants.getContentRatingPrefKey(dexLang),
+ MDConstants.contentRatingPrefDefaults
+ )?.forEach { addQueryParameter("contentRating[]", it) }
+ MDConstants.defaultBlockedGroups.forEach {
+ addQueryParameter("excludedGroups[]", it)
+ }
+ preferences.getString(
+ MDConstants.getBlockedGroupsPrefKey(dexLang), ""
+ )?.split(",")?.sorted()?.forEach { if (it.isNotEmpty()) addQueryParameter("excludedGroups[]", it.trim()) }
+ preferences.getString(
+ MDConstants.getBlockedUploaderPrefKey(dexLang),
+ ""
+ )?.split(", ")?.sorted()?.forEach { if (it.isNotEmpty()) addQueryParameter("excludedUploaders[]", it.trim()) }
+ }.build().toString()
+ return GET(url, headers, CacheControl.FORCE_NETWORK)
+ }
+
// Manga Details section
// Shenanigans to allow "open in webview" to show a webpage instead of JSON
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 a542262e3..490f60201 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
@@ -29,6 +29,8 @@ class MangadexUrlActivity : Activity() {
when {
equals("chapter") -> putExtra("query", "${MDConstants.prefixChSearch}$titleid")
equals("group") -> putExtra("query", "${MDConstants.prefixGrpSearch}$titleid")
+ equals("user") -> putExtra("query", "${MDConstants.prefixUsrSearch}$titleid")
+ equals("author") -> putExtra("query", "${MDConstants.prefixAuthSearch}$titleid")
else -> putExtra("query", "${MDConstants.prefixIdSearch}$titleid")
}
}