public IObservable <string> GetGoogleToken() { ensureApiClientExists(); return(logOutIfNeeded().SelectMany(getGoogleToken)); IObservable <Unit> logOutIfNeeded() { if (!googleApiClient.IsConnected) { return(Observable.Return(Unit.Default)); } var logoutSubject = new Subject <Unit>(); var logoutCallback = new LogOutCallback(() => logoutSubject.CompleteWith(Unit.Default)); Auth.GoogleSignInApi .SignOut(googleApiClient) .SetResultCallback(logoutCallback); return(logoutSubject.AsObservable()); } IObservable <string> getGoogleToken(Unit _) { lock (lockable) { if (isLoggingIn) { return(loginSubject.AsObservable()); } isLoggingIn = true; loginSubject = new Subject <string>(); if (googleApiClient.IsConnected) { login(); return(loginSubject.AsObservable()); } googleApiClient.Connect(); return(loginSubject.AsObservable()); } } }
public IObservable <Unit> LogOutIfNeeded() { logoutSubject = new Subject <Unit>(); if (googleApiClient.IsConnected) { var logoutCallback = new LogOutCallback(() => { logoutSubject.OnNext(Unit.Default); logoutSubject.OnCompleted(); }); Auth.GoogleSignInApi.SignOut(googleApiClient).SetResultCallback(logoutCallback); return(logoutSubject.AsObservable()); } else { return(Observable.Return(Unit.Default)); } }