diff --git a/android/Omnivore/app/src/main/graphql/CreateHighlight.graphql b/android/Omnivore/app/src/main/graphql/CreateHighlight.graphql new file mode 100644 index 000000000..d4417067d --- /dev/null +++ b/android/Omnivore/app/src/main/graphql/CreateHighlight.graphql @@ -0,0 +1,13 @@ +mutation CreateHighlight($input: CreateHighlightInput!) { + createHighlight(input: $input) { + ... on CreateHighlightSuccess { + highlight { + ...HighlightFields + } + } + + ... on CreateHighlightError { + errorCodes + } + } +} diff --git a/android/Omnivore/app/src/main/graphql/DeleteHighlight.graphql b/android/Omnivore/app/src/main/graphql/DeleteHighlight.graphql new file mode 100644 index 000000000..e61011a3e --- /dev/null +++ b/android/Omnivore/app/src/main/graphql/DeleteHighlight.graphql @@ -0,0 +1,12 @@ +mutation DeleteHighlight($highlightId: ID!) { + deleteHighlight(highlightId: $highlightId) { + ... on DeleteHighlightSuccess { + highlight { + id + } + } + ... on DeleteHighlightError { + errorCodes + } + } +} diff --git a/android/Omnivore/app/src/main/graphql/ReadingProgressMutation.graphql b/android/Omnivore/app/src/main/graphql/ReadingProgressMutation.graphql new file mode 100644 index 000000000..80a30eea1 --- /dev/null +++ b/android/Omnivore/app/src/main/graphql/ReadingProgressMutation.graphql @@ -0,0 +1,14 @@ +mutation SaveArticleReadingProgress($input: SaveArticleReadingProgressInput!) { + saveArticleReadingProgress(input: $input) { + ... on SaveArticleReadingProgressSuccess { + updatedArticle { + id + readingProgressPercent + readingProgressAnchorIndex + } + } + ... on SaveArticleReadingProgressError { + errorCodes + } + } +} diff --git a/android/Omnivore/app/src/main/graphql/UpdateHighlight.graphql b/android/Omnivore/app/src/main/graphql/UpdateHighlight.graphql new file mode 100644 index 000000000..18f93dcea --- /dev/null +++ b/android/Omnivore/app/src/main/graphql/UpdateHighlight.graphql @@ -0,0 +1,13 @@ +mutation UpdateHighlight($input: UpdateHighlightInput!) { + updateHighlight(input: $input) { + ... on UpdateHighlightSuccess { + highlight { + id + } + } + + ... on UpdateHighlightError { + errorCodes + } + } +} 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 new file mode 100644 index 000000000..ace426c7a --- /dev/null +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/HighlightMutations.kt @@ -0,0 +1,32 @@ +package app.omnivore.omnivore.networking + +import app.omnivore.omnivore.graphql.generated.CreateHighlightMutation +import app.omnivore.omnivore.graphql.generated.type.CreateHighlightInput +import com.apollographql.apollo3.api.Optional +import com.google.gson.Gson + +data class CreateHighlightParams( + val shortId: String?, + val highlightID: String?, + val quote: String?, + val patch: String?, + val articleId: String?, + val `annotation`: String? +) { + fun asCreateHighlightInput() = CreateHighlightInput( + annotation = Optional.presentIfNotNull(`annotation`), + articleId = articleId ?: "", + id = highlightID ?: "", + patch = patch ?: "", + quote = quote ?: "", + shortId = shortId ?: "" + ) +} + +suspend fun Networker.createHighlight(jsonString: String) { + val input = Gson().fromJson(jsonString, CreateHighlightParams::class.java).asCreateHighlightInput() + + authenticatedApolloClient().mutation( + CreateHighlightMutation(input) + ).execute() +} diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SearchQuery.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SearchQuery.kt index a658a3aea..7086c123e 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SearchQuery.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SearchQuery.kt @@ -22,7 +22,7 @@ suspend fun Networker.search( ) ).execute() - val cursor = result.data?.search?.onSearchSuccess?.pageInfo?.endCursor + val newCursor = result.data?.search?.onSearchSuccess?.pageInfo?.endCursor val itemList = result.data?.search?.onSearchSuccess?.edges ?: listOf() val items = itemList.map { @@ -49,5 +49,5 @@ suspend fun Networker.search( ) } - return SearchQueryResponse(cursor, items) + return SearchQueryResponse(newCursor, items) } 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 98401f013..2d938dc89 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 @@ -28,7 +28,7 @@ fun WebReaderLoadingContainer(slug: String, webReaderViewModel: WebReaderViewMod if (webReaderParams != null) { WebReader(webReaderParams!!, webReaderViewModel) } else { - // TODO: add a proper loading view + // TODO: add a proper loading viewhandleIncomingWebMessage Text("Loading...") } } @@ -143,9 +143,9 @@ class OmnivoreWebView(context: Context) : WebView(context) { } } -class AndroidWebKitMessenger(val messageHandler: (String, JSONObject) -> Unit) { +class AndroidWebKitMessenger(val messageHandler: (String, String) -> Unit) { @JavascriptInterface fun handleIdentifiableMessage(actionID: String, jsonString: String) { - messageHandler(actionID, JSONObject(jsonString)) + messageHandler(actionID, jsonString) } } 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 f05943dcb..e116176ef 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 @@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope import app.omnivore.omnivore.DatastoreRepository import app.omnivore.omnivore.models.LinkedItem import app.omnivore.omnivore.networking.Networker +import app.omnivore.omnivore.networking.createHighlight import app.omnivore.omnivore.networking.linkedItem import com.google.gson.Gson import dagger.hilt.android.lifecycle.HiltViewModel @@ -45,32 +46,34 @@ class WebReaderViewModel @Inject constructor( } } - fun handleIncomingWebMessage(actionID: String, json: JSONObject) { + fun handleIncomingWebMessage(actionID: String, jsonString: String) { when (actionID) { "createHighlight" -> { - Log.d("Loggo", "receive create highlight action: $json") + viewModelScope.launch { + networker.createHighlight(jsonString) + } } "deleteHighlight" -> { // { highlightId } - Log.d("Loggo", "receive delete highlight action: $json") + Log.d("Loggo", "receive delete highlight action: $jsonString") } "updateHighlight" -> { - Log.d("Loggo", "receive update highlight action: $json") + Log.d("Loggo", "receive update highlight action: $jsonString") } "articleReadingProgress" -> { - Log.d("Loggo", "received article reading progress action: $json") + Log.d("Loggo", "received article reading progress action: $jsonString") } "annotate" -> { - Log.d("Loggo", "received annotate action: $json") + Log.d("Loggo", "received annotate action: $jsonString") } "existingHighlightTap" -> { - Log.d("Loggo", "receive existing highlight tap action: $json") + Log.d("Loggo", "receive existing highlight tap action: $jsonString") } "shareHighlight" -> { // unimplemented } else -> { - Log.d("Loggo", "receive unrecognized action of $actionID with json: $json") + Log.d("Loggo", "receive unrecognized action of $actionID with json: $jsonString") } } }