Mercury-IM/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/chat/ChatViewModel.java

66 lines
2.4 KiB
Java
Raw Normal View History

2020-06-09 21:52:53 +02:00
package org.mercury_im.messenger.core.viewmodel.chat;
2020-06-11 16:04:06 +02:00
import org.mercury_im.messenger.core.Messenger;
2020-06-09 21:52:53 +02:00
import org.mercury_im.messenger.core.SchedulersFacade;
import org.mercury_im.messenger.core.data.repository.Repositories;
2020-07-13 01:39:26 +02:00
import org.mercury_im.messenger.core.util.Optional;
2020-06-09 21:52:53 +02:00
import org.mercury_im.messenger.core.viewmodel.MercuryViewModel;
2020-06-11 16:04:06 +02:00
import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.entity.contact.Peer;
import org.mercury_im.messenger.entity.message.Message;
2020-06-09 21:52:53 +02:00
2020-06-11 16:04:06 +02:00
import java.util.List;
import io.reactivex.Observable;
2020-07-13 01:39:26 +02:00
import io.reactivex.subjects.BehaviorSubject;
2020-06-11 16:04:06 +02:00
import lombok.Getter;
2020-06-09 21:52:53 +02:00
public class ChatViewModel implements MercuryViewModel {
2020-06-11 16:04:06 +02:00
private final Messenger messenger;
2020-06-09 21:52:53 +02:00
private final Repositories repositories;
private final SchedulersFacade schedulers;
2020-07-13 01:39:26 +02:00
private DirectChat chat;
2020-06-09 21:52:53 +02:00
2020-06-11 16:04:06 +02:00
@Getter
private Observable<Peer> peer;
@Getter
private Observable<List<Message>> messages;
@Getter
private Observable<String> contactDisplayName;
2020-07-13 01:39:26 +02:00
private final BehaviorSubject<Observable<List<Message>>> messageQueryObservable = BehaviorSubject.create();
2020-06-11 16:04:06 +02:00
public ChatViewModel(Messenger messenger,
Repositories repositories,
2020-07-13 01:39:26 +02:00
SchedulersFacade schedulers) {
2020-06-11 16:04:06 +02:00
this.messenger = messenger;
2020-06-09 21:52:53 +02:00
this.repositories = repositories;
this.schedulers = schedulers;
2020-07-13 01:39:26 +02:00
}
2020-06-11 16:04:06 +02:00
2020-07-13 01:39:26 +02:00
public void init(DirectChat directChat) {
this.chat = directChat;
2020-06-11 16:04:06 +02:00
//peer = repositories.getPeerRepository().observePeer(chat.getPeer());
2020-07-13 01:39:26 +02:00
messageQueryObservable.onNext(repositories.getMessageRepository().observeMessages(chat));
messages = Observable.switchOnNext(messageQueryObservable);
peer = repositories.getPeerRepository().observePeer(chat.getPeer().getId())
.filter(Optional::isPresent).map(Optional::getItem);
2020-06-11 16:04:06 +02:00
contactDisplayName = repositories.getPeerRepository().observePeer(chat.getPeer())
.map(optional -> optional.isPresent() ? optional.getItem().getDisplayName() : "DELETED");
}
2020-07-13 01:39:26 +02:00
public void onQueryTextChanged(String query) {
if (query.trim().isEmpty()) {
messageQueryObservable.onNext(repositories.getMessageRepository().observeMessages(chat));
} else {
messageQueryObservable.onNext(repositories.getMessageRepository().findMessagesWithBody(chat, query));
}
2020-06-09 21:52:53 +02:00
}
}