diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/Track.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/Track.kt index fb791a42..01d463d9 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/Track.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/Track.kt @@ -158,7 +158,7 @@ object Track { var lastChapterRead: Double? = null var startDate: Long? = null - if (chapterNumber != null && chapterNumber > 0) { + if (chapterNumber != null && chapterNumber > 0 && chapterNumber > track.last_chapter_read) { lastChapterRead = chapterNumber.toDouble() } if (track.started_reading_date <= 0) { @@ -253,10 +253,11 @@ object Track { private suspend fun trackChapter(mangaId: Int) { val chapter = queryMaxReadChapter(mangaId) val chapterNumber = chapter?.get(ChapterTable.chapter_number) + logger.debug { - "[Tracker]mangaId $mangaId chapter:${chapter?.get(ChapterTable.name)} " + - "chapterNumber:$chapterNumber" + "trackChapter(mangaId= $mangaId): maxReadChapter= #$chapterNumber ${chapter?.get(ChapterTable.name)}" } + if (chapterNumber != null && chapterNumber > 0) { trackChapter(mangaId, chapterNumber.toDouble()) } @@ -282,17 +283,21 @@ object Track { } records.forEach { - val tracker = TrackerManager.getTracker(it[TrackRecordTable.trackerId]) - val lastChapterRead = it[TrackRecordTable.lastChapterRead] - val isLogin = tracker?.isLoggedIn == true + val tracker = TrackerManager.getTracker(it[TrackRecordTable.trackerId]) ?: return@forEach + + val track = it.toTrack() + tracker.refresh(track) + upsertTrackRecord(track) + + val lastChapterRead = track.last_chapter_read + logger.debug { - "[Tracker]trackChapter id:${tracker?.id} login:$isLogin " + - "mangaId:$mangaId dbChapter:$lastChapterRead toChapter:$chapterNumber" + "trackChapter(mangaId= $mangaId, chapterNumber= $chapterNumber): tracker= $tracker, remoteLastReadChapter= $lastChapterRead" } - if (isLogin && chapterNumber > lastChapterRead) { - it[TrackRecordTable.lastChapterRead] = chapterNumber - val track = it.toTrack() - tracker?.update(track, true) + + if (tracker.isLoggedIn && chapterNumber > lastChapterRead) { + track.last_chapter_read = chapterNumber.toFloat() + tracker.update(track, true) upsertTrackRecord(track) } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/tracker/Tracker.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/tracker/Tracker.kt index 433af5b8..3cbc733f 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/tracker/Tracker.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/tracker/Tracker.kt @@ -17,6 +17,8 @@ abstract class Tracker(val id: Int, val name: String) { // Application and remote support for reading dates open val supportsReadingDates: Boolean = false + override fun toString() = "$name ($id) (isLoggedIn= $isLoggedIn, isAuthExpired= ${getIfAuthExpired()})" + abstract fun getLogo(): String abstract fun getStatusList(): List