More android offline sync improvements

This commit is contained in:
Jackson Harper
2024-01-09 10:23:24 +08:00
parent cb48c755f1
commit 654de969c4
3 changed files with 45 additions and 5 deletions

View File

@ -52,6 +52,7 @@ suspend fun DataService.createWebHighlight(jsonString: String, colorName: String
newHighlight?.let {
db.highlightDao().update(it)
db.highlightChangesDao().deleteById(highlightId = highlight.highlightId)
}
}
}

View File

@ -7,6 +7,7 @@ import app.omnivore.omnivore.models.ServerSyncStatus
import app.omnivore.omnivore.networking.*
import app.omnivore.omnivore.persistence.entities.Highlight
import app.omnivore.omnivore.persistence.entities.SavedItem
import app.omnivore.omnivore.persistence.entities.highlightChangeToHighlight
import com.apollographql.apollo3.api.Optional
import kotlinx.coroutines.delay
import kotlin.math.log
@ -25,16 +26,29 @@ suspend fun DataService.startSyncChannels() {
suspend fun DataService.syncOfflineItemsWithServerIfNeeded() {
val unSyncedSavedItems = db.savedItemDao().getUnSynced()
val unSyncedHighlights = db.highlightChangesDao().getUnSynced()
Log.d("sync","UNSYNC CHANGES: " + unSyncedHighlights)
for (savedItem in unSyncedSavedItems) {
delay(250)
savedItemSyncChannel.send(savedItem)
}
for (highlight in unSyncedHighlights) {
for (change in unSyncedHighlights) {
val highlight = highlightChangeToHighlight(change)
Log.d("sync","UNSYNC CHANGE: " + highlight.serverSyncStatus + " HIGHLIGHT: " + highlight)
when (change.serverSyncStatus) {
ServerSyncStatus.NEEDS_CREATION.rawValue -> {
highlight.serverSyncStatus = change.serverSyncStatus
if (syncHighlight(highlight)) {
db.highlightChangesDao().deleteById(highlight.highlightId)
}
}
else -> {
db.highlightChangesDao().deleteById(highlight.highlightId)
}
}
delay(250)
// highlightSyncChannel.send(highlight)
// highlightSyncChannel.send(highlight)
}
}
@ -86,7 +100,7 @@ private suspend fun DataService.syncSavedItem(item: SavedItem) {
}
}
private suspend fun DataService.syncHighlight(highlight: Highlight) {
private suspend fun DataService.syncHighlight(highlight: Highlight): Boolean {
fun updateSyncStatus(status: ServerSyncStatus) {
highlight.serverSyncStatus = status.rawValue
db.highlightDao().update(highlight)
@ -103,6 +117,7 @@ private suspend fun DataService.syncHighlight(highlight: Highlight) {
} else {
updateSyncStatus(ServerSyncStatus.NEEDS_DELETION)
}
return isDeletedOnServer != null
}
ServerSyncStatus.NEEDS_UPDATE.rawValue -> {
updateSyncStatus(ServerSyncStatus.IS_SYNCING)
@ -120,8 +135,10 @@ private suspend fun DataService.syncHighlight(highlight: Highlight) {
} else {
updateSyncStatus(ServerSyncStatus.NEEDS_UPDATE)
}
return isUpdatedOnServer != null
}
ServerSyncStatus.NEEDS_CREATION.rawValue -> {
Log.d("sync", "CREATING")
updateSyncStatus(ServerSyncStatus.IS_SYNCING)
val savedItemID = db.savedItemAndHighlightCrossRefDao()
@ -137,13 +154,15 @@ private suspend fun DataService.syncHighlight(highlight: Highlight) {
shortId = highlight.shortId
)
)
Log.d("sync", "isCreatedOnServer: " + isCreatedOnServer)
if (isCreatedOnServer != null) {
updateSyncStatus(ServerSyncStatus.IS_SYNCED)
} else {
updateSyncStatus(ServerSyncStatus.NEEDS_UPDATE)
}
return isCreatedOnServer != null
}
else -> return
else -> return false
}
}

View File

@ -56,6 +56,26 @@ fun saveHighlightChange(dao: HighlightChangesDao, savedItemId: String, highlight
return change
}
fun highlightChangeToHighlight(change: HighlightChange): Highlight {
return Highlight(
highlightId = change.highlightId,
type = change.type,
shortId = change.shortId,
quote = change.quote,
prefix = change.prefix,
suffix = change.suffix,
patch = change.patch,
annotation = change.annotation,
createdAt = change.createdAt,
updatedAt = change.updatedAt,
createdByMe = change.createdByMe,
color = change.color,
highlightPositionPercent = change.highlightPositionPercent,
highlightPositionAnchorIndex = change.highlightPositionAnchorIndex,
serverSyncStatus = change.serverSyncStatus
)
}
@Dao
interface HighlightChangesDao {
@Query("SELECT * FROM highlightChange WHERE serverSyncStatus != 0 ORDER BY updatedAt ASC")