Commit f9a904a5 authored by Tiago Cunha's avatar Tiago Cunha

Crashes

parent 6020eaf7
......@@ -152,8 +152,10 @@ public class RoomPresenter extends BasePresenter<RoomContract.View>
@Override
public void onMarkAsRead() {
final Disposable subscription = roomRepository.getById(roomId)
.filter(Optional::isPresent)
.map(Optional::get)
.firstElement()
.filter(room -> room != null && room.isAlert())
.filter(Room::isAlert)
.subscribeOn(AndroidSchedulers.from(BackgroundLooper.get()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
......@@ -167,6 +169,8 @@ public class RoomPresenter extends BasePresenter<RoomContract.View>
private void getRoomInfo() {
final Disposable subscription = roomRepository.getById(roomId)
.distinctUntilChanged()
.filter(Optional::isPresent)
.map(Optional::get)
.subscribeOn(AndroidSchedulers.from(BackgroundLooper.get()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
......@@ -198,6 +202,8 @@ public class RoomPresenter extends BasePresenter<RoomContract.View>
private void getMessages() {
final Disposable subscription = roomRepository.getById(roomId)
.filter(Optional::isPresent)
.map(Optional::get)
.flatMap(messageInteractor::getAllFrom)
.subscribeOn(AndroidSchedulers.from(BackgroundLooper.get()))
.observeOn(AndroidSchedulers.mainThread())
......@@ -238,6 +244,8 @@ public class RoomPresenter extends BasePresenter<RoomContract.View>
private Single<Room> getSingleRoom() {
return roomRepository.getById(roomId)
.filter(Optional::isPresent)
.map(Optional::get)
.firstElement()
.toSingle();
}
......
......@@ -9,6 +9,7 @@ import android.view.ViewGroup;
import java.util.List;
import chat.rocket.android.R;
import chat.rocket.android.helper.TextUtils;
import chat.rocket.core.models.User;
import chat.rocket.persistence.realm.models.ddp.RealmUser;
import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.renderer.UserRenderer;
......@@ -47,16 +48,19 @@ public class RoomUserAdapter extends RecyclerView.Adapter<RoomUserViewHolder> {
return;
}
RealmUser user = realmHelper.executeTransactionForRead(realm ->
RealmUser realmUser = realmHelper.executeTransactionForRead(realm ->
realm.where(RealmUser.class).equalTo(RealmUser.USERNAME, username).findFirst());
if (user == null) {
user = new RealmUser();
user.setUsername(username);
new UserRenderer(context, user.asUser())
if (realmUser == null) {
User user = User.builder()
.setId("some-local-is")
.setUsername(username)
.setUtcOffset(0)
.build();
new UserRenderer(context, user)
.avatarInto(holder.avatar, hostname)
.usernameInto(holder.username);
} else {
new UserRenderer(context, user.asUser())
new UserRenderer(context, realmUser.asUser())
.statusColorInto(holder.status)
.avatarInto(holder.avatar, hostname)
.usernameInto(holder.username);
......
......@@ -117,8 +117,7 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe
.equalTo(RealmMessage.ID, message.getId())
.findAll()
.<RealmResults<RealmMessage>>asObservable())
.filter(realmObject -> realmObject != null
&& realmObject.isLoaded() && realmObject.isValid())
.filter(realmObject -> realmObject.isLoaded() && realmObject.isValid())
.firstElement()
.toSingle()
.flatMap(realmMessages -> Single.just(realmMessages.deleteAllFromRealm()))
......
......@@ -44,20 +44,36 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito
}
@Override
public Flowable<Room> getById(String roomId) {
public Flowable<Optional<Room>> getById(String roomId) {
return Flowable.defer(() -> Flowable.using(
() -> new Pair<>(RealmStore.getRealm(hostname), Looper.myLooper()),
pair -> RxJavaInterop.toV2Flowable(
pair.first.where(RealmRoom.class)
.equalTo(RealmRoom.ROOM_ID, roomId)
.findFirst()
.<RealmRoom>asObservable()
.filter(roomSubscription -> roomSubscription != null && roomSubscription.isLoaded()
&& roomSubscription.isValid())),
pair -> {
RealmRoom realmRoom = pair.first.where(RealmRoom.class)
.equalTo(RealmRoom.ROOM_ID, roomId)
.findFirst();
if (realmRoom == null) {
return Flowable.just(Optional.<RealmRoom>absent());
}
return RxJavaInterop.toV2Flowable(
realmRoom
.<RealmRoom>asObservable()
.filter(
roomSubscription -> roomSubscription.isLoaded()
&& roomSubscription.isValid())
.map(Optional::of));
},
pair -> close(pair.first, pair.second)
)
.unsubscribeOn(AndroidSchedulers.from(Looper.myLooper()))
.map(RealmRoom::asRoom));
.map(optional -> {
if (optional.isPresent()) {
return Optional.of(optional.get().asRoom());
}
return Optional.absent();
}));
}
@Override
......
......@@ -12,7 +12,7 @@ public interface RoomRepository {
Flowable<List<Room>> getAll();
Flowable<Room> getById(String roomId);
Flowable<Optional<Room>> getById(String roomId);
Flowable<Optional<RoomHistoryState>> getHistoryStateByRoomId(String roomId);
......
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