From 9a4c8a68867e173ed84716f92f0805d07c38120f Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Mon, 26 Sep 2022 11:28:48 -0700 Subject: [PATCH] pass datastore repo into networker --- .../java/app/omnivore/omnivore/AppModule.kt | 7 +++++++ .../omnivore/omnivore/networking/Networker.kt | 20 +++++++++++++++---- .../omnivore/networking/SearchQuery.kt | 5 ++--- .../omnivore/ui/home/HomeViewModel.kt | 13 ++---------- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/AppModule.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/AppModule.kt index c48739f95..ef9d75aaa 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/AppModule.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/AppModule.kt @@ -1,6 +1,7 @@ package app.omnivore.omnivore import android.content.Context +import app.omnivore.omnivore.networking.Networker import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -18,4 +19,10 @@ object AppModule { @ApplicationContext app: Context ): DatastoreRepository = OmnivoreDatastore(app) + @Singleton + @Provides + fun provideNetworker( + @ApplicationContext app: Context, + datastore: DatastoreRepository + ): Networker = Networker(datastore) } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/Networker.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/Networker.kt index 0aff72dd3..926195dd2 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/Networker.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/Networker.kt @@ -1,11 +1,23 @@ package app.omnivore.omnivore.networking import app.omnivore.omnivore.Constants +import app.omnivore.omnivore.DatastoreKeys +import app.omnivore.omnivore.DatastoreRepository import com.apollographql.apollo3.ApolloClient +import javax.inject.Inject -object Networker { - fun apolloClient(authToken: String) = ApolloClient.Builder() - .serverUrl("${Constants.apiURL}/api/graphql") - .addHttpHeader("Authorization", value = authToken) +class Networker @Inject constructor( + private val datastoreRepo: DatastoreRepository +) { + private val serverUrl = "${Constants.apiURL}/api/graphql" + private suspend fun authToken() = datastoreRepo.getString(DatastoreKeys.omnivoreAuthToken) ?: "" + + suspend fun publicApolloClient() = ApolloClient.Builder() + .serverUrl(serverUrl) + .build() + + suspend fun authenticatedApolloClient() = ApolloClient.Builder() + .serverUrl(serverUrl) + .addHttpHeader("Authorization", value = authToken()) .build() } 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 5d4f62803..a658a3aea 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 @@ -12,10 +12,9 @@ data class SearchQueryResponse( suspend fun Networker.search( cursor: String? = null, limit: Int = 15, - query: String, - authToken: String? + query: String ): SearchQueryResponse { - val result = apolloClient(authToken ?: "").query( + val result = authenticatedApolloClient().query( SearchQuery( after = Optional.presentIfNotNull(cursor), first = Optional.presentIfNotNull(limit), 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 29b91bc4b..e07e2c09d 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,18 +3,16 @@ package app.omnivore.omnivore.ui.home import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import app.omnivore.omnivore.* import app.omnivore.omnivore.models.LinkedItem import app.omnivore.omnivore.networking.Networker import app.omnivore.omnivore.networking.search import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking import javax.inject.Inject @HiltViewModel class HomeViewModel @Inject constructor( - private val datastoreRepo: DatastoreRepository + private val networker: Networker ): ViewModel() { private var cursor: String? = null private var items: List = listOf() @@ -29,10 +27,6 @@ class HomeViewModel @Inject constructor( val searchTextLiveData = MutableLiveData("") val itemsLiveData = MutableLiveData>(listOf()) - private fun getAuthToken(): String? = runBlocking { - datastoreRepo.getString(DatastoreKeys.omnivoreAuthToken) - } - fun updateSearchText(text: String) { searchTextLiveData.value = text @@ -51,12 +45,9 @@ class HomeViewModel @Inject constructor( viewModelScope.launch { val thisSearchIdx = searchIdx searchIdx += 1 - val authToken = getAuthToken() // Execute the search - val searchResult = Networker.search( - cursor = cursor, query = searchQuery(), authToken = authToken - ) + val searchResult = networker.search(cursor = cursor, query = searchQuery()) // Search results aren't guaranteed to return in order so this // will discard old results that are returned while a user is typing.