|
@@ -15,19 +15,14 @@ import androidx.work.WorkQuery
|
|
|
import androidx.work.WorkerParameters
|
|
|
import androidx.work.workDataOf
|
|
|
import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource
|
|
|
-import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay
|
|
|
import eu.kanade.domain.manga.interactor.UpdateManga
|
|
|
import eu.kanade.domain.manga.model.copyFrom
|
|
|
import eu.kanade.domain.manga.model.toSManga
|
|
|
-import eu.kanade.domain.track.model.toDbTrack
|
|
|
-import eu.kanade.domain.track.model.toDomainTrack
|
|
|
+import eu.kanade.domain.track.interactor.RefreshTracks
|
|
|
import eu.kanade.tachiyomi.R
|
|
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
|
|
import eu.kanade.tachiyomi.data.download.DownloadManager
|
|
|
import eu.kanade.tachiyomi.data.notification.Notifications
|
|
|
-import eu.kanade.tachiyomi.data.track.EnhancedTrackService
|
|
|
-import eu.kanade.tachiyomi.data.track.TrackManager
|
|
|
-import eu.kanade.tachiyomi.data.track.TrackService
|
|
|
import eu.kanade.tachiyomi.source.UnmeteredSource
|
|
|
import eu.kanade.tachiyomi.source.model.SManga
|
|
|
import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
|
@@ -44,7 +39,6 @@ import kotlinx.coroutines.awaitAll
|
|
|
import kotlinx.coroutines.coroutineScope
|
|
|
import kotlinx.coroutines.ensureActive
|
|
|
import kotlinx.coroutines.runBlocking
|
|
|
-import kotlinx.coroutines.supervisorScope
|
|
|
import kotlinx.coroutines.sync.Semaphore
|
|
|
import kotlinx.coroutines.sync.withPermit
|
|
|
import logcat.LogPriority
|
|
@@ -53,7 +47,6 @@ import tachiyomi.core.util.lang.withIOContext
|
|
|
import tachiyomi.core.util.system.logcat
|
|
|
import tachiyomi.domain.category.interactor.GetCategories
|
|
|
import tachiyomi.domain.category.model.Category
|
|
|
-import tachiyomi.domain.chapter.interactor.GetChapterByMangaId
|
|
|
import tachiyomi.domain.chapter.model.Chapter
|
|
|
import tachiyomi.domain.chapter.model.NoChaptersException
|
|
|
import tachiyomi.domain.download.service.DownloadPreferences
|
|
@@ -73,8 +66,6 @@ import tachiyomi.domain.manga.model.Manga
|
|
|
import tachiyomi.domain.manga.model.toMangaUpdate
|
|
|
import tachiyomi.domain.source.model.SourceNotInstalledException
|
|
|
import tachiyomi.domain.source.service.SourceManager
|
|
|
-import tachiyomi.domain.track.interactor.GetTracks
|
|
|
-import tachiyomi.domain.track.interactor.InsertTrack
|
|
|
import uy.kohesive.injekt.Injekt
|
|
|
import uy.kohesive.injekt.api.get
|
|
|
import java.io.File
|
|
@@ -92,17 +83,13 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|
|
private val downloadPreferences: DownloadPreferences = Injekt.get()
|
|
|
private val libraryPreferences: LibraryPreferences = Injekt.get()
|
|
|
private val downloadManager: DownloadManager = Injekt.get()
|
|
|
- private val trackManager: TrackManager = Injekt.get()
|
|
|
private val coverCache: CoverCache = Injekt.get()
|
|
|
private val getLibraryManga: GetLibraryManga = Injekt.get()
|
|
|
private val getManga: GetManga = Injekt.get()
|
|
|
private val updateManga: UpdateManga = Injekt.get()
|
|
|
- private val getChapterByMangaId: GetChapterByMangaId = Injekt.get()
|
|
|
private val getCategories: GetCategories = Injekt.get()
|
|
|
private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get()
|
|
|
- private val getTracks: GetTracks = Injekt.get()
|
|
|
- private val insertTrack: InsertTrack = Injekt.get()
|
|
|
- private val syncChaptersWithTrackServiceTwoWay: SyncChaptersWithTrackServiceTwoWay = Injekt.get()
|
|
|
+ private val refreshTracks: RefreshTracks = Injekt.get()
|
|
|
private val setFetchInterval: SetFetchInterval = Injekt.get()
|
|
|
|
|
|
private val notifier = LibraryUpdateNotifier(context)
|
|
@@ -296,8 +283,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|
|
}
|
|
|
|
|
|
if (libraryPreferences.autoUpdateTrackers().get()) {
|
|
|
- val loggedServices = trackManager.services.filter { it.isLogged }
|
|
|
- updateTrackings(manga, loggedServices)
|
|
|
+ refreshTracks.await(manga.id)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -417,49 +403,19 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
|
|
private suspend fun updateTrackings() {
|
|
|
coroutineScope {
|
|
|
var progressCount = 0
|
|
|
- val loggedServices = trackManager.services.filter { it.isLogged }
|
|
|
|
|
|
mangaToUpdate.forEach { libraryManga ->
|
|
|
- val manga = libraryManga.manga
|
|
|
-
|
|
|
ensureActive()
|
|
|
|
|
|
+ val manga = libraryManga.manga
|
|
|
notifier.showProgressNotification(listOf(manga), progressCount++, mangaToUpdate.size)
|
|
|
-
|
|
|
- // Update the tracking details.
|
|
|
- updateTrackings(manga, loggedServices)
|
|
|
+ refreshTracks.await(manga.id)
|
|
|
}
|
|
|
|
|
|
notifier.cancelProgressNotification()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private suspend fun updateTrackings(manga: Manga, loggedServices: List<TrackService>) {
|
|
|
- getTracks.await(manga.id)
|
|
|
- .map { track ->
|
|
|
- supervisorScope {
|
|
|
- async {
|
|
|
- val service = trackManager.getService(track.syncId)
|
|
|
- if (service != null && service in loggedServices) {
|
|
|
- try {
|
|
|
- val updatedTrack = service.refresh(track.toDbTrack())
|
|
|
- insertTrack.await(updatedTrack.toDomainTrack()!!)
|
|
|
-
|
|
|
- if (service is EnhancedTrackService) {
|
|
|
- val chapters = getChapterByMangaId.await(manga.id)
|
|
|
- syncChaptersWithTrackServiceTwoWay.await(chapters, track, service)
|
|
|
- }
|
|
|
- } catch (e: Throwable) {
|
|
|
- // Ignore errors and continue
|
|
|
- logcat(LogPriority.ERROR, e)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- .awaitAll()
|
|
|
- }
|
|
|
-
|
|
|
private suspend fun withUpdateNotification(
|
|
|
updatingManga: CopyOnWriteArrayList<Manga>,
|
|
|
completed: AtomicInteger,
|