diff --git a/src/all/kavita/assets/i18n/messages_en.properties b/src/all/kavita/assets/i18n/messages_en.properties index b6072d80..ec7fbd8b 100644 --- a/src/all/kavita/assets/i18n/messages_en.properties +++ b/src/all/kavita/assets/i18n/messages_en.properties @@ -8,7 +8,7 @@ pref_group_tags_summary_on=Will prefix tags with their type pref_group_tags_summary_off=List all tags together pref_last_volume_cover_title=Keep cover updated pref_last_volume_cover_summary_off=Keep current cover -pref_last_volume_cover_summary_on=Update cover to current Volume/Issue +pref_last_volume_cover_summary_on=Always show current Volume/Issue cover on refresh pref_show_epub_title=Show EPUB (EPUB can't be read in Mihon) pref_show_epub_summary_off=Hide EPUB titles in browsing pref_show_epub_summary_on=Show EPUB titles in browsing diff --git a/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/Kavita.kt b/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/Kavita.kt index 27ae0404..8590de6f 100644 --- a/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/Kavita.kt +++ b/src/all/kavita/src/eu/kanade/tachiyomi/extension/all/kavita/Kavita.kt @@ -162,8 +162,6 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou // Fallback - use original URL if we don't recognize the pattern else -> manga.url - }.also { url -> -// Log.d(LOG_TAG, "Generated webview URL: $url (tracking URL: ${manga.url})") } } @@ -180,11 +178,10 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou return client.newCall(request) .asObservableSuccess() .onErrorResumeNext { throwable -> - // Get Http code val field = throwable.javaClass.getDeclaredField("code") - field.isAccessible = true // Make the field accessible + field.isAccessible = true try { - var code = field.get(throwable) // Get the value of the code property + var code = field.get(throwable) Log.e(LOG_TAG, "Error fetching manga: ${throwable.message}", throwable) if (code as Int !in intArrayOf(401, 201, 500)) { code = 500 @@ -351,13 +348,13 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou name = buildString { append("${item.order + 1}. ") when { - !item.chapterTitleName.isNullOrBlank() && !item.chapterTitleName.matches(Regex("^\\d+\$")) -> { + !item.chapterTitleName.isNullOrBlank() && !item.chapterTitleName.matches(Regex("^\\d+$")) -> { append(item.chapterTitleName) } - !item.volumeNumber.isNullOrBlank() && item.volumeNumber != "-100000" -> { + !item.volumeNumber.isNullOrBlank() && item.volumeNumber != UNNUMBERED_VOLUME_STR -> { append("Volume ${item.volumeNumber.padStart(2, '0')}") } - !item.chapterNumber.isNullOrBlank() && item.chapterNumber != "-100000" -> { + !item.chapterNumber.isNullOrBlank() && item.chapterNumber != UNNUMBERED_VOLUME_STR -> { val libraryType = getLibraryType(item.seriesId) when (libraryType) { LibraryTypeEnum.Comic, LibraryTypeEnum.ComicVine -> @@ -905,7 +902,6 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou } } else { manga.apply { -// description = helper.intl["error_reading_list_not_found"] initialized = true } } @@ -1024,21 +1020,17 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou val coverCandidates = mutableListOf>() for (volume in volumes) { - if (isComicLibrary && volume.number == -100000) { - // Issue: use chapter covers - for (chapter in volume.chapters) { - if (!chapter.coverImage.isNullOrBlank()) { - val isUnread = chapter.pagesRead < chapter.pages - val sortKey = chapter.number.toFloatOrNull() ?: 0f - coverCandidates.add( - Triple( - "$apiUrl/Image/chapter-cover?chapterId=${chapter.id}&apiKey=$apiKey", - isUnread, - sortKey, - ), + // Issue: use chapter covers + if (isComicLibrary && volume.number == UNNUMBERED_VOLUME) { + coverCandidates += volume.chapters + .filterNot { it.coverImage.isNullOrBlank() } + .map { chapter -> + Triple( + "$apiUrl/Image/chapter-cover?chapterId=${chapter.id}&apiKey=$apiKey", + chapter.pagesRead < chapter.pages, + chapter.number.toFloatOrNull() ?: 0f, ) } - } } else if (!isComicLibrary) { // Manga: use volume cover if it has a SingleFileVolume chapter val hasSingleFile = volume.chapters.any { chapter -> @@ -1250,24 +1242,6 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou } } -// override fun chapterListParse(response: Response): List { -// try { -// val volumes = response.parseAs>() -// val allChapterList = mutableListOf() -// volumes.forEach { volume -> -// // Add all chapters from each volume as individual SChapter -// volume.chapters.forEach { chapter -> -// allChapterList.add(helper.chapterFromVolume(chapter, volume)) -// } -// } -// allChapterList.sortWith(KavitaHelper.CompareChapters) -// return allChapterList -// } catch (e: Exception) { -// Log.e(LOG_TAG, "Unhandled exception parsing chapters. Send logs to kavita devs", e) -// throw IOException(helper.intl["version_exceptions_chapters_parse"]) -// } -// } - override fun chapterListParse(response: Response): List { try { val seriesId = response.request.url.queryParameter("seriesId")?.toIntOrNull() @@ -1872,6 +1846,9 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou } companion object { + private const val UNNUMBERED_VOLUME = -100000 + private const val UNNUMBERED_VOLUME_STR = "-100000" + private const val ADDRESS_TITLE = "Address" private val JSON_MEDIA_TYPE = "application/json; charset=utf-8".toMediaTypeOrNull() 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 e8b83ae0..16002cf1 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 @@ -136,7 +136,7 @@ class KavitaHelper { } catch (e: NumberFormatException) { 0f } - -volumeNum - 100000f + -volumeNum - VOLUME_NUMBER_OFFSET } } @@ -174,4 +174,8 @@ class KavitaHelper { } }, ) + + companion object { + private const val VOLUME_NUMBER_OFFSET = 100000f + } }