|
@@ -84,6 +84,7 @@ data class TrackInfoDialogHomeScreen(
|
|
|
private val mangaTitle: String,
|
|
|
private val sourceId: Long,
|
|
|
) : Screen {
|
|
|
+
|
|
|
@Composable
|
|
|
override fun Content() {
|
|
|
val navigator = LocalNavigator.currentOrThrow
|
|
@@ -174,27 +175,8 @@ data class TrackInfoDialogHomeScreen(
|
|
|
) : StateScreenModel<Model.State>(State()) {
|
|
|
|
|
|
init {
|
|
|
- // Refresh data
|
|
|
coroutineScope.launch {
|
|
|
- try {
|
|
|
- val trackItems = getTracks.await(mangaId).mapToTrackItem()
|
|
|
- val insertTrack = Injekt.get<InsertTrack>()
|
|
|
- val getMangaWithChapters = Injekt.get<GetMangaWithChapters>()
|
|
|
- val syncTwoWayService = Injekt.get<SyncChaptersWithTrackServiceTwoWay>()
|
|
|
- trackItems.forEach {
|
|
|
- val track = it.track ?: return@forEach
|
|
|
- val domainTrack = it.service.refresh(track).toDomainTrack() ?: return@forEach
|
|
|
- insertTrack.await(domainTrack)
|
|
|
-
|
|
|
- if (it.service is EnhancedTrackService) {
|
|
|
- val allChapters = getMangaWithChapters.awaitChapters(mangaId)
|
|
|
- syncTwoWayService.await(allChapters, domainTrack, it.service)
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (e: Exception) {
|
|
|
- logcat(LogPriority.ERROR, e) { "Failed to refresh track data mangaId=$mangaId" }
|
|
|
- withUIContext { Injekt.get<Application>().toast(e.message) }
|
|
|
- }
|
|
|
+ refreshTrackers()
|
|
|
}
|
|
|
|
|
|
coroutineScope.launch {
|
|
@@ -223,6 +205,46 @@ data class TrackInfoDialogHomeScreen(
|
|
|
coroutineScope.launchNonCancellable { deleteTrack.await(mangaId, serviceId) }
|
|
|
}
|
|
|
|
|
|
+ private suspend fun refreshTrackers() {
|
|
|
+ val insertTrack = Injekt.get<InsertTrack>()
|
|
|
+ val getMangaWithChapters = Injekt.get<GetMangaWithChapters>()
|
|
|
+ val syncTwoWayService = Injekt.get<SyncChaptersWithTrackServiceTwoWay>()
|
|
|
+ val context = Injekt.get<Application>()
|
|
|
+
|
|
|
+ try {
|
|
|
+ val trackItems = getTracks.await(mangaId).mapToTrackItem()
|
|
|
+ for (trackItem in trackItems) {
|
|
|
+ try {
|
|
|
+ val track = trackItem.track ?: continue
|
|
|
+ val domainTrack = trackItem.service.refresh(track).toDomainTrack() ?: continue
|
|
|
+ insertTrack.await(domainTrack)
|
|
|
+
|
|
|
+ if (trackItem.service is EnhancedTrackService) {
|
|
|
+ val allChapters = getMangaWithChapters.awaitChapters(mangaId)
|
|
|
+ syncTwoWayService.await(allChapters, domainTrack, trackItem.service)
|
|
|
+ }
|
|
|
+ } catch (e: Exception) {
|
|
|
+ logcat(
|
|
|
+ LogPriority.ERROR,
|
|
|
+ e,
|
|
|
+ ) { "Failed to refresh track data mangaId=$mangaId for service ${trackItem.service.id}" }
|
|
|
+ withUIContext {
|
|
|
+ context.toast(
|
|
|
+ context.getString(
|
|
|
+ R.string.track_error,
|
|
|
+ context.getString(trackItem.service.nameRes()),
|
|
|
+ e.message,
|
|
|
+ ),
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (e: Exception) {
|
|
|
+ logcat(LogPriority.ERROR, e) { "Failed to refresh track data mangaId=$mangaId" }
|
|
|
+ withUIContext { context.toast(e.message) }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private fun List<eu.kanade.domain.track.model.Track>.mapToTrackItem(): List<TrackItem> {
|
|
|
val dbTracks = map { it.toDbTrack() }
|
|
|
val loggedServices = Injekt.get<TrackManager>().services.filter { it.isLogged }
|