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}