Fix: Messed up trackers progress update always auto sync (#794)
This commit is contained in:
parent
ee5b3d0d92
commit
edc0bd34ff
4 changed files with 41 additions and 15 deletions
|
|
@ -3,6 +3,7 @@ package eu.kanade.domain.track.interactor
|
|||
import android.app.Application
|
||||
import eu.kanade.domain.track.model.toDbTrack
|
||||
import eu.kanade.domain.track.model.toDomainTrack
|
||||
import eu.kanade.tachiyomi.data.track.EnhancedTracker
|
||||
import eu.kanade.tachiyomi.data.track.Tracker
|
||||
import eu.kanade.tachiyomi.data.track.TrackerManager
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
|
|
@ -26,10 +27,16 @@ class RefreshTracks(
|
|||
|
||||
/**
|
||||
* Fetches updated tracking data from all logged in trackers.
|
||||
* Also sync chapter progress with the [EnhancedTracker] or all trackers based on [enhancedTrackersOnly].
|
||||
*
|
||||
* @return Failed updates.
|
||||
*/
|
||||
suspend fun await(mangaId: Long): List<Pair<Tracker?, Throwable>> {
|
||||
suspend fun await(
|
||||
mangaId: Long,
|
||||
// KMK -->
|
||||
enhancedTrackersOnly: Boolean = true,
|
||||
// KMK <--
|
||||
): List<Pair<Tracker?, Throwable>> {
|
||||
return supervisorScope {
|
||||
return@supervisorScope getTracks.await(mangaId)
|
||||
.map { it to trackerManager.get(it.trackerId) }
|
||||
|
|
@ -39,7 +46,13 @@ class RefreshTracks(
|
|||
return@async try {
|
||||
val updatedTrack = service!!.refresh(track.toDbTrack()).toDomainTrack()!!
|
||||
insertTrack.await(updatedTrack)
|
||||
syncChapterProgressWithTrack.await(mangaId, updatedTrack, service)
|
||||
// KMK -->
|
||||
if (!enhancedTrackersOnly) {
|
||||
syncChapterProgressWithTrack.sync(mangaId, updatedTrack, service)
|
||||
} else {
|
||||
// KMK <--
|
||||
syncChapterProgressWithTrack.await(mangaId, updatedTrack, service)
|
||||
}
|
||||
// KMK -->
|
||||
?.let {
|
||||
val context = Injekt.get<Application>()
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package eu.kanade.domain.track.interactor
|
||||
|
||||
import eu.kanade.domain.track.model.toDbTrack
|
||||
import eu.kanade.domain.track.service.TrackPreferences
|
||||
import eu.kanade.tachiyomi.data.track.EnhancedTracker
|
||||
import eu.kanade.tachiyomi.data.track.Tracker
|
||||
import logcat.LogPriority
|
||||
import tachiyomi.core.common.util.system.logcat
|
||||
|
|
@ -10,8 +10,6 @@ import tachiyomi.domain.chapter.interactor.UpdateChapter
|
|||
import tachiyomi.domain.chapter.model.toChapterUpdate
|
||||
import tachiyomi.domain.track.interactor.InsertTrack
|
||||
import tachiyomi.domain.track.model.Track
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import kotlin.math.max
|
||||
|
||||
class SyncChapterProgressWithTrack(
|
||||
|
|
@ -19,19 +17,30 @@ class SyncChapterProgressWithTrack(
|
|||
private val insertTrack: InsertTrack,
|
||||
private val getChaptersByMangaId: GetChaptersByMangaId,
|
||||
) {
|
||||
val trackPreferences: TrackPreferences = Injekt.get()
|
||||
|
||||
/**
|
||||
* Sync chapter progress with the [EnhancedTracker]
|
||||
*/
|
||||
suspend fun await(
|
||||
mangaId: Long,
|
||||
remoteTrack: Track,
|
||||
tracker: Tracker,
|
||||
): Int? {
|
||||
// KKM -->
|
||||
// if (tracker !is EnhancedTracker) {
|
||||
// return
|
||||
// }
|
||||
// <-- KKM
|
||||
if (tracker !is EnhancedTracker) {
|
||||
return null
|
||||
}
|
||||
// KMK -->
|
||||
return sync(mangaId, remoteTrack, tracker)
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync chapter progress with the all trackers.
|
||||
*/
|
||||
suspend fun sync(
|
||||
mangaId: Long,
|
||||
remoteTrack: Track,
|
||||
tracker: Tracker,
|
||||
): Int? {
|
||||
// KMK <--
|
||||
// Current chapters in database, sort by source's order because database's order is a mess
|
||||
val dbChapters = getChaptersByMangaId.await(mangaId)
|
||||
// KMK -->
|
||||
|
|
@ -78,7 +87,6 @@ class SyncChapterProgressWithTrack(
|
|||
// KMK -->
|
||||
// Always update local chapters following Tracker even past chapters
|
||||
if (chapterUpdates.isNotEmpty() &&
|
||||
trackPreferences.autoSyncProgressFromTrackers().get() &&
|
||||
!tracker.hasNotStartedReading(remoteTrack.status)
|
||||
) {
|
||||
updateChapter.awaitAll(chapterUpdates)
|
||||
|
|
|
|||
|
|
@ -23,6 +23,11 @@ class TrackChapter(
|
|||
private val delayedTrackingStore: DelayedTrackingStore,
|
||||
) {
|
||||
|
||||
/**
|
||||
* Fetches updated tracking data from all logged in trackers.
|
||||
* Then update chapter progress to all trackers.
|
||||
* This does not update local chapters' read status.
|
||||
*/
|
||||
suspend fun await(context: Context, mangaId: Long, chapterNumber: Double, setupJobOnFailure: Boolean = true) {
|
||||
withNonCancellableContext {
|
||||
val tracks = getTracks.await(mangaId)
|
||||
|
|
|
|||
|
|
@ -176,6 +176,7 @@ class MangaScreenModel(
|
|||
private val uiPreferences: UiPreferences = Injekt.get(),
|
||||
// KMK -->
|
||||
private val sourcePreferences: SourcePreferences = Injekt.get(),
|
||||
private val refreshTracks: RefreshTracks = Injekt.get(),
|
||||
// KMK <--
|
||||
private val trackerManager: TrackerManager = Injekt.get(),
|
||||
private val trackChapter: TrackChapter = Injekt.get(),
|
||||
|
|
@ -562,8 +563,7 @@ class MangaScreenModel(
|
|||
private suspend fun syncTrackers() {
|
||||
if (!trackPreferences.autoSyncProgressFromTrackers().get()) return
|
||||
|
||||
val refreshTracks = Injekt.get<RefreshTracks>()
|
||||
refreshTracks.await(mangaId)
|
||||
refreshTracks.await(mangaId, enhancedTrackersOnly = false)
|
||||
.filter { it.first != null }
|
||||
.forEach { (track, e) ->
|
||||
logcat(LogPriority.ERROR, e) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue