use of io.realm.OrderedCollectionChangeSet in project realm-java by realm.
the class RealmObservableFactory method changesetsFrom.
@Override
public <E> Observable<CollectionChange<RealmResults<E>>> changesetsFrom(DynamicRealm realm, final RealmResults<E> results) {
if (realm.isFrozen()) {
return Observable.just(new CollectionChange<RealmResults<E>>(results, null));
}
final RealmConfiguration realmConfig = realm.getConfiguration();
Scheduler scheduler = getScheduler();
return Observable.create(new ObservableOnSubscribe<CollectionChange<RealmResults<E>>>() {
@Override
public void subscribe(final ObservableEmitter<CollectionChange<RealmResults<E>>> emitter) {
// If the Realm has been closed, just create an empty Observable because we assume it is going to be disposed shortly.
if (!results.isValid())
return;
// Gets instance to make sure that the Realm is open for as long as the
// Observable is subscribed to it.
final DynamicRealm observableRealm = DynamicRealm.getInstance(realmConfig);
resultsRefs.get().acquireReference(results);
final OrderedRealmCollectionChangeListener<RealmResults<E>> listener = new OrderedRealmCollectionChangeListener<RealmResults<E>>() {
@Override
public void onChange(RealmResults<E> results, OrderedCollectionChangeSet changeSet) {
if (!emitter.isDisposed()) {
emitter.onNext(new CollectionChange<>(returnFrozenObjects ? results.freeze() : results, changeSet));
}
}
};
results.addChangeListener(listener);
// Cleanup when stream is disposed
emitter.setDisposable(Disposables.fromRunnable(new Runnable() {
@Override
public void run() {
if (!observableRealm.isClosed()) {
results.removeChangeListener(listener);
observableRealm.close();
}
resultsRefs.get().releaseReference(results);
}
}));
// Emit current value immediately
emitter.onNext(new CollectionChange<>(returnFrozenObjects ? results.freeze() : results, null));
}
}).subscribeOn(scheduler).unsubscribeOn(scheduler);
}
use of io.realm.OrderedCollectionChangeSet in project realm-java by realm.
the class RealmObservableFactory method changesetsFrom.
@Override
public <E> Observable<CollectionChange<RealmList<E>>> changesetsFrom(DynamicRealm realm, final RealmList<E> list) {
if (realm.isFrozen()) {
return Observable.just(new CollectionChange<RealmList<E>>(list, null));
}
final RealmConfiguration realmConfig = realm.getConfiguration();
Scheduler scheduler = getScheduler();
return Observable.create(new ObservableOnSubscribe<CollectionChange<RealmList<E>>>() {
@Override
public void subscribe(final ObservableEmitter<CollectionChange<RealmList<E>>> emitter) {
// If the Realm has been closed, just create an empty Observable because we assume it is going to be disposed shortly.
if (!list.isValid())
return;
// Gets instance to make sure that the Realm is open for as long as the
// Observable is subscribed to it.
final DynamicRealm observableRealm = DynamicRealm.getInstance(realmConfig);
listRefs.get().acquireReference(list);
final OrderedRealmCollectionChangeListener<RealmList<E>> listener = new OrderedRealmCollectionChangeListener<RealmList<E>>() {
@Override
public void onChange(RealmList<E> list, OrderedCollectionChangeSet changeSet) {
if (!list.isValid()) {
// Terminate stream if list is no longer valid. This indicates
// the parent object has been deleted, so no further updates
// will be coming.
emitter.onComplete();
return;
}
if (!emitter.isDisposed()) {
emitter.onNext(new CollectionChange<>(returnFrozenObjects ? list.freeze() : list, changeSet));
}
}
};
list.addChangeListener(listener);
// Cleanup when stream is disposed
emitter.setDisposable(Disposables.fromRunnable(new Runnable() {
@Override
public void run() {
if (!observableRealm.isClosed()) {
list.removeChangeListener(listener);
observableRealm.close();
}
listRefs.get().releaseReference(list);
}
}));
// Emit current value immediately
emitter.onNext(new CollectionChange<>(returnFrozenObjects ? list.freeze() : list, null));
}
}).subscribeOn(scheduler).unsubscribeOn(scheduler);
}
use of io.realm.OrderedCollectionChangeSet in project realm-java by realm.
the class RealmObservableFactory method changesetsFrom.
@Override
public <E> Observable<CollectionChange<RealmList<E>>> changesetsFrom(Realm realm, final RealmList<E> list) {
if (realm.isFrozen()) {
return Observable.just(new CollectionChange<RealmList<E>>(list, null));
}
final RealmConfiguration realmConfig = realm.getConfiguration();
Scheduler scheduler = getScheduler();
return Observable.create(new ObservableOnSubscribe<CollectionChange<RealmList<E>>>() {
@Override
public void subscribe(final ObservableEmitter<CollectionChange<RealmList<E>>> emitter) {
// If the Realm has been closed, just create an empty Observable because we assume it is going to be disposed shortly.
if (!list.isValid())
return;
// Gets instance to make sure that the Realm is open for as long as the
// Observable is subscribed to it.
final Realm observableRealm = Realm.getInstance(realmConfig);
listRefs.get().acquireReference(list);
final OrderedRealmCollectionChangeListener<RealmList<E>> listener = new OrderedRealmCollectionChangeListener<RealmList<E>>() {
@Override
public void onChange(RealmList<E> list, OrderedCollectionChangeSet changeSet) {
if (!list.isValid()) {
// Terminate stream if list is no longer valid. This indicates
// the parent object has been deleted, so no further updates
// will be coming.
emitter.onComplete();
return;
}
if (!emitter.isDisposed()) {
emitter.onNext(new CollectionChange<>(returnFrozenObjects ? list.freeze() : list, changeSet));
}
}
};
list.addChangeListener(listener);
// Cleanup when stream is disposed
emitter.setDisposable(Disposables.fromRunnable(new Runnable() {
@Override
public void run() {
if (!observableRealm.isClosed()) {
list.removeChangeListener(listener);
observableRealm.close();
}
listRefs.get().releaseReference(list);
}
}));
// Emit current value immediately
emitter.onNext(new CollectionChange<>(returnFrozenObjects ? list.freeze() : list, null));
}
}).subscribeOn(scheduler).unsubscribeOn(scheduler);
}
use of io.realm.OrderedCollectionChangeSet in project realm-java by realm.
the class RealmObservableFactory method changesetsFrom.
@Override
public <E> Observable<CollectionChange<RealmResults<E>>> changesetsFrom(Realm realm, final RealmResults<E> results) {
if (realm.isFrozen()) {
return Observable.just(new CollectionChange<RealmResults<E>>(results, null));
}
final RealmConfiguration realmConfig = realm.getConfiguration();
Scheduler scheduler = getScheduler();
return Observable.create(new ObservableOnSubscribe<CollectionChange<RealmResults<E>>>() {
@Override
public void subscribe(final ObservableEmitter<CollectionChange<RealmResults<E>>> emitter) {
// If the Realm has been closed, just create an empty Observable because we assume it is going to be disposed shortly.
if (!results.isValid())
return;
// Gets instance to make sure that the Realm is open for as long as the
// Observable is subscribed to it.
final Realm observableRealm = Realm.getInstance(realmConfig);
resultsRefs.get().acquireReference(results);
final OrderedRealmCollectionChangeListener<RealmResults<E>> listener = new OrderedRealmCollectionChangeListener<RealmResults<E>>() {
@Override
public void onChange(RealmResults<E> e, OrderedCollectionChangeSet changeSet) {
if (!emitter.isDisposed()) {
emitter.onNext(new CollectionChange<RealmResults<E>>(returnFrozenObjects ? results.freeze() : results, changeSet));
}
}
};
results.addChangeListener(listener);
// Cleanup when stream is disposed
emitter.setDisposable(Disposables.fromRunnable(new Runnable() {
@Override
public void run() {
if (!observableRealm.isClosed()) {
results.removeChangeListener(listener);
observableRealm.close();
}
resultsRefs.get().releaseReference(results);
}
}));
// Emit current value immediately
emitter.onNext(new CollectionChange<>(returnFrozenObjects ? results.freeze() : results, null));
}
}).subscribeOn(scheduler).unsubscribeOn(scheduler);
}
Aggregations