Commit b920ef07 authored by Tiago Cunha's avatar Tiago Cunha

Realm repositories

parent 5c68ce74
package chat.rocket.persistence.realm.repositories;
import android.os.Looper;
import android.support.v4.util.Pair;
import com.fernandocejas.arrow.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
import chat.rocket.core.models.Permission;
import chat.rocket.core.repositories.PermissionRepository;
import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmPermission;
import hu.akarnokd.rxjava.interop.RxJavaInterop;
public class RealmPermissionRepository extends RealmRepository implements PermissionRepository {
private final String hostname;
public RealmPermissionRepository(String hostname) {
this.hostname = hostname;
}
@Override
public Single<Optional<Permission>> getById(String id) {
return Single.defer(() -> Flowable.using(
() -> new Pair<>(RealmStore.getRealm(hostname), Looper.myLooper()),
pair -> RxJavaInterop.toV2Flowable(
pair.first.where(RealmPermission.class)
.equalTo(RealmPermission.Columns.ID, id)
.findAll()
.<RealmResults<RealmPermission>>asObservable()),
pair -> close(pair.first, pair.second)
)
.unsubscribeOn(AndroidSchedulers.from(Looper.myLooper()))
.filter(it -> it.isLoaded() && it.isValid() && it.size() > 0)
.map(it -> Optional.of(it.get(0).asPermission()))
.first(Optional.absent()));
}
}
...@@ -17,9 +17,9 @@ public class RealmRepository { ...@@ -17,9 +17,9 @@ public class RealmRepository {
new Handler(looper).post(realm::close); new Handler(looper).post(realm::close);
} }
protected <T extends RealmObject> List<T> safeSubList(RealmResults<T> realmObjects, <T extends RealmObject> List<T> safeSubList(RealmResults<T> realmObjects,
int fromIndex, int fromIndex,
int toIndex) { int toIndex) {
return realmObjects.subList(Math.max(0, fromIndex), Math.min(realmObjects.size(), toIndex)); return realmObjects.subList(Math.max(0, fromIndex), Math.min(realmObjects.size(), toIndex));
} }
} }
package chat.rocket.persistence.realm.repositories;
import android.os.Looper;
import android.support.v4.util.Pair;
import com.fernandocejas.arrow.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
import chat.rocket.core.models.Room;
import chat.rocket.core.models.RoomRole;
import chat.rocket.core.models.User;
import chat.rocket.core.repositories.RoomRoleRepository;
import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmRoomRole;
import hu.akarnokd.rxjava.interop.RxJavaInterop;
public class RealmRoomRoleRepository extends RealmRepository implements RoomRoleRepository {
private final String hostname;
public RealmRoomRoleRepository(String hostname) {
this.hostname = hostname;
}
@Override
public Single<Optional<RoomRole>> getFor(Room room, User user) {
return Single.defer(() -> Flowable.using(
() -> new Pair<>(RealmStore.getRealm(hostname), Looper.myLooper()),
pair -> RxJavaInterop.toV2Flowable(
pair.first.where(RealmRoomRole.class)
.equalTo(RealmRoomRole.Columns.ROOM_ID, room.getId())
.equalTo(RealmRoomRole.Columns.USER + ".id", user.getId())
.findAll()
.<RealmResults<RealmRoomRole>>asObservable()),
pair -> close(pair.first, pair.second)
)
.unsubscribeOn(AndroidSchedulers.from(Looper.myLooper()))
.filter(it -> it.isLoaded() && it.isValid() && it.size() > 0)
.map(it -> Optional.of(it.get(0).asRoomRole()))
.first(Optional.absent()));
}
}
...@@ -3,13 +3,9 @@ package chat.rocket.core.repositories; ...@@ -3,13 +3,9 @@ package chat.rocket.core.repositories;
import com.fernandocejas.arrow.optional.Optional; import com.fernandocejas.arrow.optional.Optional;
import io.reactivex.Single; import io.reactivex.Single;
import java.util.List;
import chat.rocket.core.models.Permission; import chat.rocket.core.models.Permission;
import chat.rocket.core.models.Role;
public interface PermissionRepository { public interface PermissionRepository {
Single<List<Permission>> getFor(Role role);
Single<Optional<Permission>> getById(String id); Single<Optional<Permission>> getById(String id);
} }
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