diff --git a/app/src/main/java/eu/kanade/domain/track/interactor/AddTracks.kt b/app/src/main/java/eu/kanade/domain/track/interactor/AddTracks.kt index a5b6a0e1c0..8d5435aae5 100644 --- a/app/src/main/java/eu/kanade/domain/track/interactor/AddTracks.kt +++ b/app/src/main/java/eu/kanade/domain/track/interactor/AddTracks.kt @@ -1,5 +1,6 @@ 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.database.models.Track @@ -8,26 +9,29 @@ import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.util.lang.convertEpochMillisZone +import eu.kanade.tachiyomi.util.system.toast import logcat.LogPriority +import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.lang.withNonCancellableContext +import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId import tachiyomi.domain.history.interactor.GetHistory import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.track.interactor.InsertTrack +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.ZoneOffset class AddTracks( private val insertTrack: InsertTrack, - private val syncChapterProgressWithTrack: SyncChapterProgressWithTrack, + private val refreshTracks: RefreshTracks, private val getChaptersByMangaId: GetChaptersByMangaId, private val trackerManager: TrackerManager, ) { - // TODO: update all trackers based on common data suspend fun bind(tracker: Tracker, item: Track, mangaId: Long) = withNonCancellableContext { withIOContext { val allChapters = getChaptersByMangaId.await(mangaId) @@ -73,7 +77,23 @@ class AddTracks( } } - syncChapterProgressWithTrack.await(mangaId, track, tracker) + val context = Injekt.get() + refreshTracks.await(mangaId) + .filter { it.first != null } + .forEach { (track, e) -> + logcat(LogPriority.ERROR, e) { + "Failed to refresh track data mangaId=$mangaId for service ${track!!.id}" + } + withUIContext { + context.toast( + context.stringResource( + MR.strings.track_error, + track!!.name, + e.message ?: "", + ), + ) + } + } } } @@ -88,12 +108,6 @@ class AddTracks( track.manga_id = manga.id (service as Tracker).bind(track) insertTrack.await(track.toDomainTrack(idRequired = false)!!) - - syncChapterProgressWithTrack.await( - manga.id, - track.toDomainTrack(idRequired = false)!!, - service, - ) } } catch (e: Exception) { logcat( @@ -102,6 +116,24 @@ class AddTracks( ) { "Could not match manga: ${manga.title} with service $service" } } } + + val context = Injekt.get() + refreshTracks.await(manga.id) + .filter { it.first != null } + .forEach { (track, e) -> + logcat(LogPriority.ERROR, e) { + "Failed to refresh track data mangaId=${manga.id} for service ${track!!.id}" + } + withUIContext { + context.toast( + context.stringResource( + MR.strings.track_error, + track!!.name, + e.message ?: "", + ), + ) + } + } } } }