MangaDex: Show final chapter in description (#7314)
* Show final chapter in description * Make it a preference
This commit is contained in:
parent
944586408e
commit
07c6de7cf6
|
@ -23,6 +23,9 @@ data_saver_summary=Enables smaller, more compressed images
|
||||||
excluded_tags_mode=Excluded tags mode
|
excluded_tags_mode=Excluded tags mode
|
||||||
filter_original_languages=Filter original languages
|
filter_original_languages=Filter original languages
|
||||||
filter_original_languages_summary=Only show content that was originally published in the selected languages in both latest and browse
|
filter_original_languages_summary=Only show content that was originally published in the selected languages in both latest and browse
|
||||||
|
final_chapter=Final chapter:
|
||||||
|
final_chapter_in_description=Final chapter in description
|
||||||
|
final_chapter_in_description_summary=Include a manga's final chapter number at the end of its description
|
||||||
format=Format
|
format=Format
|
||||||
format_adaptation=Adaptation
|
format_adaptation=Adaptation
|
||||||
format_anthology=Anthology
|
format_anthology=Anthology
|
||||||
|
@ -76,8 +79,8 @@ original_language=Original language
|
||||||
original_language_filter_chinese=%s (Manhua)
|
original_language_filter_chinese=%s (Manhua)
|
||||||
original_language_filter_japanese=%s (Manga)
|
original_language_filter_japanese=%s (Manga)
|
||||||
original_language_filter_korean=%s (Manhwa)
|
original_language_filter_korean=%s (Manhwa)
|
||||||
prefer_title_in_extension_language=Use Alternate Titles
|
prefer_title_in_extension_language=Use alternative titles
|
||||||
prefer_title_in_extension_language_summary=If there is an alternate title available which matches the extension language, it will be used
|
prefer_title_in_extension_language_summary=If there is an alternative title available which matches the extension language, it will be used
|
||||||
publication_demographic=Publication demographic
|
publication_demographic=Publication demographic
|
||||||
publication_demographic_josei=Josei
|
publication_demographic_josei=Josei
|
||||||
publication_demographic_none=None
|
publication_demographic_none=None
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ext {
|
ext {
|
||||||
extName = 'MangaDex'
|
extName = 'MangaDex'
|
||||||
extClass = '.MangaDexFactory'
|
extClass = '.MangaDexFactory'
|
||||||
extVersionCode = 196
|
extVersionCode = 197
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,6 +143,11 @@ object MDConstants {
|
||||||
return "${preferExtensionLangTitlePref}_$dexLang"
|
return "${preferExtensionLangTitlePref}_$dexLang"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private const val finalChapterInDescPref = "finalChapterInDesc"
|
||||||
|
fun getFinalChapterInDescPrefKey(dexLang: String): String {
|
||||||
|
return "${finalChapterInDescPref}_$dexLang"
|
||||||
|
}
|
||||||
|
|
||||||
private const val tagGroupContent = "content"
|
private const val tagGroupContent = "content"
|
||||||
private const val tagGroupFormat = "format"
|
private const val tagGroupFormat = "format"
|
||||||
private const val tagGroupGenre = "genre"
|
private const val tagGroupGenre = "genre"
|
||||||
|
|
|
@ -424,6 +424,7 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St
|
||||||
preferences.coverQuality,
|
preferences.coverQuality,
|
||||||
preferences.altTitlesInDesc,
|
preferences.altTitlesInDesc,
|
||||||
preferences.preferExtensionLangTitle,
|
preferences.preferExtensionLangTitle,
|
||||||
|
preferences.finalChapterInDesc,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -773,12 +774,28 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val finalChapterInDescPref = SwitchPreferenceCompat(screen.context).apply {
|
||||||
|
key = MDConstants.getFinalChapterInDescPrefKey(dexLang)
|
||||||
|
title = helper.intl["final_chapter_in_description"]
|
||||||
|
summary = helper.intl["final_chapter_in_description_summary"]
|
||||||
|
setDefaultValue(true)
|
||||||
|
|
||||||
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
|
val checkValue = newValue as Boolean
|
||||||
|
|
||||||
|
preferences.edit()
|
||||||
|
.putBoolean(MDConstants.getFinalChapterInDescPrefKey(dexLang), checkValue)
|
||||||
|
.commit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
screen.addPreference(coverQualityPref)
|
screen.addPreference(coverQualityPref)
|
||||||
screen.addPreference(tryUsingFirstVolumeCoverPref)
|
screen.addPreference(tryUsingFirstVolumeCoverPref)
|
||||||
screen.addPreference(dataSaverPref)
|
screen.addPreference(dataSaverPref)
|
||||||
screen.addPreference(standardHttpsPortPref)
|
screen.addPreference(standardHttpsPortPref)
|
||||||
screen.addPreference(altTitlesInDescPref)
|
screen.addPreference(altTitlesInDescPref)
|
||||||
screen.addPreference(preferExtensionLangTitlePref)
|
screen.addPreference(preferExtensionLangTitlePref)
|
||||||
|
screen.addPreference(finalChapterInDescPref)
|
||||||
screen.addPreference(contentRatingPref)
|
screen.addPreference(contentRatingPref)
|
||||||
screen.addPreference(originalLanguagePref)
|
screen.addPreference(originalLanguagePref)
|
||||||
screen.addPreference(blockedGroupsPref)
|
screen.addPreference(blockedGroupsPref)
|
||||||
|
@ -860,6 +877,9 @@ abstract class MangaDex(final override val lang: String, private val dexLang: St
|
||||||
private val SharedPreferences.preferExtensionLangTitle
|
private val SharedPreferences.preferExtensionLangTitle
|
||||||
get() = getBoolean(MDConstants.getPreferExtensionLangTitlePrefKey(dexLang), true)
|
get() = getBoolean(MDConstants.getPreferExtensionLangTitlePrefKey(dexLang), true)
|
||||||
|
|
||||||
|
private val SharedPreferences.finalChapterInDesc
|
||||||
|
get() = getBoolean(MDConstants.getFinalChapterInDescPrefKey(dexLang), true)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Previous versions of the extension allowed invalid UUID values to be stored in the
|
* Previous versions of the extension allowed invalid UUID values to be stored in the
|
||||||
* preferences. This method clear invalid UUIDs in case the user have updated from
|
* preferences. This method clear invalid UUIDs in case the user have updated from
|
||||||
|
|
|
@ -324,6 +324,7 @@ class MangaDexHelper(lang: String) {
|
||||||
coverSuffix: String?,
|
coverSuffix: String?,
|
||||||
altTitlesInDesc: Boolean,
|
altTitlesInDesc: Boolean,
|
||||||
preferExtensionLangTitle: Boolean,
|
preferExtensionLangTitle: Boolean,
|
||||||
|
finalChapterInDesc: Boolean,
|
||||||
): SManga {
|
): SManga {
|
||||||
val attr = mangaDataDto.attributes!!
|
val attr = mangaDataDto.attributes!!
|
||||||
|
|
||||||
|
@ -365,9 +366,12 @@ class MangaDexHelper(lang: String) {
|
||||||
|
|
||||||
val genreList = MDConstants.tagGroupsOrder.flatMap { genresMap[it].orEmpty() } + nonGenres
|
val genreList = MDConstants.tagGroupsOrder.flatMap { genresMap[it].orEmpty() } + nonGenres
|
||||||
|
|
||||||
var desc = (attr.description[lang] ?: attr.description["en"])
|
// Build description
|
||||||
|
val desc = mutableListOf<String>()
|
||||||
|
|
||||||
|
(attr.description[lang] ?: attr.description["en"])
|
||||||
?.removeEntitiesAndMarkdown()
|
?.removeEntitiesAndMarkdown()
|
||||||
.orEmpty()
|
?.let { desc.add(it) }
|
||||||
|
|
||||||
if (altTitlesInDesc) {
|
if (altTitlesInDesc) {
|
||||||
val romanizedOriginalLang = MDConstants.romanizedLangCodes[attr.originalLanguage].orEmpty()
|
val romanizedOriginalLang = MDConstants.romanizedLangCodes[attr.originalLanguage].orEmpty()
|
||||||
|
@ -379,12 +383,24 @@ class MangaDexHelper(lang: String) {
|
||||||
if (altTitles.isNotEmpty()) {
|
if (altTitles.isNotEmpty()) {
|
||||||
val altTitlesDesc = altTitles
|
val altTitlesDesc = altTitles
|
||||||
.joinToString("\n", "${intl["alternative_titles"]}\n") { "• $it" }
|
.joinToString("\n", "${intl["alternative_titles"]}\n") { "• $it" }
|
||||||
desc += (if (desc.isBlank()) "" else "\n\n") + altTitlesDesc.removeEntities()
|
desc.add(altTitlesDesc.removeEntities())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (finalChapterInDesc) {
|
||||||
|
val finalChapter = mutableListOf<String>()
|
||||||
|
attr.lastVolume?.takeIf { it.isNotEmpty() }?.let { finalChapter.add("Vol.$it") }
|
||||||
|
attr.lastChapter?.takeIf { it.isNotEmpty() }?.let { finalChapter.add("Ch.$it") }
|
||||||
|
|
||||||
|
if (finalChapter.isNotEmpty()) {
|
||||||
|
val finalChapterDesc = finalChapter
|
||||||
|
.joinToString(" ", "${intl["final_chapter"]}\n")
|
||||||
|
desc.add(finalChapterDesc.removeEntities())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return createBasicManga(mangaDataDto, coverFileName, coverSuffix, lang, preferExtensionLangTitle).apply {
|
return createBasicManga(mangaDataDto, coverFileName, coverSuffix, lang, preferExtensionLangTitle).apply {
|
||||||
description = desc
|
description = desc.joinToString("\n\n")
|
||||||
author = authors.joinToString()
|
author = authors.joinToString()
|
||||||
artist = artists.joinToString()
|
artist = artists.joinToString()
|
||||||
status = getPublicationStatus(attr, chapters)
|
status = getPublicationStatus(attr, chapters)
|
||||||
|
|
Loading…
Reference in New Issue