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'
pkgNameSuffix = 'all.mangadex'
extClass = '.MangaDexFactory'
extVersionCode = 126
extVersionCode = 127
libVersion = '1.2'
containsNsfw = true
}

View File

@ -33,6 +33,18 @@ object MDConstants {
const val prefixIdSearch = "id:"
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"
fun getDataSaverPreferenceKey(dexLang: String): String {

View File

@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.extension.all.mangadex
import android.app.Application
import android.content.SharedPreferences
import android.util.Log
import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen
import androidx.preference.SwitchPreferenceCompat
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 hasMoreResults = mangaListDto.limit + mangaListDto.offset < mangaListDto.total
val coverSuffix = preferences.getString(MDConstants.getCoverQualityPreferenceKey(dexLang), "")
val mangaList = mangaListDto.results.map { mangaDto ->
val fileName = mangaDto.relationships.firstOrNull { relationshipDto ->
relationshipDto.type.equals(MDConstants.coverArt, true)
}?.attributes?.fileName
helper.createBasicManga(mangaDto, fileName)
helper.createBasicManga(mangaDto, fileName, coverSuffix)
}
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 coverSuffix = preferences.getString(MDConstants.getCoverQualityPreferenceKey(dexLang), "")
val mangaList = mangaIds.mapNotNull { mangaDtoMap[it] }.map { mangaDto ->
val fileName = mangaDto.relationships.firstOrNull { relationshipDto ->
relationshipDto.type.equals(MDConstants.coverArt, true)
}?.attributes?.fileName
helper.createBasicManga(mangaDto, fileName)
helper.createBasicManga(mangaDto, fileName, coverSuffix)
}
return MangasPage(mangaList, hasMoreResults)
@ -264,7 +269,9 @@ abstract class MangaDex(override val lang: String, val dexLang: String) :
override fun mangaDetailsParse(response: Response): SManga {
val manga = helper.json.decodeFromString<MangaDto>(response.body!!.string())
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 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 {
key = MDConstants.getDataSaverPreferenceKey(dexLang)
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(standardHttpsPortPref)
screen.addPreference(contentRatingSafePref)

View File

@ -166,12 +166,16 @@ class MangaDexHelper() {
/**
* 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 {
url = "/manga/${mangaDto.data.id}"
title = cleanString(mangaDto.data.attributes.title.asMdMap()["en"] ?: "")
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
*/
fun createManga(mangaDto: MangaDto, chapters: List<String>, lang: String): SManga {
fun createManga(mangaDto: MangaDto, chapters: List<String>, lang: String, coverSuffix: String?): SManga {
try {
val data = mangaDto.data
val attr = data.attributes
@ -228,7 +232,7 @@ class MangaDexHelper() {
.filter { it.isNullOrBlank().not() }
val desc = attr.description.asMdMap()
return createBasicManga(mangaDto, coverFileName).apply {
return createBasicManga(mangaDto, coverFileName, coverSuffix).apply {
description = cleanString(desc[lang] ?: desc["en"] ?: "")
author = authors.joinToString(", ")
artist = artists.joinToString(", ")