From bdfe0aeea564e1341322814b6dbd789ea2836c68 Mon Sep 17 00:00:00 2001 From: "Mio." Date: Sun, 13 Jul 2025 03:30:33 +0200 Subject: [PATCH] Safely handle null titleName --- .../extension/all/kavita/KavitaHelper.kt | 144 +++++++++--------- .../extension/all/kavita/dto/MangaDto.kt | 2 +- 2 files changed, 77 insertions(+), 69 deletions(-) diff --git a/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/KavitaHelper.kt b/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/KavitaHelper.kt index 569fa02a..631adbaf 100644 --- a/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/KavitaHelper.kt +++ b/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/KavitaHelper.kt @@ -81,77 +81,85 @@ class KavitaHelper { val chapterLabel = if (isWebtoon) "Episode" else "Chapter" val volumeLabel = if (isWebtoon) "Season" else "Volume" - name = when (type) { - ChapterType.Regular -> { - val chapterNum = formatChapterNumber(chapter) - when { - titleName.isNotBlank() && titleName.any { it.isLetter() } -> - "$chapterNum - ${cleanChapterTitle( - titleName, - ChapterTitleContext( - mangaTitle = mangaTitle, - chapterNumber = chapterNum, - volumeName = volume.name.ifBlank { title }, - ), - )}" - else -> - "$volumeLabel ${formatVolumeNumber(volume)} $chapterLabel $chapterNum" + if (titleName != null) { + name = when (type) { + ChapterType.Regular -> { + val chapterNum = formatChapterNumber(chapter) + when { + titleName.isNotBlank() && titleName.any { it.isLetter() } -> + "$chapterNum - ${cleanChapterTitle( + titleName, + ChapterTitleContext( + mangaTitle = mangaTitle, + chapterNumber = chapterNum, + volumeName = volume.name.ifBlank { title }, + ), + )}" + + else -> + "$volumeLabel ${formatVolumeNumber(volume)} $chapterLabel $chapterNum" + } } - } - ChapterType.SingleFileVolume -> { - cleanChapterTitle( - when { - volume.name.any { it.isLetter() } -> "v${volume.minNumber} - ${volume.name}" - else -> "Volume ${volume.minNumber}" - }, - ChapterTitleContext( - mangaTitle = mangaTitle, - volumeName = volume.name, - ), - ) - } - ChapterType.Special -> { - cleanChapterTitle( - when { - title.isNotBlank() -> title - range.isNotBlank() -> range - else -> "Special" - }, - ChapterTitleContext( - mangaTitle = mangaTitle, - volumeName = volume.name, - ), - ) - } - ChapterType.Chapter -> { - val chapterNum = formatChapterNumber(chapter) - when { - titleName.isNotBlank() && titleName.any { it.isLetter() } -> - "$chapterNum - ${cleanChapterTitle( - titleName, - ChapterTitleContext( - mangaTitle = mangaTitle, - chapterNumber = chapterNum, - volumeName = volume.name, - ), - )}" - else -> - "$chapterLabel $chapterNum" + + ChapterType.SingleFileVolume -> { + cleanChapterTitle( + when { + volume.name.any { it.isLetter() } -> "v${volume.minNumber} - ${volume.name}" + else -> "Volume ${volume.minNumber}" + }, + ChapterTitleContext( + mangaTitle = mangaTitle, + volumeName = volume.name, + ), + ) } - } - ChapterType.Issue -> { - val issueNum = chapter.number.toIntOrNull()?.toString()?.padStart(3, '0') ?: chapter.number - cleanChapterTitle( + + ChapterType.Special -> { + cleanChapterTitle( + when { + title.isNotBlank() -> title + range.isNotBlank() -> range + else -> "Special" + }, + ChapterTitleContext( + mangaTitle = mangaTitle, + volumeName = volume.name, + ), + ) + } + + ChapterType.Chapter -> { + val chapterNum = formatChapterNumber(chapter) when { - titleName.any { it.isLetter() } -> "$titleName (#$issueNum)" - else -> "Issue #$issueNum" - }, - ChapterTitleContext( - mangaTitle = mangaTitle, - chapterNumber = issueNum, - volumeName = volume.name, - ), - ) + titleName.isNotBlank() && titleName.any { it.isLetter() } -> + "$chapterNum - ${cleanChapterTitle( + titleName, + ChapterTitleContext( + mangaTitle = mangaTitle, + chapterNumber = chapterNum, + volumeName = volume.name, + ), + )}" + + else -> + "$chapterLabel $chapterNum" + } + } + + ChapterType.Issue -> { + val issueNum = chapter.number.toIntOrNull()?.toString()?.padStart(3, '0') ?: chapter.number + cleanChapterTitle( + when { + titleName.any { it.isLetter() } -> "$titleName (#$issueNum)" + else -> "Issue #$issueNum" + }, + ChapterTitleContext( + mangaTitle = mangaTitle, + chapterNumber = issueNum, + volumeName = volume.name, + ), + ) + } } } diff --git a/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/dto/MangaDto.kt b/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/dto/MangaDto.kt index 33223afd..e7c3160e 100644 --- a/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/dto/MangaDto.kt +++ b/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/dto/MangaDto.kt @@ -246,7 +246,7 @@ data class ChapterDto( val pages: Int, val isSpecial: Boolean, val title: String, - val titleName: String = "", + val titleName: String?, val pagesRead: Int, val coverImageLocked: Boolean, val coverImage: String,