[Mangadex] Update originalLanguage pref to use MultiSelectListPreference (#9671)

The zh-hk workaround is done during query param building rather than being stored in the preference value
This commit is contained in:
FlaminSarge 2021-10-30 09:29:30 -07:00 committed by GitHub
parent f3b3995174
commit 55b2eac827
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 63 additions and 110 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'MangaDex' extName = 'MangaDex'
pkgNameSuffix = 'all.mangadex' pkgNameSuffix = 'all.mangadex'
extClass = '.MangaDexFactory' extClass = '.MangaDexFactory'
extVersionCode = 142 extVersionCode = 143
isNsfw = true isNsfw = true
} }

View File

@ -68,21 +68,13 @@ object MDConstants {
return "${contentRatingPref}_$dexLang" return "${contentRatingPref}_$dexLang"
} }
private const val originalLanguageJapanesePref = "originalLanguageJapanese" private const val originalLanguagePref = "originalLanguage"
const val originalLanguagePrefValJapanese = "ja"
const val originalLanguagePrefValChinese = "zh"
const val originalLanguagePrefValChineseHk = "zh-hk"
const val originalLanguagePrefValKorean = "ko"
fun getOriginalLanguageJapanesePref(dexLang: String): String { fun getOriginalLanguagePrefKey(dexLang: String): String {
return "${originalLanguageJapanesePref}_$dexLang" return "${originalLanguagePref}_$dexLang"
}
private const val originalLanguageChinesePref = "originalLanguageChinese"
fun getOriginalLanguageChinesePref(dexLang: String): String {
return "${originalLanguageChinesePref}_$dexLang"
}
private const val originalLanguageKoreanPref = "originalLanguageKorean"
fun getOriginalLanguageKoreanPref(dexLang: String): String {
return "${originalLanguageKoreanPref}_$dexLang"
} }
} }

View File

@ -70,28 +70,15 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
MDConstants.getContentRatingPrefKey(dexLang), MDConstants.getContentRatingPrefKey(dexLang),
MDConstants.contentRatingPrefDefaults MDConstants.contentRatingPrefDefaults
)?.forEach { addQueryParameter("contentRating[]", it) } )?.forEach { addQueryParameter("contentRating[]", it) }
if (preferences.getBoolean( preferences.getStringSet(
MDConstants.getOriginalLanguageJapanesePref(dexLang), MDConstants.getOriginalLanguagePrefKey(dexLang),
false setOf()
) )?.forEach {
) { addQueryParameter("originalLanguage[]", it)
addQueryParameter("originalLanguage[]", "ja") // dex has zh and zh-hk for chinese manhua
} if (it == MDConstants.originalLanguagePrefValChinese) {
// dex has zh and zh-hk for chinese manhua addQueryParameter("originalLanguage[]", MDConstants.originalLanguagePrefValChineseHk)
if (preferences.getBoolean( }
MDConstants.getOriginalLanguageChinesePref(dexLang),
false
)
) {
addQueryParameter("originalLanguage[]", "zh")
addQueryParameter("originalLanguage[]", "zh-hk")
}
if (preferences.getBoolean(
MDConstants.getOriginalLanguageKoreanPref(dexLang),
false
)
) {
addQueryParameter("originalLanguage[]", "ko")
} }
}.build().toUrl().toString() }.build().toUrl().toString()
return GET( return GET(
@ -124,7 +111,7 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
return MangasPage(mangaList, hasMoreResults) return MangasPage(mangaList, hasMoreResults)
} }
// LATEST section API can't sort by date yet so not implemented // LATEST section API can't sort by date yet so not implemented
override fun latestUpdatesParse(response: Response): MangasPage { override fun latestUpdatesParse(response: Response): MangasPage {
val chapterListDto = helper.json.decodeFromString<ChapterListDto>(response.body!!.string()) val chapterListDto = helper.json.decodeFromString<ChapterListDto>(response.body!!.string())
val hasMoreResults = chapterListDto.limit + chapterListDto.offset < chapterListDto.total val hasMoreResults = chapterListDto.limit + chapterListDto.offset < chapterListDto.total
@ -170,16 +157,15 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
addQueryParameter("translatedLanguage[]", dexLang) addQueryParameter("translatedLanguage[]", dexLang)
addQueryParameter("order[publishAt]", "desc") addQueryParameter("order[publishAt]", "desc")
addQueryParameter("includeFutureUpdates", "0") addQueryParameter("includeFutureUpdates", "0")
if (preferences.getBoolean(MDConstants.getOriginalLanguageJapanesePref(dexLang), false)) { preferences.getStringSet(
addQueryParameter("originalLanguage[]", "ja") MDConstants.getOriginalLanguagePrefKey(dexLang),
} setOf()
// dex has zh and zh-hk for chinese manhua )?.forEach {
if (preferences.getBoolean(MDConstants.getOriginalLanguageChinesePref(dexLang), false)) { addQueryParameter("originalLanguage[]", it)
addQueryParameter("originalLanguage[]", "zh") // dex has zh and zh-hk for chinese manhua
addQueryParameter("originalLanguage[]", "zh-hk") if (it == MDConstants.originalLanguagePrefValChinese) {
} addQueryParameter("originalLanguage[]", MDConstants.originalLanguagePrefValChineseHk)
if (preferences.getBoolean(MDConstants.getOriginalLanguageKoreanPref(dexLang), false)) { }
addQueryParameter("originalLanguage[]", "ko")
} }
preferences.getStringSet( preferences.getStringSet(
MDConstants.getContentRatingPrefKey(dexLang), MDConstants.getContentRatingPrefKey(dexLang),
@ -489,44 +475,21 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
} }
} }
val originalLanguageJapanesePref = SwitchPreferenceCompat(screen.context).apply { val originalLanguagePref = MultiSelectListPreference(screen.context).apply {
key = MDConstants.getOriginalLanguageJapanesePref(dexLang) key = MDConstants.getOriginalLanguagePrefKey(dexLang)
title = "Japanese" title = "Filter original languages"
summary = "If enabled, only shows content that was originally published in Japanese in both latest and browse" summary = "Only show content that was originally published in the selected languages in both latest and browse"
setDefaultValue(false) entries = arrayOf("Japanese", "Chinese", "Korean")
entryValues = arrayOf(
MDConstants.originalLanguagePrefValJapanese,
MDConstants.originalLanguagePrefValChinese,
MDConstants.originalLanguagePrefValKorean
)
setDefaultValue(setOf<String>())
setOnPreferenceChangeListener { _, newValue -> setOnPreferenceChangeListener { _, newValue ->
val checkValue = newValue as Boolean val checkValue = newValue as Set<String>
preferences.edit() preferences.edit()
.putBoolean(MDConstants.getOriginalLanguageJapanesePref(dexLang), checkValue) .putStringSet(MDConstants.getOriginalLanguagePrefKey(dexLang), checkValue)
.commit()
}
}
val originalLanguageChinesePref = SwitchPreferenceCompat(screen.context).apply {
key = MDConstants.getOriginalLanguageChinesePref(dexLang)
title = "Chinese"
summary = "If enabled, only shows content that was originally published in Chinese in both latest and browse"
setDefaultValue(false)
setOnPreferenceChangeListener { _, newValue ->
val checkValue = newValue as Boolean
preferences.edit()
.putBoolean(MDConstants.getOriginalLanguageChinesePref(dexLang), checkValue)
.commit()
}
}
val originalLanguageKoreanPref = SwitchPreferenceCompat(screen.context).apply {
key = MDConstants.getOriginalLanguageKoreanPref(dexLang)
title = "Korean"
summary = "If enabled, only shows content that was originally published in Korean in both latest and browse"
setDefaultValue(false)
setOnPreferenceChangeListener { _, newValue ->
val checkValue = newValue as Boolean
preferences.edit()
.putBoolean(MDConstants.getOriginalLanguageKoreanPref(dexLang), checkValue)
.commit() .commit()
} }
} }
@ -535,9 +498,7 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
screen.addPreference(dataSaverPref) screen.addPreference(dataSaverPref)
screen.addPreference(standardHttpsPortPref) screen.addPreference(standardHttpsPortPref)
screen.addPreference(contentRatingPref) screen.addPreference(contentRatingPref)
screen.addPreference(originalLanguageJapanesePref) screen.addPreference(originalLanguagePref)
screen.addPreference(originalLanguageChinesePref)
screen.addPreference(originalLanguageKoreanPref)
} }
override fun getFilterList(): FilterList = override fun getFilterList(): FilterList =

