[skip ci] Merge pull request #1 from SamuelBMartins/bugfix/-100000

Do not show wrong chapter/volume number in UI
This commit is contained in:
ThePromidius
2024-04-14 14:32:44 +02:00
committed by GitHub
4 changed files with 49 additions and 58 deletions

View File

@@ -6,7 +6,7 @@ ext {
extName = 'Kavita'
pkgNameSuffix = 'all.kavita'
extClass = '.KavitaFactory'
extVersionCode = 14
extVersionCode = 15
}
dependencies {

View File

@@ -504,19 +504,11 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
val allChapterList = mutableListOf<SChapter>()
volumes.forEach { volume ->
run {
if (volume.number == 0) {
// Regular chapters
volume.chapters.map {
allChapterList.add(helper.chapterFromObject(it))
}
} else {
// Volume chapter
volume.chapters.map {
allChapterList.add(helper.chapterFromVolume(it, volume))
}
}
}
}
allChapterList.sortWith(KavitaHelper.CompareChapters)
return allChapterList

View File

@@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.extension.all.kavita
import eu.kanade.tachiyomi.extension.all.kavita.dto.ChapterDto
import eu.kanade.tachiyomi.extension.all.kavita.dto.ChapterType
import eu.kanade.tachiyomi.extension.all.kavita.dto.PaginationInfo
import eu.kanade.tachiyomi.extension.all.kavita.dto.SeriesDto
import eu.kanade.tachiyomi.extension.all.kavita.dto.VolumeDto
@@ -75,57 +76,32 @@ class KavitaHelper {
}
}
}
fun chapterFromObject(obj: ChapterDto): SChapter = SChapter.create().apply {
url = obj.id.toString()
name = if (obj.number == "0" && obj.isSpecial) {
// This is a special. Chapter name is special name
obj.range
} else {
val cleanedName = obj.title.replaceFirst("^0+(?!$)".toRegex(), "")
fun chapterFromVolume(chapter: ChapterDto, volume: VolumeDto): SChapter =
SChapter.create().apply {
val type = ChapterType.of(chapter, volume)
name = when (type) {
ChapterType.Regular -> "Volume ${volume.number} Chapter ${chapter.number}"
ChapterType.SingleFileVolume -> "Volume ${volume.number}"
ChapterType.Special -> chapter.range
ChapterType.LooseLeaf -> {
val cleanedName = chapter.title.replaceFirst("^0+(?!$)".toRegex(), "")
"Chapter $cleanedName"
}
date_upload = parseDate(obj.created)
chapter_number = obj.number.toFloat()
scanlator = "${obj.pages} pages"
}
fun chapterFromVolume(obj: ChapterDto, volume: VolumeDto): SChapter =
SChapter.create().apply {
// If there are multiple chapters to this volume, then prefix with Volume number
if (volume.chapters.isNotEmpty() && obj.number != "0") {
// This volume is not volume 0, hence they are not loose chapters
// We just add a nice Volume X to the chapter title
// Chapter-based Volume
name = "Volume ${volume.number} Chapter ${obj.number}"
chapter_number = obj.number.toFloat()
} else if (obj.number == "0") {
// Both specials and volume has chapter number 0
if (volume.number == 0) {
// Treat as special
// Special is not in a volume
if (obj.range == "") {
// Special does not have any Title
name = "Chapter 0"
chapter_number = obj.number.toFloat()
chapter_number = if (type == ChapterType.SingleFileVolume) {
volume.number.toFloat() / 10000
} else {
// We use it's own special tile
name = obj.range
chapter_number = obj.number.toFloat()
chapter.number.toFloat()
}
} else {
// Is a single-file volume
// We encode the chapter number to support tracking
name = "Volume ${volume.number}"
chapter_number = volume.number.toFloat() / 10000
}
} else {
name = "Unhandled Else Volume ${volume.number}"
}
url = obj.id.toString()
date_upload = parseDate(obj.created)
scanlator = "${obj.pages} pages"
url = chapter.id.toString()
date_upload = parseDate(chapter.created)
scanlator = "${chapter.pages} pages"
}
val intl = Intl(
language = Locale.getDefault().toString(),
baseLanguage = "en",

View File

@@ -88,6 +88,29 @@ data class VolumeDto(
val chapters: List<ChapterDto> = emptyList(),
)
enum class ChapterType {
Regular, // chapter with volume information
LooseLeaf, // chapter without volume information
SingleFileVolume,
Special,
;
companion object {
fun of(chapter: ChapterDto, volume: VolumeDto): ChapterType =
if (volume.number == 100_000) {
Special
} else if (volume.number == -100_000) {
LooseLeaf
} else {
if (chapter.number == "-100000") {
SingleFileVolume
} else {
Regular
}
}
}
}
@Serializable
data class ChapterDto(
val id: Int,