From 02818ab8f19a1e43edcc08e79e67972630a3130c Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Mon, 9 Jan 2023 15:57:32 -0800 Subject: [PATCH] create SavedItemUpdatesQuery --- .../networking/SavedItemUpdatesQuery.kt | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemUpdatesQuery.kt diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemUpdatesQuery.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemUpdatesQuery.kt new file mode 100644 index 000000000..be79a86da --- /dev/null +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemUpdatesQuery.kt @@ -0,0 +1,76 @@ +package app.omnivore.omnivore.networking + +import app.omnivore.omnivore.graphql.generated.UpdatesSinceQuery +import app.omnivore.omnivore.graphql.generated.type.UpdateReason +import app.omnivore.omnivore.persistence.entities.SavedItem +import com.apollographql.apollo3.api.Optional + +data class SavedItemUpdatesQueryResponse( + val cursor: String?, + val hasMoreItems: Boolean, + val totalCount: Int, + val deletedItemIDs: List, + val items: List +) + +suspend fun Networker.savedItemUpdates( + cursor: String? = null, + limit: Int = 15, + since: String +): SavedItemUpdatesQueryResponse? { + try { + val result = authenticatedApolloClient().query( + UpdatesSinceQuery( + after = Optional.presentIfNotNull(cursor), + first = Optional.presentIfNotNull(limit), + since = since + ) + ).execute() + + val payload = result.data?.updatesSince?.onUpdatesSinceSuccess ?: return null + val itemNodes: MutableList = mutableListOf() + val deletedItemIDs: MutableList = mutableListOf() + + for (edge in payload.edges) { + if (edge.updateReason == UpdateReason.DELETED) { + deletedItemIDs.add(edge.itemID) + } else if (edge.node != null) { + itemNodes.add(edge.node) + } + } + + val savedItems = itemNodes.map { + SavedItem( + id = it.id, + title = it.title, + createdAt = it.createdAt as String, + savedAt = it.savedAt as String, + readAt = it.readAt as String?, + updatedAt = it.updatedAt as String?, + readingProgress = it.readingProgressPercent, + readingProgressAnchor = it.readingProgressAnchorIndex, + imageURLString = it.image, + pageURLString = it.url, + descriptionText = it.description, + publisherURLString = it.originalArticleUrl, + siteName = it.siteName, + author = it.author, + publishDate = it.publishedAt as String?, + slug = it.slug, + isArchived = it.isArchived, + contentReader = it.contentReader.rawValue, + content = null + ) + } + + return SavedItemUpdatesQueryResponse( + cursor = payload.pageInfo.endCursor, + hasMoreItems = payload.pageInfo.hasNextPage, + totalCount = savedItems.size, + deletedItemIDs = deletedItemIDs, + items = savedItems + ) + } catch (e: java.lang.Exception) { + return null + } +}