diff --git a/android/Omnivore/app/build.gradle b/android/Omnivore/app/build.gradle index e77030675..a864109ad 100644 --- a/android/Omnivore/app/build.gradle +++ b/android/Omnivore/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.omnivore.omnivore" minSdk 26 targetSdk 33 - versionCode 32 - versionName "0.0.32" + versionCode 33 + versionName "0.0.33" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/DataService.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/DataService.kt index dde348784..306501332 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/DataService.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/DataService.kt @@ -4,13 +4,19 @@ import android.content.Context import androidx.room.Room import app.omnivore.omnivore.networking.* import app.omnivore.omnivore.persistence.AppDatabase +import app.omnivore.omnivore.persistence.entities.Highlight +import app.omnivore.omnivore.persistence.entities.SavedItem import kotlinx.coroutines.* +import kotlinx.coroutines.channels.Channel import javax.inject.Inject class DataService @Inject constructor( context: Context, val networker: Networker ) { + val savedItemSyncChannel = Channel(capacity = Channel.UNLIMITED) + val highlightSyncChannel = Channel(capacity = Channel.UNLIMITED) + val db = Room.databaseBuilder( context, AppDatabase::class.java, "omnivore-database" @@ -18,6 +24,12 @@ class DataService @Inject constructor( .fallbackToDestructiveMigration() .build() + init { + CoroutineScope(Dispatchers.IO).launch { + startSyncChannels() + } + } + fun clearDatabase() { CoroutineScope(Dispatchers.IO).launch { db.clearAllTables() diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/SyncOfflineChanges.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/SyncOfflineChanges.kt index c3a6fd263..829c9aa66 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/SyncOfflineChanges.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/dataService/SyncOfflineChanges.kt @@ -7,17 +7,33 @@ import app.omnivore.omnivore.networking.* import app.omnivore.omnivore.persistence.entities.Highlight import app.omnivore.omnivore.persistence.entities.SavedItem import com.apollographql.apollo3.api.Optional +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +suspend fun DataService.startSyncChannels() { + for (savedItem in savedItemSyncChannel) { + syncSavedItem(savedItem) + } + + for (highlight in highlightSyncChannel) { + syncHighlight(highlight) + } +} suspend fun DataService.syncOfflineItemsWithServerIfNeeded() { val unSyncedSavedItems = db.savedItemDao().getUnSynced() val unSyncedHighlights = db.highlightDao().getUnSynced() for (savedItem in unSyncedSavedItems) { - syncSavedItem(savedItem) + delay(250) + savedItemSyncChannel.send(savedItem) } for (highlight in unSyncedHighlights) { - syncHighlight(highlight) + delay(250) + highlightSyncChannel.send(highlight) } }