Commit b89f44e0 authored by Leonardo Aramaki's avatar Leonardo Aramaki

Do not send transaction to Realm as an Observable but a plain synchronous transaction instead

parent 33c1802f
...@@ -2,17 +2,14 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,17 +2,14 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Looper; import android.os.Looper;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.Single; import org.intellij.lang.annotations.Flow;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Case;
import io.realm.Realm;
import io.realm.RealmResults;
import io.realm.Sort;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.core.SortDirection; import chat.rocket.core.SortDirection;
import chat.rocket.core.models.Room; import chat.rocket.core.models.Room;
import chat.rocket.core.models.RoomHistoryState; import chat.rocket.core.models.RoomHistoryState;
...@@ -21,6 +18,14 @@ import chat.rocket.persistence.realm.RealmStore; ...@@ -21,6 +18,14 @@ import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmRoom; import chat.rocket.persistence.realm.models.ddp.RealmRoom;
import chat.rocket.persistence.realm.models.internal.LoadMessageProcedure; import chat.rocket.persistence.realm.models.internal.LoadMessageProcedure;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import hu.akarnokd.rxjava.interop.RxJavaInterop;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Case;
import io.realm.Realm;
import io.realm.RealmResults;
import io.realm.Sort;
import io.realm.log.RealmLog;
public class RealmRoomRepository extends RealmRepository implements RoomRepository { public class RealmRoomRepository extends RealmRepository implements RoomRepository {
...@@ -142,10 +147,21 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito ...@@ -142,10 +147,21 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito
loadMessage.setHasNext(!roomHistoryState.isComplete()); loadMessage.setHasNext(!roomHistoryState.isComplete());
loadMessage.setTimestamp(roomHistoryState.getTimestamp()); loadMessage.setTimestamp(roomHistoryState.getTimestamp());
realm.beginTransaction(); return Flowable.defer(() -> {
realm.beginTransaction();
return RxJavaInterop.toV2Flowable(realm.copyToRealmOrUpdate(loadMessage) try {
.asObservable()) LoadMessageProcedure loadMessageProcedure = realm.copyToRealmOrUpdate(loadMessage);
realm.commitTransaction();
return Flowable.just(loadMessageProcedure);
} catch (Throwable e) {
if (realm.isInTransaction()) {
realm.cancelTransaction();
} else {
RealmLog.warn("Could not cancel transaction, not currently in a transaction.");
}
throw e;
}
})
.filter(realmObject -> realmObject.isLoaded() && realmObject.isValid()) .filter(realmObject -> realmObject.isLoaded() && realmObject.isValid())
.firstElement() .firstElement()
.doOnSuccess(it -> realm.commitTransaction()) .doOnSuccess(it -> realm.commitTransaction())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment