diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt index 9850ba52..092cef83 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt @@ -30,6 +30,15 @@ constructor( withContext(dbDispatcher) { savedPostQueries.insertOrReplacePost(post) } } + suspend fun savePosts(posts: List) { + Napier.d(tag = TAG) { "Saving posts: ${posts.joinToString(",") { it.shortId }}" } + withContext(dbDispatcher) { + savedPostQueries.transaction { + posts.forEach { post -> savedPostQueries.insertOrReplacePost(post) } + } + } + } + suspend fun removePost(post: SavedPost) { Napier.d(tag = TAG) { "Removing post: ${post.shortId}" } withContext(dbDispatcher) { savedPostQueries.deletePost(post.shortId) } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/work/SavedPostUpdaterWorker.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/work/SavedPostUpdaterWorker.kt index e1af0609..b88fa7f1 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/work/SavedPostUpdaterWorker.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/work/SavedPostUpdaterWorker.kt @@ -12,15 +12,13 @@ import androidx.work.WorkerParameters import com.deliveryhero.whetstone.ForScope import com.deliveryhero.whetstone.worker.ContributesWorker import com.deliveryhero.whetstone.worker.WorkerScope -import com.slack.eithernet.ApiResult +import com.slack.eithernet.ApiResult.Success import dev.msfjarvis.claw.android.viewmodel.SavedPostsRepository import dev.msfjarvis.claw.api.LobstersApi import dev.msfjarvis.claw.common.posts.toDbModel +import dev.msfjarvis.claw.model.LobstersPostDetails import javax.inject.Inject -import kotlinx.coroutines.async -import kotlinx.coroutines.awaitAll import kotlinx.coroutines.flow.first -import kotlinx.coroutines.supervisorScope /** * WorkManager-backed [CoroutineWorker] that gets all the posts from [SavedPostsRepository], fetches @@ -38,19 +36,13 @@ constructor( private val lobstersApi: LobstersApi, ) : CoroutineWorker(appContext, workerParams) { override suspend fun doWork(): Result { - val posts = savedPostsRepository.savedPosts.first() - supervisorScope { - posts - .map { post -> - async { - val details = lobstersApi.getPostDetails(post.shortId) - if (details is ApiResult.Success) { - savedPostsRepository.savePost(details.value.toDbModel()) - } - } - } - .awaitAll() - } + savedPostsRepository.savedPosts + .first() + .map { post -> lobstersApi.getPostDetails(post.shortId) } + .filterIsInstance>() + .map { result -> result.value.toDbModel() } + .toList() + .let { savedPostsRepository.savePosts(it) } return Result.success() } }