Add APICache + splashscreen init.

This commit is contained in:
Thomas Andres Gomez 2021-05-09 14:45:37 +02:00
parent e9cb8cd0ac
commit 2ad8d5953a
16 changed files with 309 additions and 15 deletions

View file

@ -15,7 +15,7 @@ import com.google.android.gms.common.api.ApiException
import com.pixelized.biblib.network.data.query.AuthLoginQuery
import com.pixelized.biblib.network.client.IBibLibClient
import com.pixelized.biblib.repository.credential.ICredentialRepository
import com.pixelized.biblib.repository.googlesignin.IGoogleSingInRepository
import com.pixelized.biblib.repository.googleSignIn.IGoogleSingInRepository
import com.pixelized.biblib.ui.viewmodel.authentication.IAuthentication.State
import com.pixelized.biblib.utils.exception.MissingTokenException
import com.pixelized.biblib.utils.injection.inject

View file

@ -4,8 +4,9 @@ import androidx.compose.runtime.*
import androidx.lifecycle.ViewModel
import com.pixelized.biblib.network.client.IBibLibClient
import com.pixelized.biblib.network.data.query.AuthLoginQuery
import com.pixelized.biblib.repository.apiCache.IAPICacheRepository
import com.pixelized.biblib.repository.credential.ICredentialRepository
import com.pixelized.biblib.repository.googlesignin.IGoogleSingInRepository
import com.pixelized.biblib.repository.googleSignIn.IGoogleSingInRepository
import com.pixelized.biblib.ui.viewmodel.initialisation.IInitialisation.State.*
import com.pixelized.biblib.utils.injection.inject
import kotlinx.coroutines.delay
@ -14,6 +15,7 @@ class InitialisationViewModel : ViewModel(), IInitialisation {
private val credentialRepository: ICredentialRepository by inject()
private val googleSignIn: IGoogleSingInRepository by inject()
private val client: IBibLibClient by inject()
private val apiCache: IAPICacheRepository by inject()
@Composable
override fun LoadApplication(content: @Composable (IInitialisation.State) -> Unit) {
@ -24,6 +26,9 @@ class InitialisationViewModel : ViewModel(), IInitialisation {
delay(2000)
val loggedIn = loginWithGoogle() || loginWithCredential()
if (loggedIn) {
loadNewBooks() && loadAllBooks()
}
state.value = Finished(needLogin = loggedIn.not())
}
@ -71,4 +76,20 @@ class InitialisationViewModel : ViewModel(), IInitialisation {
false
}
}
private suspend fun loadNewBooks(): Boolean {
val cached = apiCache.new
val updated = client.service.new()
return if (cached != updated) {
apiCache.new = updated
true
} else {
false
}
}
private suspend fun loadAllBooks(): Boolean {
apiCache.list = client.service.list()
return true
}
}