From 9908af62863f56feca4c0f5af1f54304898de114 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 18 Mar 2018 12:24:28 +0100 Subject: [PATCH] sync roster to disk after roster push --- .../conversations/generator/IqGenerator.java | 8 ++-- .../siacs/conversations/parser/IqParser.java | 7 ++- .../persistance/DatabaseBackend.java | 4 ++ .../services/XmppConnectionService.java | 46 +++++++++---------- .../ui/ConversationFragment.java | 2 +- .../eu/siacs/conversations/xml/Namespace.java | 5 +- 6 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java index ad250c458..f0ad1f272 100644 --- a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java @@ -98,8 +98,7 @@ public class IqGenerator extends AbstractGenerator { protected IqPacket publish(final String node, final Element item, final Bundle options) { final IqPacket packet = new IqPacket(IqPacket.TYPE.SET); - final Element pubsub = packet.addChild("pubsub", - "http://jabber.org/protocol/pubsub"); + final Element pubsub = packet.addChild("pubsub",Namespace.PUBSUB); final Element publish = pubsub.addChild("publish"); publish.setAttribute("node", node); publish.addChild(item); @@ -116,8 +115,7 @@ public class IqGenerator extends AbstractGenerator { protected IqPacket retrieve(String node, Element item) { final IqPacket packet = new IqPacket(IqPacket.TYPE.GET); - final Element pubsub = packet.addChild("pubsub", - "http://jabber.org/protocol/pubsub"); + final Element pubsub = packet.addChild("pubsub",Namespace.PUBSUB); final Element items = pubsub.addChild("items"); items.setAttribute("node", node); if (item != null) { @@ -397,7 +395,7 @@ public class IqGenerator extends AbstractGenerator { enable.setAttribute("jid",jid.toString()); enable.setAttribute("node", node); Data data = new Data(); - data.setFormType("http://jabber.org/protocol/pubsub#publish-options"); + data.setFormType(Namespace.PUBSUB_PUBLISH_OPTIONS); data.put("secret",secret); data.submit(); enable.addChild(data); diff --git a/src/main/java/eu/siacs/conversations/parser/IqParser.java b/src/main/java/eu/siacs/conversations/parser/IqParser.java index bb7bb333a..9c4efc01e 100644 --- a/src/main/java/eu/siacs/conversations/parser/IqParser.java +++ b/src/main/java/eu/siacs/conversations/parser/IqParser.java @@ -82,11 +82,11 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived { mXmppConnectionService.updateConversationUi(); mXmppConnectionService.updateRosterUi(); mXmppConnectionService.getShortcutService().refresh(); + mXmppConnectionService.syncRoster(account); } public String avatarData(final IqPacket packet) { - final Element pubsub = packet.findChild("pubsub", - "http://jabber.org/protocol/pubsub"); + final Element pubsub = packet.findChild("pubsub", Namespace.PUBSUB); if (pubsub == null) { return null; } @@ -98,8 +98,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived { } public Element getItem(final IqPacket packet) { - final Element pubsub = packet.findChild("pubsub", - "http://jabber.org/protocol/pubsub"); + final Element pubsub = packet.findChild("pubsub", Namespace.PUBSUB); if (pubsub == null) { return null; } diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index 17a529956..7214e9349 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -7,6 +7,7 @@ import android.database.DatabaseUtils; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Environment; +import android.os.SystemClock; import android.util.Base64; import android.util.Log; @@ -850,6 +851,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { } public void writeRoster(final Roster roster) { + long start = SystemClock.elapsedRealtime(); final Account account = roster.getAccount(); final SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); @@ -866,6 +868,8 @@ public class DatabaseBackend extends SQLiteOpenHelper { db.endTransaction(); account.setRosterVersion(roster.getVersion()); updateAccount(account); + long duration = SystemClock.elapsedRealtime() - start; + Log.d(Config.LOGTAG,account.getJid().asBareJid()+": persisted roster in "+duration+"ms"); } public void deleteMessagesInConversation(Conversation conversation) { diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 6b79f295b..75c4b87a8 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -184,29 +184,22 @@ public class XmppConnectionService extends Service { private OnMessagePacketReceived mMessageParser = new MessageParser(this); private OnPresencePacketReceived mPresenceParser = new PresenceParser(this); private IqParser mIqParser = new IqParser(this); - private OnIqPacketReceived mDefaultIqHandler = new OnIqPacketReceived() { - @Override - public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() != IqPacket.TYPE.RESULT) { - Element error = packet.findChild("error"); - String text = error != null ? error.findChildContent("text") : null; - if (text != null) { - Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received iq error - " + text); - } + private final OnIqPacketReceived mDefaultIqHandler = (account, packet) -> { + if (packet.getType() != IqPacket.TYPE.RESULT) { + Element error = packet.findChild("error"); + String text = error != null ? error.findChildContent("text") : null; + if (text != null) { + Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received iq error - " + text); } } }; private MessageGenerator mMessageGenerator = new MessageGenerator(this); - public OnContactStatusChanged onContactStatusChanged = new OnContactStatusChanged() { - - @Override - public void onContactStatusChanged(Contact contact, boolean online) { - Conversation conversation = find(getConversations(), contact); - if (conversation != null) { - if (online) { - if (contact.getPresences().size() == 1) { - sendUnsentMessages(conversation); - } + public OnContactStatusChanged onContactStatusChanged = (contact, online) -> { + Conversation conversation = find(getConversations(), contact); + if (conversation != null) { + if (online) { + if (contact.getPresences().size() == 1) { + sendUnsentMessages(conversation); } } } @@ -966,7 +959,7 @@ public class XmppConnectionService extends Service { restoreFromDatabase(); getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contactObserver); - new Thread(() -> fileObserver.startWatching()).start(); + new Thread(fileObserver::startWatching).start(); if (Config.supportOpenPgp()) { this.pgpServiceConnection = new OpenPgpServiceConnection(this, "org.sufficientlysecure.keychain", new OpenPgpServiceConnection.OnBound() { @Override @@ -1464,6 +1457,11 @@ public class XmppConnectionService extends Service { })); } + + public void syncRoster(final Account account) { + mDatabaseWriterExecutor.execute(() -> databaseBackend.writeRoster(account.getRoster())); + } + public List getConversations() { return this.conversations; } @@ -2706,13 +2704,13 @@ public class XmppConnectionService extends Service { iq.query(Namespace.ROSTER).addChild(contact.asElement()); account.getXmppConnection().sendIqPacket(iq, mDefaultIqHandler); if (sendUpdates) { - sendPresencePacket(account, - mPresenceGenerator.sendPresenceUpdatesTo(contact)); + sendPresencePacket(account, mPresenceGenerator.sendPresenceUpdatesTo(contact)); } if (ask) { - sendPresencePacket(account, - mPresenceGenerator.requestPresenceUpdatesFrom(contact)); + sendPresencePacket(account, mPresenceGenerator.requestPresenceUpdatesFrom(contact)); } + } else { + syncRoster(contact.getAccount()); } } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 7f5dfd68e..a46b38b30 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -619,7 +619,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke } private void hidePrepareFileToast(final Toast prepareFileToast) { - if (prepareFileToast != null) { + if (prepareFileToast != null && activity != null) { activity.runOnUiThread(prepareFileToast::cancel); } } diff --git a/src/main/java/eu/siacs/conversations/xml/Namespace.java b/src/main/java/eu/siacs/conversations/xml/Namespace.java index 4ca6f65ee..7c36ae311 100644 --- a/src/main/java/eu/siacs/conversations/xml/Namespace.java +++ b/src/main/java/eu/siacs/conversations/xml/Namespace.java @@ -14,8 +14,9 @@ public final class Namespace { public static final String OOB = "jabber:x:oob"; public static final String SASL = "urn:ietf:params:xml:ns:xmpp-sasl"; public static final String TLS = "urn:ietf:params:xml:ns:xmpp-tls"; - public static final String PUBSUB_PUBLISH_OPTIONS = "http://jabber.org/protocol/pubsub#publish-options"; - public static final String PUBSUB_ERROR = "http://jabber.org/protocol/pubsub#errors"; + public static final String PUBSUB = "http://jabber.org/protocol/pubsub"; + public static final String PUBSUB_PUBLISH_OPTIONS = PUBSUB+"#publish-options"; + public static final String PUBSUB_ERROR = PUBSUB+"#errors"; public static final String NICK = "http://jabber.org/protocol/nick"; public static final String FLEXIBLE_OFFLINE_MESSAGE_RETRIEVAL = "http://jabber.org/protocol/offline"; public static final String BIND = "urn:ietf:params:xml:ns:xmpp-bind";