diff --git a/app/src/main/java/dev/msfjarvis/lobsters/data/backup/BackupHandler.kt b/app/src/main/java/dev/msfjarvis/lobsters/data/backup/BackupHandler.kt new file mode 100644 index 00000000..6af9b3ac --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/lobsters/data/backup/BackupHandler.kt @@ -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>() + + 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) } } + } + } +} diff --git a/app/src/main/java/dev/msfjarvis/lobsters/injection/BackupModule.kt b/app/src/main/java/dev/msfjarvis/lobsters/injection/BackupModule.kt new file mode 100644 index 00000000..545dcc5f --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/lobsters/injection/BackupModule.kt @@ -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) + } +}