/*
* Copyright (C) 2015 Actor LLC. <https://actor.im>
*/
package im.actor.core.modules.messaging;
import java.util.ArrayList;
import java.util.List;
import im.actor.core.api.ApiDialogGroup;
import im.actor.core.api.ApiMessage;
import im.actor.core.api.ApiMessageReaction;
import im.actor.core.api.ApiPeer;
import im.actor.core.api.updates.UpdateChatClear;
import im.actor.core.api.updates.UpdateChatDelete;
import im.actor.core.api.updates.UpdateChatDropCache;
import im.actor.core.api.updates.UpdateChatGroupsChanged;
import im.actor.core.api.updates.UpdateMessage;
import im.actor.core.api.updates.UpdateMessageContentChanged;
import im.actor.core.api.updates.UpdateMessageDelete;
import im.actor.core.api.updates.UpdateMessageRead;
import im.actor.core.api.updates.UpdateMessageReadByMe;
import im.actor.core.api.updates.UpdateMessageReceived;
import im.actor.core.api.updates.UpdateMessageSent;
import im.actor.core.api.updates.UpdateReactionsUpdate;
import im.actor.core.entity.Message;
import im.actor.core.entity.MessageState;
import im.actor.core.entity.Peer;
import im.actor.core.entity.Reaction;
import im.actor.core.entity.content.AbsContent;
import im.actor.core.modules.AbsModule;
import im.actor.core.modules.ModuleContext;
import im.actor.core.modules.messaging.actions.SenderActor;
import im.actor.core.modules.sequence.processor.SequenceProcessor;
import im.actor.core.network.parser.Update;
import im.actor.runtime.actors.messages.Void;
import im.actor.runtime.annotations.Verified;
import im.actor.runtime.promise.Promise;
import static im.actor.core.entity.EntityConverter.convert;
public class MessagesProcessor extends AbsModule implements SequenceProcessor {
public MessagesProcessor(ModuleContext context) {
super(context);
}
//
// Differences
//
@Verified
public Promise<Void> onDifferenceStart() {
return context().getMessagesModule().getRouter().onDifferenceStart();
}
@Verified
public Promise<Void> onDifferenceMessages(ApiPeer _peer, List<UpdateMessage> messages) {
Peer peer = convert(_peer);
ArrayList<Message> nMessages = new ArrayList<>();
for (UpdateMessage u : messages) {
AbsContent msgContent = AbsContent.fromMessage(u.getMessage());
nMessages.add(new Message(
u.getRid(),
u.getDate(),
u.getDate(),
u.getSenderUid(),
myUid() == u.getSenderUid() ? MessageState.SENT : MessageState.UNKNOWN,
msgContent));
}
return context().getMessagesModule().getRouter().onNewMessages(peer, nMessages);
}
@Verified
public Promise<Void> onDifferenceEnd() {
return context().getMessagesModule().getRouter().onDifferenceEnd();
}
//
// Update Handling
//
@Override
public Promise<Void> process(Update update) {
if (update instanceof UpdateMessage ||
update instanceof UpdateMessageRead ||
update instanceof UpdateMessageReadByMe ||
update instanceof UpdateMessageReceived ||
update instanceof UpdateMessageDelete ||
update instanceof UpdateMessageContentChanged ||
update instanceof UpdateChatClear ||
update instanceof UpdateChatDelete ||
update instanceof UpdateChatDropCache ||
update instanceof UpdateChatGroupsChanged ||
update instanceof UpdateReactionsUpdate ||
update instanceof UpdateMessageSent) {
return context().getMessagesModule().getRouter().onUpdate(update);
}
return null;
}
}