Search in sources :

Example 1 with ApiPeer

use of im.actor.core.api.ApiPeer in project actor-platform by actorapp.

the class MessagesModule method updateMessage.

public Promise<Void> updateMessage(final Peer peer, final String message, final long rid) {
    context().getTypingModule().onMessageSent(peer);
    ArrayList<Integer> mentions = new ArrayList<>();
    TextContent content = TextContent.create(message, null, mentions);
    if (peer.getPeerType() == PeerType.GROUP) {
        Group group = groups().getValue(peer.getPeerId());
        String lowText = message.toLowerCase();
        for (GroupMember member : group.getMembers()) {
            User user = users().getValue(member.getUid());
            if (user.getNick() != null) {
                String nick = "@" + user.getNick().toLowerCase();
                // TODO: Better filtering
                if (lowText.contains(nick + ":") || lowText.contains(nick + " ") || lowText.contains(" " + nick) || lowText.endsWith(nick) || lowText.equals(nick)) {
                    mentions.add(user.getUid());
                }
            }
        }
    }
    ApiMessage editMessage = new ApiTextMessage(message, content.getMentions(), content.getTextMessageEx());
    return buildOutPeer(peer).flatMap(apiOutPeer -> api(new RequestUpdateMessage(apiOutPeer, rid, editMessage))).flatMap(responseSeqDate -> updates().applyUpdate(responseSeqDate.getSeq(), responseSeqDate.getState(), new UpdateMessageContentChanged(new ApiPeer(peer.getPeerType().toApi(), peer.getPeerId()), rid, editMessage)));
}
Also used : RequestMessageSetReaction(im.actor.core.api.rpc.RequestMessageSetReaction) DialogsInt(im.actor.core.modules.messaging.dialogs.DialogsInt) ModuleContext(im.actor.core.modules.ModuleContext) ConversationVM(im.actor.core.viewmodel.ConversationVM) FastThumb(im.actor.core.entity.content.FastThumb) RequestDeleteChat(im.actor.core.api.rpc.RequestDeleteChat) UpdateChatGroupsChanged(im.actor.core.api.updates.UpdateChatGroupsChanged) DialogGroupsVM(im.actor.core.viewmodel.DialogGroupsVM) ResponseReactionsResponse(im.actor.core.api.rpc.ResponseReactionsResponse) JsonContent(im.actor.core.entity.content.JsonContent) SyncKeyValue(im.actor.runtime.storage.SyncKeyValue) RouterInt(im.actor.core.modules.messaging.router.RouterInt) RequestFavouriteDialog(im.actor.core.api.rpc.RequestFavouriteDialog) RequestUnfavouriteDialog(im.actor.core.api.rpc.RequestUnfavouriteDialog) Actor(im.actor.runtime.actors.Actor) ApiPeer(im.actor.core.api.ApiPeer) CommandCallback(im.actor.core.viewmodel.CommandCallback) MessageDeleteActor(im.actor.core.modules.messaging.actions.MessageDeleteActor) TextContent(im.actor.core.entity.content.TextContent) Sticker(im.actor.core.entity.Sticker) RpcInternalException(im.actor.core.network.RpcInternalException) ApiTextMessage(im.actor.core.api.ApiTextMessage) UpdateReactionsUpdate(im.actor.core.api.updates.UpdateReactionsUpdate) Void(im.actor.runtime.actors.messages.Void) ResponseDialogsOrder(im.actor.core.api.rpc.ResponseDialogsOrder) GroupMember(im.actor.core.entity.GroupMember) ArchivedDialogsActor(im.actor.core.modules.messaging.history.ArchivedDialogsActor) ApiOutPeer(im.actor.core.api.ApiOutPeer) MVVMCollection(im.actor.runtime.mvvm.MVVMCollection) ActorSystem.system(im.actor.runtime.actors.ActorSystem.system) DialogsHistoryActor(im.actor.core.modules.messaging.history.DialogsHistoryActor) Nullable(org.jetbrains.annotations.Nullable) CursorReceiverActor(im.actor.core.modules.messaging.actions.CursorReceiverActor) PromiseResolver(im.actor.runtime.promise.PromiseResolver) RequestClearChat(im.actor.core.api.rpc.RequestClearChat) UpdateMessageContentChanged(im.actor.core.api.updates.UpdateMessageContentChanged) Peer(im.actor.core.entity.Peer) Props(im.actor.runtime.actors.Props) Message(im.actor.core.entity.Message) Dialog(im.actor.core.entity.Dialog) NotNull(org.jetbrains.annotations.NotNull) Function(im.actor.runtime.function.Function) ApiPeerType(im.actor.core.api.ApiPeerType) RequestArchiveChat(im.actor.core.api.rpc.RequestArchiveChat) RequestUpdateMessage(im.actor.core.api.rpc.RequestUpdateMessage) ResponseSeq(im.actor.core.api.rpc.ResponseSeq) RequestMessageRemoveReaction(im.actor.core.api.rpc.RequestMessageRemoveReaction) ResponseSeqDate(im.actor.core.api.rpc.ResponseSeqDate) ActorCreator(im.actor.runtime.actors.ActorCreator) Promise(im.actor.runtime.promise.Promise) HashMap(java.util.HashMap) UpdateChatClear(im.actor.core.api.updates.UpdateChatClear) PromiseFunc(im.actor.runtime.promise.PromiseFunc) ArrayList(java.util.ArrayList) ConversationState(im.actor.core.entity.ConversationState) AbsModule(im.actor.core.modules.AbsModule) User(im.actor.core.entity.User) BusSubscriber(im.actor.runtime.eventbus.BusSubscriber) ConversationHistoryActor(im.actor.core.modules.messaging.history.ConversationHistoryActor) PeerChatOpened(im.actor.core.events.PeerChatOpened) RpcCallback(im.actor.core.network.RpcCallback) ActorRef(im.actor.runtime.actors.ActorRef) ListEngine(im.actor.runtime.storage.ListEngine) PeerType(im.actor.core.entity.PeerType) Command(im.actor.core.viewmodel.Command) ConversationHistory(im.actor.core.modules.messaging.history.ConversationHistory) AbsContent(im.actor.core.entity.content.AbsContent) PeerChatPreload(im.actor.core.events.PeerChatPreload) ApiMessage(im.actor.core.api.ApiMessage) Group(im.actor.core.entity.Group) RpcException(im.actor.core.network.RpcException) CursorReaderActor(im.actor.core.modules.messaging.actions.CursorReaderActor) Storage(im.actor.runtime.Storage) DialogsActor(im.actor.core.modules.messaging.dialogs.DialogsActor) SenderActor(im.actor.core.modules.messaging.actions.SenderActor) FileSystemReference(im.actor.runtime.files.FileSystemReference) ResponseLoadArchived(im.actor.core.api.rpc.ResponseLoadArchived) UpdateChatDelete(im.actor.core.api.updates.UpdateChatDelete) Event(im.actor.runtime.eventbus.Event) SeqUpdate(im.actor.core.api.base.SeqUpdate) Group(im.actor.core.entity.Group) GroupMember(im.actor.core.entity.GroupMember) UpdateMessageContentChanged(im.actor.core.api.updates.UpdateMessageContentChanged) User(im.actor.core.entity.User) ApiTextMessage(im.actor.core.api.ApiTextMessage) ArrayList(java.util.ArrayList) ApiMessage(im.actor.core.api.ApiMessage) TextContent(im.actor.core.entity.content.TextContent) RequestUpdateMessage(im.actor.core.api.rpc.RequestUpdateMessage) ApiPeer(im.actor.core.api.ApiPeer)

