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 eba0d5baa..795cf3f23 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 @@ -29,6 +29,39 @@ data class CreateHighlightParams( ) } +//2022-11-29 13:41:56.273 13373-14177/app.omnivore.omnivore D/wv: received actionID from Android: +// mergeHighlight, { +// "prefix":"In what may be its final public hearing, the committee intends to present new theevidence about the former president’s state of mind and central role in the plan to overturn ", +// "suffix":"2020 election.", +// "quote":"", +// "id":"646a3b52-a134-469e-8ea3-26aad47f74c3", +// "shortId":"IK35C_Hp","patch":"@@ -307,32 +307,73 @@\n to overturn the\n+%3Comnivore_highlight%3E%3C/omnivore_highlight%3E\n 2020 election.P\n", +// "articleId":"14bb47ff-af23-461b-8ce3-1afe6b8bdc5b", +// "overlapHighlightIdList":[""]} + +data class MergeHighlightsParams( + val shortId: String?, + val highlightID: String?, + val quote: String?, + val patch: String?, + val articleId: String?, + val prefix: String?, + val suffix: String?, + val overlapHighlightIdList: List?, + val `annotation`: String? +) { + fun asMergeHighlightInput() = MergeHighlightInput( + annotation = Optional.presentIfNotNull(`annotation`), + prefix = Optional.presentIfNotNull(prefix), + articleId = articleId ?: "", + id = highlightID ?: "", + patch = patch ?: "", + quote = quote ?: "", + shortId = shortId ?: "", + overlapHighlightIdList = overlapHighlightIdList ?: listOf() + ) +} + suspend fun Networker.deleteHighlights(highlightIDs: List): Boolean { val statuses: MutableList = mutableListOf() for (highlightID in highlightIDs) { @@ -40,6 +73,11 @@ suspend fun Networker.deleteHighlights(highlightIDs: List): Boolean { return !hasFailure } +suspend fun Networker.mergeWebHighlights(jsonString: String): Boolean { + val input = Gson().fromJson(jsonString, MergeHighlightsParams::class.java).asMergeHighlightInput() + return mergeHighlights(input) +} + suspend fun Networker.mergeHighlights(input: MergeHighlightInput): Boolean { val result = authenticatedApolloClient().mutation(MergeHighlightMutation(input)).execute() Log.d("Network", "highlight merge result: $result") diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt index de6cacb7f..06f509310 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt @@ -231,9 +231,10 @@ class OmnivoreWebView(context: Context) : WebView(context) { } R.id.highlight -> { val script = "var event = new Event('highlight');document.dispatchEvent(event);" - evaluateJavascript(script, null) - clearFocus() - mode.finish() + evaluateJavascript(script) { + clearFocus() + mode.finish() + } true } R.id.delete -> { 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 7bec12af3..2f9f1b414 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 @@ -90,6 +90,12 @@ class WebReaderViewModel @Inject constructor( "shareHighlight" -> { // unimplemented } + "mergeHighlight" -> { + viewModelScope.launch { + val isHighlightSynced = networker.mergeWebHighlights(jsonString) + Log.d("Network", "isMergedHighlightSynced = $isHighlightSynced") + } + } else -> { Log.d("Loggo", "receive unrecognized action of $actionID with json: $jsonString") }