From c0271a40466ea57e6823ab446da8d80cd0c53716 Mon Sep 17 00:00:00 2001 From: Draff Date: Tue, 9 Jan 2024 00:42:59 +0000 Subject: [PATCH] Edit mangaplus extension to allow for auth --- src/all/mangaplus/build.gradle | 2 +- .../extension/all/mangaplus/MangaPlus.kt | 102 +++++++++++++++++- .../extension/all/mangaplus/MangaPlusDto.kt | 11 +- 3 files changed, 109 insertions(+), 6 deletions(-) diff --git a/src/all/mangaplus/build.gradle b/src/all/mangaplus/build.gradle index 3df450203..ec9fe8b3d 100644 --- a/src/all/mangaplus/build.gradle +++ b/src/all/mangaplus/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'MANGA Plus by SHUEISHA' pkgNameSuffix = 'all.mangaplus' extClass = '.MangaPlusFactory' - extVersionCode = 49 + extVersionCode = 50 } dependencies { diff --git a/src/all/mangaplus/src/eu/kanade/tachiyomi/extension/all/mangaplus/MangaPlus.kt b/src/all/mangaplus/src/eu/kanade/tachiyomi/extension/all/mangaplus/MangaPlus.kt index 378f1951a..85eee5a67 100644 --- a/src/all/mangaplus/src/eu/kanade/tachiyomi/extension/all/mangaplus/MangaPlus.kt +++ b/src/all/mangaplus/src/eu/kanade/tachiyomi/extension/all/mangaplus/MangaPlus.kt @@ -2,6 +2,11 @@ package eu.kanade.tachiyomi.extension.all.mangaplus import android.app.Application import android.content.SharedPreferences +import android.text.Editable +import android.text.TextWatcher +import android.widget.Button +import android.widget.Toast +import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.PreferenceScreen import androidx.preference.SwitchPreferenceCompat @@ -234,7 +239,7 @@ class MangaPlus( .set("Referer", "$baseUrl/titles/$titleId") .build() - return GET("$API_URL/title_detailV3?title_id=$titleId&format=json", newHeaders) + return GET("$APP_API_URL/title_detailV3?title_id=$titleId&lang=eng&os=android&os_ver=30&app_ver=${preferences.appVersion}&secret=${preferences.accountSecret}&format=json", newHeaders) } override fun mangaDetailsParse(response: Response): SManga { @@ -275,7 +280,6 @@ class MangaPlus( val titleDetailView = result.success.titleDetailView!! return titleDetailView.chapterList - .filterNot(Chapter::isExpired) .map(Chapter::toSChapter) .reversed() } @@ -294,10 +298,17 @@ class MangaPlus( .set("Referer", "$baseUrl/viewer/$chapterId") .build() - val url = "$API_URL/manga_viewer".toHttpUrl().newBuilder() + val url = "$APP_API_URL/manga_viewer".toHttpUrl().newBuilder() .addQueryParameter("chapter_id", chapterId) .addQueryParameter("split", if (preferences.splitImages) "yes" else "no") .addQueryParameter("img_quality", preferences.imageQuality) + .addQueryParameter("ticket_reading", "no") + .addQueryParameter("free_reading", "yes") + .addQueryParameter("subscription_reading", "no") + .addQueryParameter("os", "android") + .addQueryParameter("os_ver", "30") + .addQueryParameter("app_ver", preferences.appVersion) + .addQueryParameter("secret", preferences.accountSecret) .addQueryParameter("format", "json") .toString() @@ -360,11 +371,81 @@ class MangaPlus( summary = intl["split_double_pages_summary"] setDefaultValue(SPLIT_PREF_DEFAULT_VALUE) } - + screen.addEditTextPreference( + title = "Secret", + default = SECRET_PREF_DEFAULT_VALUE, + summary = preferences.accountSecret?.ifBlank { "The user secret" } ?: "", + key = "${SECRET_PREF_KEY}_$lang", + ) + screen.addEditTextPreference( + title = "App Version", + default = VER_PREF_DEFAULT_VALUE, + summary = preferences.appVersion?.ifBlank { "The current app version" } ?: "", + key = "${VER_PREF_KEY}_$lang", + ) screen.addPreference(qualityPref) screen.addPreference(splitPref) } + private fun PreferenceScreen.addEditTextPreference( + title: String, + default: String, + summary: String, + inputType: Int? = null, + validate: ((String) -> Boolean)? = null, + validationMessage: String? = null, + key: String = title, + ) { + val preference = EditTextPreference(context).apply { + this.key = key + this.title = title + this.summary = summary + this.setDefaultValue(default) + dialogTitle = title + + setOnBindEditTextListener { editText -> + if (inputType != null) { + editText.inputType = inputType + } + + if (validate != null) { + editText.addTextChangedListener( + object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + + override fun afterTextChanged(editable: Editable?) { + requireNotNull(editable) + + val text = editable.toString() + + val isValid = text.isBlank() || validate(text) + + editText.error = if (!isValid) validationMessage else null + editText.rootView.findViewById