/* * Copyright (C) 2015 Actor LLC. <https://actor.im> */ package im.actor.core.modules.typing; import im.actor.core.api.ApiPeer; import im.actor.core.api.ApiPeerType; import im.actor.core.api.ApiTypingType; import im.actor.core.api.updates.UpdateTyping; import im.actor.core.api.updates.UpdateTypingStop; import im.actor.core.modules.AbsModule; import im.actor.core.modules.ModuleContext; import im.actor.core.modules.sequence.processor.WeakProcessor; import im.actor.core.network.parser.Update; import im.actor.runtime.actors.ActorRef; import im.actor.runtime.annotations.Verified; @Verified public class TypingProcessor extends AbsModule implements WeakProcessor { private ActorRef typingActor; @Verified public TypingProcessor(ModuleContext modules) { super(modules); this.typingActor = TypingActor.get(modules); } @Verified public void onTyping(ApiPeer peer, int uid, ApiTypingType type) { if (peer.getType() == ApiPeerType.PRIVATE) { typingActor.send(new TypingActor.PrivateTyping(uid, type)); } else if (peer.getType() == ApiPeerType.GROUP) { typingActor.send(new TypingActor.GroupTyping(peer.getId(), uid, type)); } } @Verified public void onTypingStop(ApiPeer peer, int uid, ApiTypingType typingType) { // Other types are unsupported // TODO: Move to Actor if (typingType != ApiTypingType.TEXT) { return; } if (peer.getType() == ApiPeerType.PRIVATE) { typingActor.send(new TypingActor.StopTyping(uid)); } else if (peer.getType() == ApiPeerType.GROUP) { typingActor.send(new TypingActor.StopGroupTyping(peer.getId(), uid)); } } @Verified public void onMessage(ApiPeer peer, int uid) { if (peer.getType() == ApiPeerType.PRIVATE) { typingActor.send(new TypingActor.StopTyping(uid)); } else if (peer.getType() == ApiPeerType.GROUP) { typingActor.send(new TypingActor.StopGroupTyping(peer.getId(), uid)); } } @Override public boolean process(Update update, long date) { if (update instanceof UpdateTyping) { UpdateTyping typing = (UpdateTyping) update; onTyping(typing.getPeer(), typing.getUid(), typing.getTypingType()); return true; } else if (update instanceof UpdateTypingStop) { UpdateTypingStop typing = (UpdateTypingStop) update; onTypingStop(typing.getPeer(), typing.getUid(), typing.getTypingType()); return true; } return false; } }