mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
pass datastore repo into networker
This commit is contained in:
parent
5d0305988b
commit
9a4c8a6886
4 changed files with 27 additions and 18 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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<LinkedItem> = listOf()
|
||||
|
|
@ -29,10 +27,6 @@ class HomeViewModel @Inject constructor(
|
|||
val searchTextLiveData = MutableLiveData<String>("")
|
||||
val itemsLiveData = MutableLiveData<List<LinkedItem>>(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.
|
||||
|
|
|
|||
Loading…
Reference in a new issue