From 66f2a0ed6e0fad26324df8bb14fcf4aa6ed7ae48 Mon Sep 17 00:00:00 2001 From: FlaminSarge Date: Sat, 14 Jun 2025 01:50:07 -0700 Subject: [PATCH] MangaDex: Add setting to include unavailable chapters in chapter list (#9208) * MangaDex: Add setting to include unavailable chapters in chapter list * Remove redundant isUnavailable check --- .../assets/i18n/messages_en.properties | 3 +++ src/all/mangadex/build.gradle | 2 +- .../extension/all/mangadex/MDConstants.kt | 5 +++++ .../extension/all/mangadex/MangaDex.kt | 20 +++++++++++++++++++ .../extension/all/mangadex/MangaDexHelper.kt | 8 +++++++- .../extension/all/mangadex/dto/ChapterDto.kt | 1 + 6 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/all/mangadex/assets/i18n/messages_en.properties b/src/all/mangadex/assets/i18n/messages_en.properties index 349879d45..7f029bcca 100644 --- a/src/all/mangadex/assets/i18n/messages_en.properties +++ b/src/all/mangadex/assets/i18n/messages_en.properties @@ -5,6 +5,7 @@ block_group_by_uuid=Block groups by UUID block_group_by_uuid_summary=Chapters from blocked groups will not show up in Latest or Manga feed. Enter as a Comma-separated list of group UUIDs block_uploader_by_uuid=Block uploader by UUID block_uploader_by_uuid_summary=Chapters from blocked uploaders will not show up in Latest or Manga feed. Enter as a Comma-separated list of uploader UUIDs +chapter_unavailable_prefix=UNAVAILABLE content=Content content_gore=Gore content_rating=Content rating @@ -66,6 +67,8 @@ genre_tragedy=Tragedy genre_wuxia=Wuxia has_available_chapters=Has available chapters included_tags_mode=Included tags mode +include_unavailable=Show unavailable chapters +include_unavailable_summary=Include chapters that have been marked as unavailable by the source in the chapter list invalid_author_id=Not a valid author ID invalid_manga_id=Not a valid manga ID invalid_group_id=Not a valid group ID diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle index fffff4169..1380a6986 100644 --- a/src/all/mangadex/build.gradle +++ b/src/all/mangadex/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'MangaDex' extClass = '.MangaDexFactory' - extVersionCode = 201 + extVersionCode = 202 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 f6ace2ab7..a55c3660a 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 @@ -148,6 +148,11 @@ object MDConstants { return "${finalChapterInDescPref}_$dexLang" } + private const val includeUnavailablePref = "includeUnavailable" + fun getIncludeUnavailablePrefKey(dexLang: String): String { + return "${includeUnavailablePref}_$dexLang" + } + private const val tagGroupContent = "content" private const val tagGroupFormat = "format" private const val tagGroupGenre = "genre" 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 6fdfbdaec..282b3114c 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 @@ -510,6 +510,7 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St .addQueryParameter("contentRating[]", MDConstants.allContentRatings) .addQueryParameter("excludedGroups[]", preferences.blockedGroups) .addQueryParameter("excludedUploaders[]", preferences.blockedUploaders) + .addQueryParameter("includeUnavailable", if (preferences.includeUnavailable) "1" else "0") .build() return GET(url, headers, CacheControl.FORCE_NETWORK) @@ -784,6 +785,21 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St } } + val includeUnavailablePref = SwitchPreferenceCompat(screen.context).apply { + key = MDConstants.getIncludeUnavailablePrefKey(dexLang) + title = helper.intl["include_unavailable"] + summary = helper.intl["include_unavailable_summary"] + setDefaultValue(false) + + setOnPreferenceChangeListener { _, newValue -> + val checkValue = newValue as Boolean + + preferences.edit() + .putBoolean(MDConstants.getIncludeUnavailablePrefKey(dexLang), checkValue) + .commit() + } + } + screen.addPreference(coverQualityPref) screen.addPreference(tryUsingFirstVolumeCoverPref) screen.addPreference(dataSaverPref) @@ -791,6 +807,7 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St screen.addPreference(altTitlesInDescPref) screen.addPreference(preferExtensionLangTitlePref) screen.addPreference(finalChapterInDescPref) + screen.addPreference(includeUnavailablePref) screen.addPreference(contentRatingPref) screen.addPreference(originalLanguagePref) screen.addPreference(blockedGroupsPref) @@ -875,6 +892,9 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St private val SharedPreferences.finalChapterInDesc get() = getBoolean(MDConstants.getFinalChapterInDescPrefKey(dexLang), true) + private val SharedPreferences.includeUnavailable + get() = getBoolean(MDConstants.getIncludeUnavailablePrefKey(dexLang), false) + /** * Previous versions of the extension allowed invalid UUID values to be stored in the * preferences. This method clear invalid UUIDs in case the user have updated from diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexHelper.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexHelper.kt index 513d9c6ac..0a47f2aff 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexHelper.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexHelper.kt @@ -461,11 +461,17 @@ class MangaDexHelper(lang: String) { // In future calculate [END] if non mvp api doesn't provide it + val unavailablePrefix = if (attr.isUnavailable == true) { + intl["chapter_unavailable_prefix"] + " - " + } else { + "" + } + return SChapter.create().apply { url = "/chapter/${chapterDataDto.id}" name = chapterName.joinToString(" ").removeEntities() date_upload = parseDate(attr.publishAt) - scanlator = groups + scanlator = unavailablePrefix + groups } } diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/dto/ChapterDto.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/dto/ChapterDto.kt index 36984ec53..6383c5110 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/dto/ChapterDto.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/dto/ChapterDto.kt @@ -20,6 +20,7 @@ data class ChapterAttributesDto( val pages: Int, val publishAt: String, val externalUrl: String?, + val isUnavailable: Boolean?, ) : AttributesDto() { /**