diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt index ac5cf5ce75..6c0d9754ad 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt @@ -435,12 +435,13 @@ class ReaderViewModel( currentPage = page.index + 1, ) } - selectedChapter.chapter.last_page_read = page.index - val shouldTrack = !incognitoMode || hasTrackers - if (selectedChapter.pages?.lastIndex == page.index && shouldTrack) { - selectedChapter.chapter.read = true - updateTrackChapterRead(selectedChapter) - deleteChapterIfNeeded(selectedChapter) + if (!incognitoMode) { + selectedChapter.chapter.last_page_read = page.index + if (selectedChapter.pages?.lastIndex == page.index) { + selectedChapter.chapter.read = true + updateTrackChapterRead(selectedChapter) + deleteChapterIfNeeded(selectedChapter) + } } if (selectedChapter != currentChapters.currChapter) { @@ -505,16 +506,17 @@ class ReaderViewModel( * @param currentChapter current chapter, which is going to be marked as read. */ private fun deleteChapterIfNeeded(currentChapter: ReaderChapter) { + val removeAfterReadSlots = downloadPreferences.removeAfterReadSlots().get() + if (removeAfterReadSlots == -1) return + // Determine which chapter should be deleted and enqueue val currentChapterPosition = chapterList.indexOf(currentChapter) - val removeAfterReadSlots = downloadPreferences.removeAfterReadSlots().get() val chapterToDelete = chapterList.getOrNull(currentChapterPosition - removeAfterReadSlots) - // If chapter is completely read no need to download it + // If chapter is completely read, no need to download it chapterToDownload = null - // Check if deleting option is enabled and chapter exists - if (removeAfterReadSlots != -1 && chapterToDelete != null) { + if (chapterToDelete != null) { enqueueDeleteReadChapters(chapterToDelete) } } @@ -534,22 +536,22 @@ class ReaderViewModel( } /** - * Saves this [readerChapter] progress (last read page and whether it's read). - * If incognito mode isn't on or has at least 1 tracker + * Saves this [readerChapter] progress (last read page and whether it's read) + * if incognito mode isn't on. */ private suspend fun saveChapterProgress(readerChapter: ReaderChapter) { - if (!incognitoMode || hasTrackers) { - val chapter = readerChapter.chapter - getCurrentChapter()?.requestedPage = chapter.last_page_read - updateChapter.await( - ChapterUpdate( - id = chapter.id!!, - read = chapter.read, - bookmark = chapter.bookmark, - lastPageRead = chapter.last_page_read.toLong(), - ), - ) - } + if (incognitoMode) return + + val chapter = readerChapter.chapter + getCurrentChapter()?.requestedPage = chapter.last_page_read + updateChapter.await( + ChapterUpdate( + id = chapter.id!!, + read = chapter.read, + bookmark = chapter.bookmark, + lastPageRead = chapter.last_page_read.toLong(), + ), + ) } /** @@ -713,7 +715,7 @@ class ReaderViewModel( val chapter = page.chapter.chapter val filenameSuffix = " - ${page.number}" return DiskUtil.buildValidFilename( - "${manga.title} - ${chapter.name}".takeBytes(MAX_FILE_NAME_BYTES - filenameSuffix.byteSize()), + "${manga.title} - ${chapter.name}".takeBytes(DiskUtil.MAX_FILE_NAME_BYTES - filenameSuffix.byteSize()), ) + filenameSuffix } @@ -831,7 +833,7 @@ class ReaderViewModel( * will run in a background thread and errors are ignored. */ private fun updateTrackChapterRead(readerChapter: ReaderChapter) { - if (basePreferences.incognitoMode().get()) return + if (incognitoMode || !hasTrackers) return if (!trackPreferences.autoUpdateTrack().get()) return val manga = manga ?: return @@ -918,9 +920,4 @@ class ReaderViewModel( data class SavedImage(val result: SaveImageResult) : Event() data class ShareImage(val uri: Uri, val page: ReaderPage) : Event() } - - companion object { - // Safe theoretical max filename size is 255 bytes and 1 char = 2-4 bytes (UTF-8) - private const val MAX_FILE_NAME_BYTES = 250 - } } diff --git a/core/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt b/core/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt index 8e3141a277..acddaf0bd0 100644 --- a/core/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt @@ -114,4 +114,7 @@ object DiskUtil { } const val NOMEDIA_FILE = ".nomedia" + + // Safe theoretical max filename size is 255 bytes and 1 char = 2-4 bytes (UTF-8) + const val MAX_FILE_NAME_BYTES = 250 }