refactor(android): consistently use repository layer

This commit is contained in:
Harsh Shandilya 2024-02-07 00:16:06 +05:30
parent 1d1c7a36b6
commit fa57bc9695

View file

@ -6,17 +6,16 @@
*/ */
package dev.msfjarvis.claw.android.viewmodel package dev.msfjarvis.claw.android.viewmodel
import dev.msfjarvis.claw.core.injection.DatabaseDispatcher
import dev.msfjarvis.claw.core.injection.IODispatcher import dev.msfjarvis.claw.core.injection.IODispatcher
import dev.msfjarvis.claw.database.SavedPostSerializer import dev.msfjarvis.claw.database.SavedPostSerializer
import dev.msfjarvis.claw.database.local.SavedPost import dev.msfjarvis.claw.database.local.SavedPost
import dev.msfjarvis.claw.database.local.SavedPostQueries
import java.io.InputStream import java.io.InputStream
import java.io.OutputStream import java.io.OutputStream
import java.time.Instant import java.time.Instant
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.builtins.ListSerializer import kotlinx.serialization.builtins.ListSerializer
@ -29,8 +28,7 @@ class DataTransferRepository
@Inject @Inject
constructor( constructor(
private val json: Json, private val json: Json,
private val savedPostQueries: SavedPostQueries, private val savedPostsRepository: SavedPostsRepository,
@DatabaseDispatcher private val dbDispatcher: CoroutineDispatcher,
@IODispatcher private val ioDispatcher: CoroutineDispatcher, @IODispatcher private val ioDispatcher: CoroutineDispatcher,
) { ) {
private val serializer = ListSerializer(SavedPostSerializer) private val serializer = ListSerializer(SavedPostSerializer)
@ -38,13 +36,11 @@ constructor(
suspend fun importPosts(input: InputStream) { suspend fun importPosts(input: InputStream) {
val posts: List<SavedPost> = val posts: List<SavedPost> =
withContext(ioDispatcher) { json.decodeFromStream(serializer, input) } withContext(ioDispatcher) { json.decodeFromStream(serializer, input) }
withContext(dbDispatcher) { savedPostsRepository.savePosts(posts)
savedPostQueries.transaction { posts.forEach(savedPostQueries::insertOrReplacePost) }
}
} }
suspend fun exportPostsAsJson(output: OutputStream) { suspend fun exportPostsAsJson(output: OutputStream) {
val posts = withContext(dbDispatcher) { savedPostQueries.selectAllPosts().executeAsList() } val posts = savedPostsRepository.savedPosts.first()
withContext(ioDispatcher) { json.encodeToStream(serializer, posts, output) } withContext(ioDispatcher) { json.encodeToStream(serializer, posts, output) }
} }
@ -55,7 +51,7 @@ constructor(
return instant.toEpochMilli() return instant.toEpochMilli()
} }
val posts = withContext(dbDispatcher) { savedPostQueries.selectAllPosts().executeAsList() } val posts = savedPostsRepository.savedPosts.first()
val header = val header =
""" """
<!DOCTYPE NETSCAPE-Bookmark-file-1> <!DOCTYPE NETSCAPE-Bookmark-file-1>