From 60dc141be4285dee561296afa9bdda1f9cc2d8c2 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Mon, 26 Sep 2022 10:54:28 -0700 Subject: [PATCH] move linkedItem creation into search networker function --- .../java/app/omnivore/omnivore/Networker.kt | 67 ++++++++++++++----- .../omnivore/ui/home/HomeViewModel.kt | 41 ++---------- 2 files changed, 56 insertions(+), 52 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/Networker.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/Networker.kt index b3af5fe5c..a6ebe6e44 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/Networker.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/Networker.kt @@ -1,28 +1,63 @@ package app.omnivore.omnivore import app.omnivore.omnivore.graphql.generated.SearchQuery +import app.omnivore.omnivore.models.LinkedItem import com.apollographql.apollo3.ApolloClient import com.apollographql.apollo3.api.ApolloResponse import com.apollographql.apollo3.api.Optional object Networker { - private fun apolloClient(authToken: String) = ApolloClient.Builder() + fun apolloClient(authToken: String) = ApolloClient.Builder() .serverUrl("${Constants.apiURL}/api/graphql") .addHttpHeader("Authorization", value = authToken) .build() - - suspend fun search( - cursor: String? = null, - limit: Int = 15, - query: String, - authToken: String? - ): ApolloResponse { - return apolloClient(authToken ?: "").query( - SearchQuery( - after = Optional.presentIfNotNull(cursor), - first = Optional.presentIfNotNull(limit), - query = Optional.presentIfNotNull(query) - ) - ).execute() - } } + +suspend fun Networker.search( + cursor: String? = null, + limit: Int = 15, + query: String, + authToken: String? +): SearchQueryResponse { + val result = apolloClient(authToken ?: "").query( + SearchQuery( + after = Optional.presentIfNotNull(cursor), + first = Optional.presentIfNotNull(limit), + query = Optional.presentIfNotNull(query) + ) + ).execute() + + val cursor = result.data?.search?.onSearchSuccess?.pageInfo?.endCursor + val itemList = result.data?.search?.onSearchSuccess?.edges ?: listOf() + + val items = itemList.map { + LinkedItem( + id = it.node.id, + title = it.node.title, + createdAt = it.node.createdAt, + savedAt = it.node.savedAt, + readAt = it.node.readAt, + updatedAt = it.node.updatedAt, + readingProgress = it.node.readingProgressPercent, + readingProgressAnchor = it.node.readingProgressAnchorIndex, + imageURLString = it.node.image, + pageURLString = it.node.url, + descriptionText = it.node.description, + publisherURLString = it.node.originalArticleUrl, + siteName = it.node.siteName, + author = it.node.author, + publishDate = it.node.publishedAt, + slug = it.node.slug, + isArchived = it.node.isArchived, + contentReader = it.node.contentReader.rawValue, + content = null + ) + } + + return SearchQueryResponse(cursor, items) +} + +data class SearchQueryResponse( + val cursor: String?, + val items: List +) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/HomeViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/HomeViewModel.kt index 87ca4473b..990e7a1dd 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/HomeViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/home/HomeViewModel.kt @@ -3,14 +3,8 @@ package app.omnivore.omnivore.ui.home import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import app.omnivore.omnivore.Constants -import app.omnivore.omnivore.DatastoreKeys -import app.omnivore.omnivore.DatastoreRepository -import app.omnivore.omnivore.Networker -import app.omnivore.omnivore.graphql.generated.SearchQuery +import app.omnivore.omnivore.* import app.omnivore.omnivore.models.LinkedItem -import com.apollographql.apollo3.ApolloClient -import com.apollographql.apollo3.api.Optional import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @@ -57,6 +51,7 @@ class HomeViewModel @Inject constructor( searchIdx += 1 val authToken = getAuthToken() + // Execute the search val searchResult = Networker.search( cursor = cursor, query = searchQuery(), authToken = authToken ) @@ -70,40 +65,15 @@ class HomeViewModel @Inject constructor( return@launch } - cursor = searchResult.data?.search?.onSearchSuccess?.pageInfo?.endCursor receivedIdx = thisSearchIdx - val itemList = searchResult.data?.search?.onSearchSuccess?.edges ?: listOf() - - val newItems = itemList.map { - LinkedItem( - id = it.node.id, - title = it.node.title, - createdAt = it.node.createdAt, - savedAt = it.node.savedAt, - readAt = it.node.readAt, - updatedAt = it.node.updatedAt, - readingProgress = it.node.readingProgressPercent, - readingProgressAnchor = it.node.readingProgressAnchorIndex, - imageURLString = it.node.image, - pageURLString = it.node.url, - descriptionText = it.node.description, - publisherURLString = it.node.originalArticleUrl, - siteName = it.node.siteName, - author = it.node.author, - publishDate = it.node.publishedAt, - slug = it.node.slug, - isArchived = it.node.isArchived, - contentReader = it.node.contentReader.rawValue, - content = null - ) - } + cursor = searchResult.cursor if (searchTextLiveData.value != "") { val previousItems = if (clearPreviousSearch) listOf() else searchedItems - searchedItems = previousItems.plus(newItems) + searchedItems = previousItems.plus(searchResult.items) itemsLiveData.value = searchedItems } else { - items = items.plus(newItems) + items = items.plus(searchResult.items) itemsLiveData.value = items } } @@ -119,4 +89,3 @@ class HomeViewModel @Inject constructor( return query } } -