app: add BackupHandler

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2021-04-02 13:32:19 +05:30
parent d86d12f2db
commit a08109d745
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
2 changed files with 53 additions and 0 deletions

View file

@ -0,0 +1,32 @@
package dev.msfjarvis.lobsters.data.backup
import com.squareup.moshi.Moshi
import com.squareup.moshi.adapter
import dev.msfjarvis.lobsters.data.local.SavedPost
import dev.msfjarvis.lobsters.database.LobstersDatabase
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@OptIn(ExperimentalStdlibApi::class)
class BackupHandler
@Inject
constructor(
private val database: LobstersDatabase,
moshi: Moshi,
) {
private val adapter = moshi.adapter<List<SavedPost>>()
suspend fun exportSavedPosts(): String {
val posts =
withContext(Dispatchers.IO) { database.savedPostQueries.selectAllPosts().executeAsList() }
return adapter.toJson(posts)
}
suspend fun importSavedPosts(json: String) {
withContext(Dispatchers.IO) {
val posts = requireNotNull(adapter.fromJson(json))
database.transaction { posts.forEach { database.savedPostQueries.insertOrReplacePost(it) } }
}
}
}

View file

@ -0,0 +1,21 @@
package dev.msfjarvis.lobsters.injection
import com.squareup.moshi.Moshi
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import dev.msfjarvis.lobsters.data.backup.BackupHandler
import dev.msfjarvis.lobsters.database.LobstersDatabase
@Module
@InstallIn(ActivityComponent::class)
object BackupModule {
@Provides
fun provideBackupHandler(
database: LobstersDatabase,
moshi: Moshi,
): BackupHandler {
return BackupHandler(database, moshi)
}
}