View File

@ -78,26 +78,26 @@ class MangaDexFilters {
private class OriginalLanguageList(originalLanguage: List<OriginalLanguage>) : private class OriginalLanguageList(originalLanguage: List<OriginalLanguage>) :
Filter.Group<OriginalLanguage>("Original language", originalLanguage) Filter.Group<OriginalLanguage>("Original language", originalLanguage)
private fun getOriginalLanguage(preferences: SharedPreferences, dexLang: String) = listOf( private fun getOriginalLanguage(preferences: SharedPreferences, dexLang: String): List<OriginalLanguage> {
OriginalLanguage("Japanese (Manga)", "ja").apply { val originalLanguages = preferences.getStringSet(
state = preferences.getBoolean( MDConstants.getOriginalLanguagePrefKey(dexLang),
MDConstants.getOriginalLanguageJapanesePref(dexLang), setOf()
false )
) return listOf(
}, OriginalLanguage("Japanese (Manga)", "ja").apply {
OriginalLanguage("Chinese (Manhua)", "zh").apply { state = originalLanguages
state = preferences.getBoolean( ?.contains(MDConstants.originalLanguagePrefValJapanese) ?: false
MDConstants.getOriginalLanguageChinesePref(dexLang), },
false OriginalLanguage("Chinese (Manhua)", "zh").apply {
) state = originalLanguages
}, ?.contains(MDConstants.originalLanguagePrefValChinese) ?: false
OriginalLanguage("Korean (Manhwa)", "ko").apply { },
state = preferences.getBoolean( OriginalLanguage("Korean (Manhwa)", "ko").apply {
MDConstants.getOriginalLanguageKoreanPref(dexLang), state = originalLanguages
false ?.contains(MDConstants.originalLanguagePrefValKorean) ?: false
) },
}, )
) }
internal class Tag(val id: String, name: String) : Filter.TriState(name) internal class Tag(val id: String, name: String) : Filter.TriState(name)
private class TagList(tags: List<Tag>) : Filter.Group<Tag>("Tags", tags) private class TagList(tags: List<Tag>) : Filter.Group<Tag>("Tags", tags)
@ -209,10 +209,10 @@ class MangaDexFilters {
filter.state.forEach { lang -> filter.state.forEach { lang ->
if (lang.state) { if (lang.state) {
// dex has zh and zh-hk for chinese manhua // dex has zh and zh-hk for chinese manhua
if (lang.isoCode == "zh") { if (lang.isoCode == MDConstants.originalLanguagePrefValChinese) {
addQueryParameter( addQueryParameter(
"originalLanguage[]", "originalLanguage[]",
"zh-hk" MDConstants.originalLanguagePrefValChineseHk
) )
} }
addQueryParameter( addQueryParameter(