2019-11-03 06:33:52 +01:00
|
|
|
package org.mercury_im.messenger.xmpp.repository;
|
2019-05-19 02:00:33 +02:00
|
|
|
|
2019-11-03 06:33:52 +01:00
|
|
|
import org.mercury_im.messenger.xmpp.model.ChatModel;
|
|
|
|
import org.mercury_im.messenger.xmpp.model.ContactModel;
|
|
|
|
import org.mercury_im.messenger.xmpp.model.EntityModel;
|
|
|
|
import org.mercury_im.messenger.xmpp.model.MessageModel;
|
2019-10-28 14:56:56 +01:00
|
|
|
import org.mercury_im.messenger.thread_utils.ThreadUtils;
|
2019-05-19 02:00:33 +02:00
|
|
|
|
2019-10-28 14:56:56 +01:00
|
|
|
import javax.inject.Inject;
|
|
|
|
import javax.inject.Named;
|
|
|
|
|
2019-08-03 19:05:50 +02:00
|
|
|
import io.reactivex.Observable;
|
2019-10-28 14:56:56 +01:00
|
|
|
import io.reactivex.Scheduler;
|
|
|
|
import io.requery.Persistable;
|
|
|
|
import io.requery.reactivex.ReactiveEntityStore;
|
|
|
|
import io.requery.reactivex.ReactiveResult;
|
|
|
|
|
|
|
|
public class MessageRepository extends AbstractRepository<MessageModel> {
|
|
|
|
|
|
|
|
@Inject
|
|
|
|
public MessageRepository(ReactiveEntityStore<Persistable> data,
|
|
|
|
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
|
|
|
|
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler) {
|
|
|
|
super(MessageModel.class, data, subscriberScheduler, observerScheduler);
|
|
|
|
}
|
|
|
|
|
|
|
|
public Observable<ReactiveResult<MessageModel>> getAllMessagesOfChat(ChatModel chat) {
|
|
|
|
return getAllMessagesOfChat(chat.getId());
|
|
|
|
}
|
|
|
|
|
|
|
|
public Observable<ReactiveResult<MessageModel>> getAllMessagesOfChat(long chatId) {
|
|
|
|
return data().select(MessageModel.class).where(MessageModel.CHAT_ID.eq(chatId))
|
|
|
|
.orderBy(MessageModel.TIMESTAMP.asc())
|
|
|
|
.get().observableResult()
|
|
|
|
.subscribeOn(subscriberScheduler())
|
|
|
|
.observeOn(observerScheduler());
|
|
|
|
}
|
|
|
|
|
|
|
|
public Observable<ReactiveResult<MessageModel>> getAllMessagesOfEntity(EntityModel entity) {
|
|
|
|
return getAllMessagesOfEntity(entity.getId());
|
|
|
|
}
|
|
|
|
|
|
|
|
public Observable<ReactiveResult<MessageModel>> getAllMessagesOfEntity(long entityId) {
|
|
|
|
return data().select(MessageModel.class).from(MessageModel.class)
|
|
|
|
.join(ChatModel.class).on(MessageModel.CHAT_ID.eq(ChatModel.ID))
|
|
|
|
.where(ChatModel.PEER_ID.eq(entityId))
|
|
|
|
.orderBy(MessageModel.TIMESTAMP.asc())
|
|
|
|
.get().observableResult()
|
|
|
|
.subscribeOn(subscriberScheduler())
|
|
|
|
.observeOn(observerScheduler());
|
|
|
|
}
|
|
|
|
|
|
|
|
public Observable<ReactiveResult<MessageModel>> getAllMessagesOfContact(ContactModel contact) {
|
|
|
|
return getAllMessagesOfContact(contact.getId());
|
|
|
|
}
|
|
|
|
|
|
|
|
public Observable<ReactiveResult<MessageModel>> getAllMessagesOfContact(long contactId) {
|
|
|
|
return data().select(MessageModel.class).join(ChatModel.class).on(MessageModel.CHAT_ID.eq(ChatModel.ID))
|
|
|
|
.join(EntityModel.class).on(ChatModel.PEER_ID.eq(EntityModel.ID))
|
|
|
|
.join(ContactModel.class).on(EntityModel.ID.eq(ContactModel.ENTITY_ID))
|
|
|
|
.orderBy(MessageModel.TIMESTAMP.asc())
|
|
|
|
.get().observableResult()
|
|
|
|
.subscribeOn(subscriberScheduler())
|
|
|
|
.observeOn(observerScheduler());
|
|
|
|
}
|
2019-05-19 02:00:33 +02:00
|
|
|
}
|