mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 16:47:01 +05:30
app: add BackupHandler
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
d86d12f2db
commit
a08109d745
2 changed files with 53 additions and 0 deletions
|
@ -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) } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue