MessageAcknowledgedProcessor.java

 1package im.conversations.android.xmpp.processor;
 2
 3import eu.siacs.conversations.entities.Conversation;
 4import eu.siacs.conversations.entities.Message;
 5import eu.siacs.conversations.services.XmppConnectionService;
 6import eu.siacs.conversations.xmpp.Jid;
 7import eu.siacs.conversations.xmpp.XmppConnection;
 8import eu.siacs.conversations.xmpp.jingle.JingleConnectionManager;
 9import eu.siacs.conversations.xmpp.jingle.JingleRtpConnection;
10import java.util.function.BiFunction;
11
12public class MessageAcknowledgedProcessor extends XmppConnection.Delegate
13        implements BiFunction<Jid, String, Boolean> {
14
15    private final XmppConnectionService service;
16
17    public MessageAcknowledgedProcessor(
18            final XmppConnectionService service, final XmppConnection connection) {
19        super(service, connection);
20        this.service = service;
21    }
22
23    @Override
24    public Boolean apply(final Jid to, final String id) {
25        if (id.startsWith(JingleRtpConnection.JINGLE_MESSAGE_PROPOSE_ID_PREFIX)) {
26            final String sessionId =
27                    id.substring(JingleRtpConnection.JINGLE_MESSAGE_PROPOSE_ID_PREFIX.length());
28            this.service
29                    .getJingleConnectionManager()
30                    .updateProposedSessionDiscovered(
31                            getAccount(),
32                            to,
33                            sessionId,
34                            JingleConnectionManager.DeviceDiscoveryState.SEARCHING_ACKNOWLEDGED);
35        }
36
37        final Jid bare = to.asBareJid();
38
39        for (final Conversation conversation : service.getConversations()) {
40            if (conversation.getAccount() == getAccount()
41                    && conversation.getJid().asBareJid().equals(bare)) {
42                final Message message = conversation.findUnsentMessageWithUuid(id);
43                if (message != null) {
44                    message.setStatus(Message.STATUS_SEND);
45                    message.setErrorMessage(null);
46                    getDatabase().updateMessage(message, false);
47                    return true;
48                }
49            }
50        }
51        return false;
52    }
53}