Skip to content

Instantly share code, notes, and snippets.

@dinorahto
Created May 1, 2019 18:07
Show Gist options
  • Save dinorahto/8bc74678ef10b4c1583e97acafbc9e3f to your computer and use it in GitHub Desktop.
Save dinorahto/8bc74678ef10b4c1583e97acafbc9e3f to your computer and use it in GitHub Desktop.
Two observables as Flat map
/**
* Returns an observable from a function that decrypts stored user data
*/
fun currentUserObservable(): Observable<UserViewModel> {
return Observable.create(ObservableOnSubscribe<UserViewModel> { subscriber ->
val user = currentUser()
if (user != null)
subscriber.onNext(user)
else
subscriber.onError(Throwable("User is null"))
subscriber.onComplete()
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
/**
* Returns an onservable from a function that decrypts stored auth token
*/
fun currentTokenObservable(): Observable<String> {
return Observable.create(ObservableOnSubscribe<String> { subscriber ->
val authToken = currentAuthToken()
if (!authToken.isNullOrEmpty())
subscriber.onNext(authToken!!)
else
subscriber.onError(Throwable("Auth Token is null"))
subscriber.onComplete()
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
/**
* Calls the getAmoun Service to obtain the info from the user
* @return Observable<AmountResponseViewModel>
*/
internal fun getAmountService(): Observable<AmountResponseViewModel> {
return amountLocalStorage.currentAuthTokenObservable().flatMap {
authToken: String -> userLocalStorage.currentUserObservable().flatMap {
user: UserViewModel -> retrofit.create(AmountService::class.java)
.amount(authToken, user.id, user.secondaryId)
} }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment