MangaDex Cover Qulity Setting (#8268)

* Update MDConstants.kt

* Update MangaDex.kt

* Update MangaDexHelper.kt

* Update build.gradle

* Update MangaDex.kt

* Update MangaDexHelper.kt

* Update MangaDexHelper.kt

* Update MDConstants.kt
This commit is contained in:
FourTOne5 2021-07-26 16:40:18 +06:00 committed by GitHub
parent 686b7d4299
commit bf119937ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 8 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'MangaDex' extName = 'MangaDex'
pkgNameSuffix = 'all.mangadex' pkgNameSuffix = 'all.mangadex'
extClass = '.MangaDexFactory' extClass = '.MangaDexFactory'
extVersionCode = 126 extVersionCode = 127
libVersion = '1.2' libVersion = '1.2'
containsNsfw = true containsNsfw = true
} }

View File

@ -33,6 +33,18 @@ object MDConstants {
const val prefixIdSearch = "id:" const val prefixIdSearch = "id:"
const val prefixChSearch = "ch:" const val prefixChSearch = "ch:"
const val coverQualityPref = "thumbnailQuality"
fun getCoverQualityPreferenceKey(dexLang: String): String {
return "${coverQualityPref}_$dexLang"
}
fun getCoverQualityPreferenceEntries() = arrayOf("Orginal", "Medium", "Low")
fun getCoverQualityPreferenceEntryValues() = arrayOf("", ".512.jpg", ".256.jpg")
fun getCoverQualityPreferenceDefaultValue() = getCoverQualityPreferenceEntryValues()[0]
const val dataSaverPref = "dataSaverV5" const val dataSaverPref = "dataSaverV5"
fun getDataSaverPreferenceKey(dexLang: String): String { fun getDataSaverPreferenceKey(dexLang: String): String {

View File

@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.extension.all.mangadex
import android.app.Application import android.app.Application
import android.content.SharedPreferences import android.content.SharedPreferences
import android.util.Log import android.util.Log
import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import eu.kanade.tachiyomi.extension.all.mangadex.dto.AggregateDto import eu.kanade.tachiyomi.extension.all.mangadex.dto.AggregateDto
@ -107,11 +108,13 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
val mangaListDto = helper.json.decodeFromString<MangaListDto>(response.body!!.string()) val mangaListDto = helper.json.decodeFromString<MangaListDto>(response.body!!.string())
val hasMoreResults = mangaListDto.limit + mangaListDto.offset < mangaListDto.total val hasMoreResults = mangaListDto.limit + mangaListDto.offset < mangaListDto.total
val coverSuffix = preferences.getString(MDConstants.getCoverQualityPreferenceKey(dexLang), "")
val mangaList = mangaListDto.results.map { mangaDto -> val mangaList = mangaListDto.results.map { mangaDto ->
val fileName = mangaDto.relationships.firstOrNull { relationshipDto -> val fileName = mangaDto.relationships.firstOrNull { relationshipDto ->
relationshipDto.type.equals(MDConstants.coverArt, true) relationshipDto.type.equals(MDConstants.coverArt, true)
}?.attributes?.fileName }?.attributes?.fileName
helper.createBasicManga(mangaDto, fileName) helper.createBasicManga(mangaDto, fileName, coverSuffix)
} }
return MangasPage(mangaList, hasMoreResults) return MangasPage(mangaList, hasMoreResults)
@ -152,11 +155,13 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
val mangaDtoMap = mangaListDto.results.associateBy({ it.data.id }, { it }) val mangaDtoMap = mangaListDto.results.associateBy({ it.data.id }, { it })
val coverSuffix = preferences.getString(MDConstants.getCoverQualityPreferenceKey(dexLang), "")
val mangaList = mangaIds.mapNotNull { mangaDtoMap[it] }.map { mangaDto -> val mangaList = mangaIds.mapNotNull { mangaDtoMap[it] }.map { mangaDto ->
val fileName = mangaDto.relationships.firstOrNull { relationshipDto -> val fileName = mangaDto.relationships.firstOrNull { relationshipDto ->
relationshipDto.type.equals(MDConstants.coverArt, true) relationshipDto.type.equals(MDConstants.coverArt, true)
}?.attributes?.fileName }?.attributes?.fileName
helper.createBasicManga(mangaDto, fileName) helper.createBasicManga(mangaDto, fileName, coverSuffix)
} }
return MangasPage(mangaList, hasMoreResults) return MangasPage(mangaList, hasMoreResults)
@ -264,7 +269,9 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
override fun mangaDetailsParse(response: Response): SManga { override fun mangaDetailsParse(response: Response): SManga {
val manga = helper.json.decodeFromString<MangaDto>(response.body!!.string()) val manga = helper.json.decodeFromString<MangaDto>(response.body!!.string())
val shortLang = lang.substringBefore("-") val shortLang = lang.substringBefore("-")
return helper.createManga(manga, fetchSimpleChapterList(manga, shortLang), shortLang)
val coverSuffix = preferences.getString(MDConstants.getCoverQualityPreferenceKey(dexLang), "")
return helper.createManga(manga, fetchSimpleChapterList(manga, shortLang), shortLang, coverSuffix)
} }
/** /**
@ -404,6 +411,22 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
override fun imageUrlParse(response: Response): String = "" override fun imageUrlParse(response: Response): String = ""
override fun setupPreferenceScreen(screen: PreferenceScreen) { override fun setupPreferenceScreen(screen: PreferenceScreen) {
val coverQualityPref = ListPreference(screen.context).apply {
key = MDConstants.getCoverQualityPreferenceKey(dexLang)
title = "Manga Cover Quality"
entries = MDConstants.getCoverQualityPreferenceEntries()
entryValues = MDConstants.getCoverQualityPreferenceEntryValues()
setDefaultValue(MDConstants.getCoverQualityPreferenceDefaultValue())
summary = "%s"
setOnPreferenceChangeListener { _, newValue ->
val selected = newValue as String
val index = findIndexOfValue(selected)
val entry = entryValues[index] as String
preferences.edit().putString(MDConstants.getCoverQualityPreferenceKey(dexLang), entry).commit()
}
}
val dataSaverPref = SwitchPreferenceCompat(screen.context).apply { val dataSaverPref = SwitchPreferenceCompat(screen.context).apply {
key = MDConstants.getDataSaverPreferenceKey(dexLang) key = MDConstants.getDataSaverPreferenceKey(dexLang)
title = "Data saver" title = "Data saver"
@ -491,6 +514,7 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
} }
} }
screen.addPreference(coverQualityPref)
screen.addPreference(dataSaverPref) screen.addPreference(dataSaverPref)
screen.addPreference(standardHttpsPortPref) screen.addPreference(standardHttpsPortPref)
screen.addPreference(contentRatingSafePref) screen.addPreference(contentRatingSafePref)

View File

@ -166,12 +166,16 @@ class MangaDexHelper() {
/** /**
* create an SManga from json element only basic elements * create an SManga from json element only basic elements
*/ */
fun createBasicManga(mangaDto: MangaDto, coverFileName: String?): SManga { fun createBasicManga(mangaDto: MangaDto, coverFileName: String?, coverSuffix: String?): SManga {
return SManga.create().apply { return SManga.create().apply {
url = "/manga/${mangaDto.data.id}" url = "/manga/${mangaDto.data.id}"
title = cleanString(mangaDto.data.attributes.title.asMdMap()["en"] ?: "") title = cleanString(mangaDto.data.attributes.title.asMdMap()["en"] ?: "")
coverFileName?.let { coverFileName?.let {
thumbnail_url = "${MDConstants.cdnUrl}/covers/${mangaDto.data.id}/$coverFileName" thumbnail_url = when(coverSuffix != null && coverSuffix != "") {
true -> "${MDConstants.cdnUrl}/covers/${mangaDto.data.id}/$coverFileName$coverSuffix"
else -> "${MDConstants.cdnUrl}/covers/${mangaDto.data.id}/$coverFileName"
}
} }
} }
} }
@ -179,7 +183,7 @@ class MangaDexHelper() {
/** /**
* Create an SManga from json element with all details * Create an SManga from json element with all details
*/ */
fun createManga(mangaDto: MangaDto, chapters: List<String>, lang: String): SManga { fun createManga(mangaDto: MangaDto, chapters: List<String>, lang: String, coverSuffix: String?): SManga {
try { try {
val data = mangaDto.data val data = mangaDto.data
val attr = data.attributes val attr = data.attributes
@ -228,7 +232,7 @@ class MangaDexHelper() {
.filter { it.isNullOrBlank().not() } .filter { it.isNullOrBlank().not() }
val desc = attr.description.asMdMap() val desc = attr.description.asMdMap()
return createBasicManga(mangaDto, coverFileName).apply { return createBasicManga(mangaDto, coverFileName, coverSuffix).apply {
description = cleanString(desc[lang] ?: desc["en"] ?: "") description = cleanString(desc[lang] ?: desc["en"] ?: "")
author = authors.joinToString(", ") author = authors.joinToString(", ")
artist = artists.joinToString(", ") artist = artists.joinToString(", ")