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
This commit is contained in:
FlaminSarge 2025-06-14 01:50:07 -07:00 committed by Draff
parent 6022ef39be
commit 66f2a0ed6e
Signed by: Draff
GPG Key ID: E8A89F3211677653
6 changed files with 37 additions and 2 deletions

View File

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

View File

@ -1,7 +1,7 @@
ext {
extName = 'MangaDex'
extClass = '.MangaDexFactory'
extVersionCode = 201
extVersionCode = 202
isNsfw = true
}

View File

@ -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"

View File

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

View File

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

View File

@ -20,6 +20,7 @@ data class ChapterAttributesDto(
val pages: Int,
val publishAt: String,
val externalUrl: String?,
val isUnavailable: Boolean?,
) : AttributesDto() {
/**