Example 2 with ApiPeer

use of im.actor.core.api.ApiPeer in project actor-platform by actorapp.

the class MessagesProcessor method onDifferenceMessages.

@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);
}
Also used : UpdateMessage(im.actor.core.api.updates.UpdateMessage) UpdateMessage(im.actor.core.api.updates.UpdateMessage) ApiMessage(im.actor.core.api.ApiMessage) Message(im.actor.core.entity.Message) ApiPeer(im.actor.core.api.ApiPeer) Peer(im.actor.core.entity.Peer) ArrayList(java.util.ArrayList) AbsContent(im.actor.core.entity.content.AbsContent) Verified(im.actor.runtime.annotations.Verified)

Example 3 with ApiPeer

use of im.actor.core.api.ApiPeer in project actor-platform by actorapp.

the class MessageDeleteActor method performDelete.

public void performDelete(final Peer peer, final List<Long> rids) {
    final ApiOutPeer outPeer = buidOutPeer(peer);
    final ApiPeer apiPeer = buildApiPeer(peer);
    request(new RequestDeleteMessage(outPeer, rids), new RpcCallback<ResponseSeq>() {

        @Override
        public void onResult(ResponseSeq response) {
            if (deleteStorage.getPendingDeletions().containsKey(peer)) {
                deleteStorage.getPendingDeletions().get(peer).getRids().removeAll(rids);
                saveStorage();
            }
            updates().onUpdateReceived(new SeqUpdate(response.getSeq(), response.getState(), UpdateMessageDelete.HEADER, new UpdateMessageDelete(apiPeer, rids).toByteArray()));
        }

        @Override
        public void onError(RpcException e) {
        }
    });
}
Also used : SeqUpdate(im.actor.core.api.base.SeqUpdate) RequestDeleteMessage(im.actor.core.api.rpc.RequestDeleteMessage) ResponseSeq(im.actor.core.api.rpc.ResponseSeq) RpcException(im.actor.core.network.RpcException) UpdateMessageDelete(im.actor.core.api.updates.UpdateMessageDelete) ApiOutPeer(im.actor.core.api.ApiOutPeer) ApiPeer(im.actor.core.api.ApiPeer)

