diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/HighlightMutations.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/HighlightMutations.kt index 5329392a1..46f988ec4 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/HighlightMutations.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/HighlightMutations.kt @@ -4,8 +4,10 @@ import android.util.Log import app.omnivore.omnivore.graphql.generated.CreateHighlightMutation import app.omnivore.omnivore.graphql.generated.DeleteHighlightMutation import app.omnivore.omnivore.graphql.generated.MergeHighlightMutation +import app.omnivore.omnivore.graphql.generated.UpdateHighlightMutation import app.omnivore.omnivore.graphql.generated.type.CreateHighlightInput import app.omnivore.omnivore.graphql.generated.type.MergeHighlightInput +import app.omnivore.omnivore.graphql.generated.type.UpdateHighlightInput import app.omnivore.omnivore.models.Highlight import com.apollographql.apollo3.api.Optional import com.google.gson.Gson @@ -29,6 +31,18 @@ data class CreateHighlightParams( ) } +data class UpdateHighlightParams( + val highlightId: String?, + val `annotation`: String?, + val sharedAt: String?, +) { + fun asUpdateHighlightInput() = UpdateHighlightInput( + annotation = Optional.presentIfNotNull(`annotation`), + highlightId = highlightId ?: "", + sharedAt = Optional.presentIfNotNull(sharedAt) + ) +} + data class MergeHighlightsParams( val shortId: String?, val id: String?, @@ -74,6 +88,17 @@ suspend fun Networker.deleteHighlights(highlightIDs: List): Boolean { return !hasFailure } +suspend fun Networker.updateWebHighlight(jsonString: String): Boolean { + val input = Gson().fromJson(jsonString, UpdateHighlightParams::class.java).asUpdateHighlightInput() + return updateHighlight(input) +} + +suspend fun Networker.updateHighlight(input: UpdateHighlightInput): Boolean { + val result = authenticatedApolloClient().mutation(UpdateHighlightMutation(input)).execute() + Log.d("Network", "update highlight result: $result") + return result.data?.updateHighlight?.onUpdateHighlightSuccess?.highlight != null +} + suspend fun Networker.mergeWebHighlights(jsonString: String): Boolean { val input = Gson().fromJson(jsonString, MergeHighlightsParams::class.java).asMergeHighlightInput() return mergeHighlights(input) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt index 04eb40d1a..4f38ae3ca 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt @@ -9,6 +9,7 @@ import androidx.lifecycle.viewModelScope import app.omnivore.omnivore.DatastoreRepository import app.omnivore.omnivore.graphql.generated.type.CreateHighlightInput import app.omnivore.omnivore.graphql.generated.type.MergeHighlightInput +import app.omnivore.omnivore.graphql.generated.type.UpdateHighlightInput import app.omnivore.omnivore.models.LinkedItem import app.omnivore.omnivore.networking.* import com.apollographql.apollo3.api.Optional @@ -152,8 +153,16 @@ class PDFReaderViewModel @Inject constructor( annotation.customData = JSONObject().put("omnivoreHighlight", it) } - // TODO: Sync update with data service - + // Sync update with data service + viewModelScope.launch { + val input = UpdateHighlightInput( + annotation = Optional.presentIfNotNull(note), + highlightId = pluckHighlightID(annotation) ?: "", + sharedAt = Optional.Absent + ) + networker.updateHighlight(input) + Log.d("network", "updated $annotation") + } } fun deleteHighlight(annotation: Annotation) { diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt index e1e693d56..57e1b72d3 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt @@ -77,6 +77,10 @@ class WebReaderViewModel @Inject constructor( } "updateHighlight" -> { Log.d("Loggo", "receive update highlight action: $jsonString") + viewModelScope.launch { + val isHighlightUpdateSynced = networker.updateWebHighlight(jsonString) + Log.d("Network", "isHighlightUpdateSynced = $isHighlightUpdateSynced") + } } "articleReadingProgress" -> { viewModelScope.launch {