Commit f9a904a5 authored by Tiago Cunha's avatar Tiago Cunha

Crashes

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