Example 4 with ApiPeer

use of im.actor.core.api.ApiPeer in project actor-platform by actorapp.

the class SenderActor method performSendApiContent.

private void performSendApiContent(final Peer peer, final long rid, ApiMessage message, final WakeLock wakeLock) {
    final ApiOutPeer outPeer = buidOutPeer(peer);
    final ApiPeer apiPeer = buildApiPeer(peer);
    if (outPeer == null || apiPeer == null) {
        return;
    }
    request(new RequestSendMessage(outPeer, rid, message, null, null), new RpcCallback<ResponseSeqDate>() {

        @Override
        public void onResult(ResponseSeqDate response) {
            self().send(new MessageSent(peer, rid));
            updates().onUpdateReceived(new SeqUpdate(response.getSeq(), response.getState(), UpdateMessageSent.HEADER, new UpdateMessageSent(apiPeer, rid, response.getDate()).toByteArray()));
            wakeLock.releaseLock();
        }

        @Override
        public void onError(RpcException e) {
            self().send(new MessageError(peer, rid));
            wakeLock.releaseLock();
        }
    });
}
Also used : UpdateMessageSent(im.actor.core.api.updates.UpdateMessageSent) SeqUpdate(im.actor.core.api.base.SeqUpdate) RequestSendMessage(im.actor.core.api.rpc.RequestSendMessage) RpcException(im.actor.core.network.RpcException) ApiOutPeer(im.actor.core.api.ApiOutPeer) ResponseSeqDate(im.actor.core.api.rpc.ResponseSeqDate) UpdateMessageSent(im.actor.core.api.updates.UpdateMessageSent) ApiPeer(im.actor.core.api.ApiPeer)

Aggregations

ApiPeer (im.actor.core.api.ApiPeer)4 ApiOutPeer (im.actor.core.api.ApiOutPeer)3 SeqUpdate (im.actor.core.api.base.SeqUpdate)3 RpcException (im.actor.core.network.RpcException)3 ApiMessage (im.actor.core.api.ApiMessage)2 ResponseSeq (im.actor.core.api.rpc.ResponseSeq)2 ResponseSeqDate (im.actor.core.api.rpc.ResponseSeqDate)2 Message (im.actor.core.entity.Message)2 Peer (im.actor.core.entity.Peer)2 AbsContent (im.actor.core.entity.content.AbsContent)2 ArrayList (java.util.ArrayList)2 ApiPeerType (im.actor.core.api.ApiPeerType)1 ApiTextMessage (im.actor.core.api.ApiTextMessage)1 RequestArchiveChat (im.actor.core.api.rpc.RequestArchiveChat)1 RequestClearChat (im.actor.core.api.rpc.RequestClearChat)1 RequestDeleteChat (im.actor.core.api.rpc.RequestDeleteChat)1 RequestDeleteMessage (im.actor.core.api.rpc.RequestDeleteMessage)1 RequestFavouriteDialog (im.actor.core.api.rpc.RequestFavouriteDialog)1 RequestMessageRemoveReaction (im.actor.core.api.rpc.RequestMessageRemoveReaction)1 RequestMessageSetReaction (im.actor.core.api.rpc.RequestMessageSetReaction)1