Fix message mapping
This commit is contained in:
parent
a0b496be65
commit
366d9b9df8
|
@ -3,6 +3,7 @@ package org.mercury_im.messenger.data.di;
|
|||
import org.mercury_im.messenger.data.repository.dao.AccountDao;
|
||||
import org.mercury_im.messenger.data.repository.dao.DirectChatDao;
|
||||
import org.mercury_im.messenger.data.repository.dao.GroupChatDao;
|
||||
import org.mercury_im.messenger.data.repository.dao.MessageDao;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
|
@ -22,13 +23,19 @@ public class DaoModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
public static DirectChatDao provideDirectChatDao(ReactiveEntityStore<Persistable> data) {
|
||||
static DirectChatDao provideDirectChatDao(ReactiveEntityStore<Persistable> data) {
|
||||
return new DirectChatDao(data);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public static GroupChatDao provideGroupChatDao(ReactiveEntityStore<Persistable> data) {
|
||||
static GroupChatDao provideGroupChatDao(ReactiveEntityStore<Persistable> data) {
|
||||
return new GroupChatDao(data);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static MessageDao provideMessageDao(ReactiveEntityStore<Persistable> data) {
|
||||
return new MessageDao(data);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -81,11 +81,9 @@ public class RepositoryModule {
|
|||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler,
|
||||
MessageMapping messageMapping,
|
||||
DirectChatMapping directChatMapping,
|
||||
GroupChatMapping groupChatMapping,
|
||||
DirectChatRepository directChatRepository,
|
||||
GroupChatRepository groupChatRepository) {
|
||||
return new XmppMessageRepository(data, ioScheduler, uiScheduler, messageMapping,
|
||||
directChatMapping, groupChatMapping, directChatRepository, groupChatRepository);
|
||||
GroupChatMapping groupChatMapping) {
|
||||
return new XmppMessageRepository(data, ioScheduler, uiScheduler,
|
||||
messageMapping, directChatMapping, groupChatMapping);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
@ -6,6 +6,9 @@ import org.mercury_im.messenger.entity.message.IMessage;
|
|||
import org.mercury_im.messenger.entity.message.Message;
|
||||
import org.mercury_im.messenger.entity.message.PayloadContainer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class MessageMapping extends AbstractMapping<Message, MessageModel> {
|
||||
|
@ -45,6 +48,16 @@ public class MessageMapping extends AbstractMapping<Message, MessageModel> {
|
|||
|
||||
@Override
|
||||
public Message mapToEntity(MessageModel model, Message entity) {
|
||||
return null;
|
||||
entity.setId(model.getId());
|
||||
entity.setSender(model.getSender());
|
||||
entity.setRecipient(model.getRecipient());
|
||||
entity.setTimestamp(model.getTimestamp());
|
||||
|
||||
List<PayloadContainer> payloadContainers = new ArrayList<>(entity.getMessagePayloads().size());
|
||||
for (MessagePayloadContainerModel containerModel : model.getPayloads()) {
|
||||
payloadContainers.add(messagePayloadContainerMapping.toEntity(containerModel));
|
||||
}
|
||||
entity.setMessagePayloads(payloadContainers);
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,12 +30,15 @@ public abstract class AbstractMessageModel implements Persistable {
|
|||
@OneToMany
|
||||
Set<MessagePayloadContainerModel> payloads;
|
||||
|
||||
@Column(nullable = false)
|
||||
@Column
|
||||
String legacyId;
|
||||
|
||||
@Column
|
||||
String originId;
|
||||
|
||||
@Column
|
||||
String stanzaId;
|
||||
|
||||
@Column
|
||||
String stanzaIdBy;
|
||||
}
|
||||
|
|
|
@ -39,8 +39,6 @@ public class XmppMessageRepository
|
|||
private final MessageMapping messageMapping;
|
||||
private final DirectChatMapping directChatMapping;
|
||||
private final GroupChatMapping groupChatMapping;
|
||||
private final DirectChatRepository directChatRepository;
|
||||
private final GroupChatRepository groupChatRepository;
|
||||
|
||||
private final DirectChatDao directChatDao;
|
||||
private final GroupChatDao groupChatDao;
|
||||
|
@ -50,19 +48,15 @@ public class XmppMessageRepository
|
|||
|
||||
@Inject
|
||||
public XmppMessageRepository(ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler,
|
||||
MessageMapping messageMapping,
|
||||
DirectChatMapping directChatMapping,
|
||||
GroupChatMapping groupChatMapping,
|
||||
DirectChatRepository directChatRepository,
|
||||
GroupChatRepository groupChatRepository) {
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler,
|
||||
MessageMapping messageMapping,
|
||||
DirectChatMapping directChatMapping,
|
||||
GroupChatMapping groupChatMapping) {
|
||||
super(data, subscriberScheduler, observerScheduler);
|
||||
this.messageMapping = messageMapping;
|
||||
this.directChatMapping = directChatMapping;
|
||||
this.groupChatMapping = groupChatMapping;
|
||||
this.directChatRepository = directChatRepository;
|
||||
this.groupChatRepository = groupChatRepository;
|
||||
this.directChatDao = new DirectChatDao(data);
|
||||
this.groupChatDao = new GroupChatDao(data);
|
||||
this.dao = new MessageDao(data);
|
||||
|
@ -180,6 +174,15 @@ public class XmppMessageRepository
|
|||
@Override
|
||||
public Single<Message> upsertMessage(DirectChat chat, Message message) {
|
||||
return null;
|
||||
/*
|
||||
return data().select(DirectMessagesRelation.class)
|
||||
.where(DirectMessagesRelation.CHAT_ID.eq(chat.getId()))
|
||||
.and(DirectMessagesRelation.MESSAGE_ID.eq(message.getId()))
|
||||
.get().maybe()
|
||||
.switchIfEmpty(Single.just(message)
|
||||
.map(messageMapping::toModel)
|
||||
.flatMap(messageModel -> )
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -199,7 +202,9 @@ public class XmppMessageRepository
|
|||
|
||||
@Override
|
||||
public Completable deleteMessage(Message message) {
|
||||
return null;
|
||||
return data().delete(MessageModel.class)
|
||||
.where(MessageModel.ID.eq(message.getId()))
|
||||
.get().single().ignoreElement();
|
||||
}
|
||||
|
||||
private DirectMessagesRelation toRelation(DirectChatModel chat, MessageModel message) {
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.mercury_im.messenger.data.model.GroupChatModel;
|
|||
import org.mercury_im.messenger.data.model.GroupMessagesRelation;
|
||||
import org.mercury_im.messenger.data.model.MessageModel;
|
||||
|
||||
import io.reactivex.Single;
|
||||
import io.requery.Persistable;
|
||||
import io.requery.reactivex.ReactiveEntityStore;
|
||||
import io.requery.reactivex.ReactiveResult;
|
||||
|
@ -21,6 +22,10 @@ public class MessageDao extends RequeryDao {
|
|||
this.groupChatDao = new GroupChatDao(data);
|
||||
}
|
||||
|
||||
public Single<MessageModel> insert(MessageModel message) {
|
||||
return data().insert(message);
|
||||
}
|
||||
|
||||
public ReactiveResult<MessageModel> get(long messageId) {
|
||||
return data().select(MessageModel.class)
|
||||
.where(MessageModel.ID.eq(messageId))
|
||||
|
|
|
@ -10,6 +10,17 @@ import org.mercury_im.messenger.entity.chat.DirectChat;
|
|||
import org.mercury_im.messenger.entity.chat.IDirectChat;
|
||||
import org.mercury_im.messenger.entity.contact.IPeer;
|
||||
import org.mercury_im.messenger.entity.contact.Peer;
|
||||
import org.mercury_im.messenger.entity.message.IMessage;
|
||||
import org.mercury_im.messenger.entity.message.IPayloadContainer;
|
||||
import org.mercury_im.messenger.entity.message.Message;
|
||||
import org.mercury_im.messenger.entity.message.PayloadContainer;
|
||||
import org.mercury_im.messenger.entity.message.content.TextPayload;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
@ -32,6 +43,9 @@ public class AccountRepositoryTest {
|
|||
@Inject
|
||||
XmppPeerRepository contactRepository;
|
||||
|
||||
@Inject
|
||||
XmppMessageRepository messageRepository;
|
||||
|
||||
@Inject
|
||||
public AccountRepositoryTest() {
|
||||
RepositoryTestComponent testComponent = DaggerRepositoryTestComponent.builder()
|
||||
|
@ -62,6 +76,21 @@ public class AccountRepositoryTest {
|
|||
.blockingGet();
|
||||
assertEquals(1, chatModel.getId());
|
||||
|
||||
Message message = new IMessage();
|
||||
message.setSender("test@test.test");
|
||||
message.setRecipient("peer@peer.peer");
|
||||
message.setTimestamp(new Date());
|
||||
PayloadContainer container = new IPayloadContainer();
|
||||
TextPayload body = new TextPayload();
|
||||
body.setBody("Hallo");
|
||||
container.setMessageContents(Collections.singletonList(body));
|
||||
List<PayloadContainer> payloadContainers = new ArrayList<>();
|
||||
payloadContainers.add(container);
|
||||
message.setMessagePayloads(payloadContainers);
|
||||
|
||||
Message _message = messageRepository.insertMessage(directChat, message)
|
||||
.blockingGet();
|
||||
|
||||
dataStore.close();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue