diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle index 17705fe5a..72eaa9c46 100644 --- a/src/all/mangadex/build.gradle +++ b/src/all/mangadex/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'MangaDex' pkgNameSuffix = 'all.mangadex' extClass = '.MangaDexFactory' - extVersionCode = 142 + extVersionCode = 143 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 e5eef94f5..2a41bf63f 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 @@ -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" } } 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 b9753223b..943f9dfe2 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 @@ -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(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()) setOnPreferenceChangeListener { _, newValue -> - val checkValue = newValue as Boolean + val checkValue = newValue as Set 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 = diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexFilters.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexFilters.kt index e6b4c1a5d..7a5e7b8da 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexFilters.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/MangaDexFilters.kt @@ -78,26 +78,26 @@ class MangaDexFilters { private class OriginalLanguageList(originalLanguage: List) : Filter.Group("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 { + 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) : Filter.Group("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(