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