[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'
pkgNameSuffix = 'all.mangadex'
extClass = '.MangaDexFactory'
extVersionCode = 142
extVersionCode = 143
isNsfw = true
}

View File

@ -68,21 +68,13 @@ object MDConstants {
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 {
return "${originalLanguageJapanesePref}_$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"
fun getOriginalLanguagePrefKey(dexLang: String): String {
return "${originalLanguagePref}_$dexLang"
}
}

View File

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

View File

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