Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class InfoModelImpl implements InfoModel {
- @NonNull
- private final GithubService restApi;
- @NonNull
- private final String user;
- @NonNull
- private final RealmConfiguration configuration;
- @NonNull
- private final Scheduler scheduler;
- @Nullable
- private Realm realm;
- public InfoModelImpl(@NonNull String user,
- @NonNull RealmConfiguration configuration,
- @NonNull Scheduler scheduler,
- @NonNull GithubService restApi) {
- this.user = user;
- this.configuration = configuration;
- this.scheduler = scheduler;
- this.restApi = restApi;
- }
- @AnyThread
- @NonNull
- @Override
- public Observable<GithubUser> updateInfo() {
- return restApi.getUser(user).observeOn(scheduler)
- .doOnNext(user -> {
- if (realm == null || realm.isClosed()) {
- throw new IllegalStateException("You should subscribe on #observeInfo() first");
- }
- realm.executeTransaction(r -> {
- GithubUser realmObject = realm.where(GithubUser.class).findFirst();
- if (realmObject == null) {
- realm.copyToRealmOrUpdate(user);
- } else {
- realmObject.setAvatarUrl(user.getAvatarUrl());
- realmObject.setName(user.getName());
- }
- });
- });
- }
- @AnyThread
- @NonNull
- @Override
- public Observable<GithubUser> observeInfo() {
- return Observable.defer(() -> {
- if (realm != null && !realm.isClosed()) {
- throw new IllegalStateException("You can't subscribe #observeInfo() twice");
- }
- realm = Realm.getInstance(configuration);
- return realm.where(GithubUser.class).findFirstAsync()
- .<GithubUser>asObservable()
- .filter(p -> p.isLoaded() && p.isValid())
- .doOnUnsubscribe(() -> {
- realm.close();
- realm = null;
- })
- .distinctUntilChanged();
- }).subscribeOn(scheduler);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement