Add handling for previously unhandled preferences (delegated MD) (#1524)

* Include romanized titles of the original language in description

* Implement handling for `finalChapterInDesc` preference.

* Handle `preferExtensionLangTitle` preference when fetching manga details.

* Address some warnings, clean up unused code and spotless apply.
This commit is contained in:
NGB-Was-Taken
2025-12-12 00:43:56 +05:45
committed by GitHub
parent 5566db160b
commit 582d0ef121
6 changed files with 203 additions and 144 deletions
@@ -168,17 +168,17 @@ class MdList(id: Long) : BaseTracker(id, "MDList") {
trackPreferences.trackToken(this).delete()
}
override suspend fun getMangaMetadata(track: DomainTrack): TrackMangaMetadata? {
override suspend fun getMangaMetadata(track: DomainTrack): TrackMangaMetadata {
return withIOContext {
val mdex = mdex ?: throw MangaDexNotFoundException()
val manga = mdex.getMangaMetadata(track.toDbTrack())
TrackMangaMetadata(
remoteId = 0,
title = manga?.title,
thumbnailUrl = manga?.thumbnail_url, // Doesn't load the actual cover because of Refer header
description = manga?.description,
authors = manga?.author,
artists = manga?.artist,
title = manga.title,
thumbnailUrl = manga.thumbnail_url, // Doesn't load the actual cover because of Refer header
description = manga.description,
authors = manga.author,
artists = manga.artist,
)
}
}
@@ -90,6 +90,8 @@ class MangaDex(delegate: HttpSource, val context: Context) :
private fun coverQuality() = sourcePreferences.getString(getCoverQualityPrefKey(mdLang.lang), "").orEmpty()
private fun tryUsingFirstVolumeCover() = sourcePreferences.getBoolean(getTryUsingFirstVolumeCoverKey(mdLang.lang), false)
private fun altTitlesInDesc() = sourcePreferences.getBoolean(getAltTitlesInDescKey(mdLang.lang), false)
private fun finalChapterInDesc() = sourcePreferences.getBoolean(getFinalChapterInDescPrefKey(mdLang.lang), false)
private fun preferExtensionLangTitle() = sourcePreferences.getBoolean(getPreferExtensionLangTitlePrefKey(mdLang.extLang), true)
private val mangadexService by lazy {
MangaDexService(client)
@@ -107,7 +109,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
FollowsHandler(mdLang.lang, mangadexAuthService)
}
private val mangaHandler by lazy {
MangaHandler(mdLang.lang, mangadexService, apiMangaParser, followsHandler)
MangaHandler(mdLang.lang, mangadexService, apiMangaParser)
}
private val similarHandler by lazy {
SimilarHandler(mdLang.lang, mangadexService, similarService)
@@ -192,11 +194,27 @@ class MangaDex(delegate: HttpSource, val context: Context) :
@Deprecated("Use the 1.x API instead", replaceWith = ReplaceWith("getMangaDetails"))
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
return mangaHandler.fetchMangaDetailsObservable(manga, id, coverQuality(), tryUsingFirstVolumeCover(), altTitlesInDesc())
return mangaHandler.fetchMangaDetailsObservable(
manga,
id,
coverQuality(),
tryUsingFirstVolumeCover(),
altTitlesInDesc(),
finalChapterInDesc(),
preferExtensionLangTitle(),
)
}
override suspend fun getMangaDetails(manga: SManga): SManga {
return mangaHandler.getMangaDetails(manga, id, coverQuality(), tryUsingFirstVolumeCover(), altTitlesInDesc())
return mangaHandler.getMangaDetails(
manga,
id,
coverQuality(),
tryUsingFirstVolumeCover(),
altTitlesInDesc(),
finalChapterInDesc(),
preferExtensionLangTitle(),
)
}
@Deprecated("Use the 1.x API instead", replaceWith = ReplaceWith("getChapterList"))
@@ -241,8 +259,21 @@ class MangaDex(delegate: HttpSource, val context: Context) :
override fun newMetaInstance() = MangaDexSearchMetadata()
override suspend fun parseIntoMetadata(metadata: MangaDexSearchMetadata, input: Triple<MangaDto, List<String>, StatisticsMangaDto>) {
apiMangaParser.parseIntoMetadata(metadata, input.first, input.second, input.third, null, coverQuality(), altTitlesInDesc())
override suspend fun parseIntoMetadata(
metadata: MangaDexSearchMetadata,
input: Triple<MangaDto, List<String>, StatisticsMangaDto>,
) {
apiMangaParser.parseIntoMetadata(
metadata,
input.first,
input.second,
input.third,
null,
coverQuality(),
altTitlesInDesc(),
finalChapterInDesc(),
preferExtensionLangTitle(),
)
}
// LoginSource methods
@@ -296,10 +327,6 @@ class MangaDex(delegate: HttpSource, val context: Context) :
return followsHandler.updateRating(track)
}
suspend fun getTrackingAndMangaInfo(track: Track): Pair<Track, MangaDexSearchMetadata?> {
return mangaHandler.getTrackingInfo(track)
}
// RandomMangaSource method
override suspend fun fetchRandomMangaUrl(): String {
return mangaHandler.fetchRandomMangaId()
@@ -313,51 +340,62 @@ class MangaDex(delegate: HttpSource, val context: Context) :
return similarHandler.getRelated(manga)
}
suspend fun getMangaMetadata(track: Track): SManga? {
return mangaHandler.getMangaMetadata(track, id, coverQuality(), tryUsingFirstVolumeCover(), altTitlesInDesc())
suspend fun getMangaMetadata(track: Track): SManga {
return mangaHandler.getMangaMetadata(
track,
id,
coverQuality(),
tryUsingFirstVolumeCover(),
altTitlesInDesc(),
finalChapterInDesc(),
preferExtensionLangTitle(),
)
}
companion object {
private const val dataSaverPref = "dataSaverV5"
fun getDataSaverPreferenceKey(dexLang: String): String {
return "${dataSaverPref}_$dexLang"
}
private const val standardHttpsPortPref = "usePort443"
fun getStandardHttpsPreferenceKey(dexLang: String): String {
return "${standardHttpsPortPref}_$dexLang"
}
private const val blockedGroupsPref = "blockedGroups"
fun getBlockedGroupsPrefKey(dexLang: String): String {
return "${blockedGroupsPref}_$dexLang"
}
private const val blockedUploaderPref = "blockedUploader"
fun getBlockedUploaderPrefKey(dexLang: String): String {
return "${blockedUploaderPref}_$dexLang"
}
private const val coverQualityPref = "thumbnailQuality"
fun getCoverQualityPrefKey(dexLang: String): String {
return "${coverQualityPref}_$dexLang"
}
private const val tryUsingFirstVolumeCover = "tryUsingFirstVolumeCover"
private const val tryUsingFirstVolumeCoverPref = "tryUsingFirstVolumeCover"
fun getTryUsingFirstVolumeCoverKey(dexLang: String): String {
return "${tryUsingFirstVolumeCover}_$dexLang"
return "${tryUsingFirstVolumeCoverPref}_$dexLang"
}
private const val altTitlesInDesc = "altTitlesInDesc"
private const val altTitlesInDescPref = "altTitlesInDesc"
fun getAltTitlesInDescKey(dexLang: String): String {
return "${altTitlesInDesc}_$dexLang"
return "${altTitlesInDescPref}_$dexLang"
}
private const val finalChapterInDescPref = "finalChapterInDesc"
fun getFinalChapterInDescPrefKey(dexLang: String): String {
return "${finalChapterInDescPref}_$dexLang"
}
private const val preferExtensionLangTitlePref = "preferExtensionLangTitle"
fun getPreferExtensionLangTitlePrefKey(dexLang: String): String {
return "${preferExtensionLangTitlePref}_$dexLang"
}
}
}