Implement Completed and Cancelled statuses (#7671)
* add checks to the uploaded chapters in order to determine if the (publication) completed manga has been fully scanlated * consolidate case entries * Add language to aggregate call
This commit is contained in:
parent
6991d96d59
commit
16ffd5f695
src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex
@ -5,6 +5,7 @@ import android.content.SharedPreferences
|
||||
import android.util.Log
|
||||
import androidx.preference.PreferenceScreen
|
||||
import androidx.preference.SwitchPreferenceCompat
|
||||
import eu.kanade.tachiyomi.extension.all.mangadex.dto.AggregateDto
|
||||
import eu.kanade.tachiyomi.extension.all.mangadex.dto.ChapterDto
|
||||
import eu.kanade.tachiyomi.extension.all.mangadex.dto.ChapterListDto
|
||||
import eu.kanade.tachiyomi.extension.all.mangadex.dto.MangaDto
|
||||
@ -183,7 +184,22 @@ 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())
|
||||
return helper.createManga(manga, lang.substringBefore("-"))
|
||||
val shortLang = lang.substringBefore("-")
|
||||
return helper.createManga(manga, fetchSimpleChapterList(manga, shortLang), shortLang)
|
||||
}
|
||||
|
||||
/**
|
||||
* get a quick-n-dirty list of the chapters to be used in determining the manga status.
|
||||
* uses the 'aggregate' endpoint
|
||||
* @see MangaDexHelper.getPublicationStatus
|
||||
* @see MangaDexHelper.doubleCheckChapters
|
||||
* @see AggregateDto
|
||||
*/
|
||||
private fun fetchSimpleChapterList(manga: MangaDto, langCode: String): List<String> {
|
||||
val url = "${MDConstants.apiMangaUrl}/${manga.data.id}/aggregate?translatedLanguage[]=${langCode}"
|
||||
val response = client.newCall(GET(url, headers)).execute()
|
||||
val chapters = helper.json.decodeFromString<AggregateDto>(response.body!!.string())
|
||||
return chapters.volumes.values.flatMap { it.chapters.values }.map { it.chapter }
|
||||
}
|
||||
|
||||
// Chapter list section
|
||||
|
@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.extension.all.mangadex
|
||||
import android.util.Log
|
||||
import eu.kanade.tachiyomi.extension.all.mangadex.dto.AtHomeDto
|
||||
import eu.kanade.tachiyomi.extension.all.mangadex.dto.ChapterDto
|
||||
import eu.kanade.tachiyomi.extension.all.mangadex.dto.MangaAttributesDto
|
||||
import eu.kanade.tachiyomi.extension.all.mangadex.dto.MangaDto
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
@ -69,18 +70,30 @@ class MangaDexHelper() {
|
||||
return Parser.unescapeEntities(intermediate, false)
|
||||
}
|
||||
|
||||
/**Maps dex status to tachi status
|
||||
* abandoned and completed statuses's need addition checks with chapter info if we are to be accurate
|
||||
/**
|
||||
* Maps dex status to tachi status
|
||||
*/
|
||||
fun getPublicationStatus(dexStatus: String?): Int {
|
||||
return when (dexStatus) {
|
||||
fun getPublicationStatus(attr: MangaAttributesDto, chapters: List<String>): Int {
|
||||
return when (attr.status) {
|
||||
null -> SManga.UNKNOWN
|
||||
"ongoing" -> SManga.ONGOING
|
||||
"completed", "cancelled" -> doubleCheckChapters(attr, chapters)
|
||||
"hiatus" -> SManga.ONGOING
|
||||
else -> SManga.UNKNOWN
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* if the manga is 'completed' or 'cancelled' then it'll have a lastChapter in the manga obj.
|
||||
* if the simple list of chapters contains that lastChapter, then we can consider it completed.
|
||||
*/
|
||||
private fun doubleCheckChapters(attr: MangaAttributesDto, chapters: List<String>): Int {
|
||||
return if (chapters.contains(attr.lastChapter))
|
||||
SManga.COMPLETED
|
||||
else
|
||||
SManga.UNKNOWN
|
||||
}
|
||||
|
||||
fun parseDate(dateAsString: String): Long =
|
||||
MDConstants.dateFormatter.parse(dateAsString)?.time ?: 0
|
||||
|
||||
@ -145,7 +158,7 @@ class MangaDexHelper() {
|
||||
/**
|
||||
* Create an SManga from json element with all details
|
||||
*/
|
||||
fun createManga(mangaDto: MangaDto, lang: String): SManga {
|
||||
fun createManga(mangaDto: MangaDto, chapters: List<String>, lang: String): SManga {
|
||||
try {
|
||||
val data = mangaDto.data
|
||||
val attr = data.attributes
|
||||
@ -197,7 +210,7 @@ class MangaDexHelper() {
|
||||
description = cleanString(attr.description[lang] ?: attr.description["en"] ?: "")
|
||||
author = authors.joinToString(", ")
|
||||
artist = artists.joinToString(", ")
|
||||
status = getPublicationStatus(attr.status)
|
||||
status = getPublicationStatus(attr, chapters)
|
||||
genre = genreList.joinToString(", ")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
|
@ -0,0 +1,22 @@
|
||||
package eu.kanade.tachiyomi.extension.all.mangadex.dto
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class AggregateDto(
|
||||
val result: String,
|
||||
val volumes: Map<String, AggregateVolume>
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class AggregateVolume(
|
||||
val volume: String,
|
||||
val count: String,
|
||||
val chapters: Map<String, AggregateChapter>
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class AggregateChapter(
|
||||
val chapter: String,
|
||||
val count: String
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user