From b0780224b5bdd68d74ef514e64e14ce9d37d7b90 Mon Sep 17 00:00:00 2001 From: steckbrief Date: Sat, 5 May 2018 20:28:04 +0200 Subject: introduces new message state model --- .../services/XmppConnectionService.java | 76 ++++++++++------------ 1 file changed, 34 insertions(+), 42 deletions(-) (limited to 'src/main/java/de/thedevstack/conversationsplus/services/XmppConnectionService.java') diff --git a/src/main/java/de/thedevstack/conversationsplus/services/XmppConnectionService.java b/src/main/java/de/thedevstack/conversationsplus/services/XmppConnectionService.java index bad0415f..2285a29d 100644 --- a/src/main/java/de/thedevstack/conversationsplus/services/XmppConnectionService.java +++ b/src/main/java/de/thedevstack/conversationsplus/services/XmppConnectionService.java @@ -55,6 +55,8 @@ import java.util.concurrent.CopyOnWriteArrayList; import de.thedevstack.android.logcat.Logging; import de.thedevstack.conversationsplus.ConversationsPlusApplication; import de.thedevstack.conversationsplus.ConversationsPlusPreferences; +import de.thedevstack.conversationsplus.enums.MessageDirection; +import de.thedevstack.conversationsplus.enums.MessageStatus; import de.thedevstack.conversationsplus.services.avatar.AvatarCache; import de.thedevstack.conversationsplus.services.avatar.AvatarService; import de.thedevstack.conversationsplus.services.filetransfer.FileTransferManager; @@ -71,6 +73,7 @@ import de.thedevstack.conversationsplus.utils.XmppConnectionServiceAccessor; import de.thedevstack.conversationsplus.utils.XmppSendUtil; import de.thedevstack.conversationsplus.services.muc.listener.ConferenceServiceDiscoveryReceived; import de.thedevstack.conversationsplus.xmpp.XepRegistry; +import de.thedevstack.conversationsplus.xmpp.chatmarkers.ChatMarkersXep; import de.thedevstack.conversationsplus.xmpp.disco.ServiceDiscoveryIqPacketGenerator; import de.thedevstack.conversationsplus.xmpp.disco.ServiceDiscoveryIqPacketParser; import de.thedevstack.conversationsplus.xmpp.disco.ServiceDiscoveryXep; @@ -97,8 +100,6 @@ import de.thedevstack.conversationsplus.entities.MucOptions.OnRenameListener; import de.thedevstack.conversationsplus.entities.Presence; import de.thedevstack.conversationsplus.entities.Roster; import de.thedevstack.conversationsplus.entities.ServiceDiscoveryResult; -import de.thedevstack.conversationsplus.entities.Transferable; -import de.thedevstack.conversationsplus.entities.TransferablePlaceholder; import de.thedevstack.conversationsplus.generator.IqGenerator; import de.thedevstack.conversationsplus.generator.MessageGenerator; import de.thedevstack.conversationsplus.generator.PresenceGenerator; @@ -224,7 +225,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa if (conversation.getAccount() == account) { Message message = conversation.findUnsentMessageWithUuid(uuid); if (message != null) { - MessageUtil.markMessage(message, Message.STATUS_SEND); + MessageUtil.setAndSaveMessageStatus(message, MessageStatus.TRANSMITTED); } } } @@ -717,6 +718,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa XepRegistry.add(new ServiceDiscoveryXep()); XepRegistry.add(new PingXep()); XepRegistry.add(new OpenPgpXep()); + XepRegistry.add(new ChatMarkersXep(Settings.CONFIRM_MESSAGE_RECEIVED)); final XmppConnection connection = new XmppConnection(account, this); connection.setOnMessagePacketReceivedListener(this.mMessageParser); @@ -752,10 +754,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa account.deactivateGracePeriod(); MessagePacket packet = null; final boolean addToConversation = (conversation.getMode() != Conversation.MODE_MULTI - || account.getServerIdentity() != XmppConnection.Identity.SLACK) - && !message.edited(); + || account.getServerIdentity() != XmppConnection.Identity.SLACK); boolean saveInDb = addToConversation; - message.setStatus(Message.STATUS_WAITING); + MessageUtil.setMessageStatus(message, MessageStatus.WAITING); if (!resend && message.getEncryption() != Message.ENCRYPTION_OTR) { message.getConversation().endOtrIfNeeded(); @@ -763,7 +764,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa new Conversation.OnMessageFound() { @Override public void onMessageFound(Message message) { - MessageUtil.markMessage(message, Message.STATUS_SEND_FAILED); + MessageUtil.setAndSaveMessageStatus(message, MessageStatus.FAILED); } }); } @@ -833,9 +834,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } if (packet != null) { if (account.getXmppConnection().getFeatures().sm() || conversation.getMode() == Conversation.MODE_MULTI) { - message.setStatus(Message.STATUS_UNSEND); + MessageUtil.setMessageStatus(message, MessageStatus.TRANSMITTING); } else { - message.setStatus(Message.STATUS_SEND); + MessageUtil.setMessageStatus(message, MessageStatus.TRANSMITTED); } } } else { @@ -867,9 +868,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa if (resend) { if (packet != null && addToConversation) { if (account.getXmppConnection().getFeatures().sm() || conversation.getMode() == Conversation.MODE_MULTI) { - MessageUtil.markMessage(message, Message.STATUS_UNSEND); + MessageUtil.setAndSaveMessageStatus(message, MessageStatus.TRANSMITTING); } else { - MessageUtil.markMessage(message, Message.STATUS_SEND); + MessageUtil.setAndSaveMessageStatus(message, MessageStatus.TRANSMITTED); } } } else { @@ -879,8 +880,6 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa if (message.getEncryption() == Message.ENCRYPTION_NONE || !ConversationsPlusPreferences.dontSaveEncrypted()) { if (saveInDb) { databaseBackend.createMessage(message); - } else if (message.edited()) { - databaseBackend.updateMessage(message, message.getEditedId()); } } updateConversationUi(); @@ -1085,11 +1084,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa @Override public void onMessageFound(Message message) { if (!FileBackend.isFileAvailable(message)) { - message.setTransferable(new TransferablePlaceholder(Transferable.STATUS_DELETED)); - final int s = message.getStatus(); - if (s == Message.STATUS_WAITING || s == Message.STATUS_OFFERED || s == Message.STATUS_UNSEND) { - MessageUtil.markMessage(message, Message.STATUS_SEND_FAILED); - } + MessageUtil.setAndSaveStatusForFileDeleted(message); } } }); @@ -2017,8 +2012,8 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa MessagePacket outPacket = mMessageGenerator.generateOtrChat(message); if (outPacket != null) { mMessageGenerator.addDelay(outPacket, message.getTimeSent()); - message.setStatus(Message.STATUS_SEND); - databaseBackend.updateMessage(message); + MessageUtil.setMessageStatus(message, MessageStatus.TRANSMITTED); + DatabaseBackend.getInstance().updateMessage(message); sendMessagePacket(account, outPacket); } } @@ -2140,32 +2135,28 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa public void resetSendingToWaiting(Account account) { for (Conversation conversation : getConversations()) { if (conversation.getAccount() == account) { - conversation.findUnsentTextMessages(new Conversation.OnMessageFound() { + conversation.findOugoingTextMessagesInTransmission(new Conversation.OnMessageFound() { @Override public void onMessageFound(Message message) { - MessageUtil.markMessage(message, Message.STATUS_WAITING); + MessageUtil.setAndSaveMessageStatus(message, MessageStatus.WAITING); } }); } } } - public Message markMessage(final Account account, final Jid recipient, final String uuid, final int status) { - if (uuid == null) { - return null; - } - for (Conversation conversation : getConversations()) { - if (conversation.getJid().toBareJid().equals(recipient) && conversation.getAccount() == account) { - final Message message = conversation.findSentMessageWithUuidOrRemoteId(uuid); - if (message != null) { - MessageUtil.markMessage(message, status); - } - return message; - } - } - return null; - } + public Message getMessage(final Account account, final Jid recipient, final String uuid) { + if (uuid == null) { + return null; + } + for (Conversation conversation : getConversations()) { + if (conversation.getJid().toBareJid().equals(recipient) && conversation.getAccount() == account) { + return conversation.findSentMessageWithUuidOrRemoteId(uuid); + } + } + return null; + } public int unreadCount() { int count = 0; @@ -2258,7 +2249,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa @Override public void run() { for (Message message : readMessages) { - databaseBackend.updateMessage(message); + DatabaseBackend.getInstance().updateMessage(message); } } }; @@ -2414,11 +2405,12 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa return this.mNotificationService; } - public void resendFailedMessages(final Message message) { - if (message.getStatus() == Message.STATUS_SEND_FAILED - || message.getStatus() == Message.STATUS_SEND_CANCELED) { + public void resendFailedOrCanceledMessages(final Message message) { + if (MessageUtil.isOutgoingMessage(message) + && (MessageStatus.FAILED == message.getMessageStatus() + || MessageStatus.CANCELED == message.getMessageStatus())) { message.setTime(System.currentTimeMillis()); - MessageUtil.markMessage(message, Message.STATUS_WAITING); + MessageUtil.setAndSaveMessageStatus(message, MessageStatus.WAITING); this.resendMessage(message, false); } } -- cgit v1.2.3