migrate domain and host exemption into seperate class

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java      |  3 
src/main/java/eu/siacs/conversations/xmpp/Patches.java                        | 17 
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java                 |  9 
src/playstore/java/eu/siacs/conversations/services/PushManagementService.java |  3 
4 files changed, 28 insertions(+), 4 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -126,6 +126,7 @@ import eu.siacs.conversations.xmpp.OnMessagePacketReceived;
 import eu.siacs.conversations.xmpp.OnPresencePacketReceived;
 import eu.siacs.conversations.xmpp.OnStatusChanged;
 import eu.siacs.conversations.xmpp.OnUpdateBlocklist;
+import eu.siacs.conversations.xmpp.Patches;
 import eu.siacs.conversations.xmpp.XmppConnection;
 import eu.siacs.conversations.xmpp.chatstate.ChatState;
 import eu.siacs.conversations.xmpp.forms.Data;
@@ -1200,7 +1201,7 @@ public class XmppConnectionService extends Service {
 		account.deactivateGracePeriod();
 		MessagePacket packet = null;
 		final boolean addToConversation = (conversation.getMode() != Conversation.MODE_MULTI
-				|| account.getServerIdentity() != XmppConnection.Identity.SLACK)
+				|| !Patches.BAD_MUC_REFLECTION.contains(account.getServerIdentity()))
 				&& !message.edited();
 		boolean saveInDb = addToConversation;
 		message.setStatus(Message.STATUS_WAITING);

src/main/java/eu/siacs/conversations/xmpp/Patches.java 🔗

@@ -0,0 +1,17 @@
+package eu.siacs.conversations.xmpp;
+
+
+import java.util.Arrays;
+import java.util.List;
+
+public class Patches {
+    public static final List<String> DISCO_EXCEPTIONS = Arrays.asList(
+            "nimbuzz.com"
+    );
+    public static final List<XmppConnection.Identity> SUFFICIENT_PUSH = Arrays.asList(
+            XmppConnection.Identity.EJABBERD
+    );
+    public static final List<XmppConnection.Identity> BAD_MUC_REFLECTION = Arrays.asList(
+            XmppConnection.Identity.SLACK
+    );
+}

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -1088,10 +1088,15 @@ public class XmppConnection implements Runnable {
 		synchronized (this.disco) {
 			this.disco.clear();
 		}
+		Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": starting service discovery");
 		mPendingServiceDiscoveries.set(0);
-		mWaitForDisco.set(smVersion != 0 && !account.getJid().getDomainpart().equalsIgnoreCase("nimbuzz.com"));
+		if (smVersion == 0 || Patches.DISCO_EXCEPTIONS.contains(account.getJid().getDomainpart())) {
+			Log.d(Config.LOGTAG,account.getJid().toBareJid()+": do not wait for service discovery");
+			mWaitForDisco.set(false);
+		} else {
+			mWaitForDisco.set(true);
+		}
 		lastDiscoStarted = SystemClock.elapsedRealtime();
-		Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": starting service discovery");
 		mXmppConnectionService.scheduleWakeUpCall(Config.CONNECT_DISCO_TIMEOUT, account.getUuid().hashCode());
 		Element caps = streamFeatures.findChild("c");
 		final String hash = caps == null ? null : caps.getAttribute("hash");

src/playstore/java/eu/siacs/conversations/services/PushManagementService.java 🔗

@@ -15,6 +15,7 @@ import eu.siacs.conversations.R;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.xml.Element;
 import eu.siacs.conversations.xmpp.OnIqPacketReceived;
+import eu.siacs.conversations.xmpp.Patches;
 import eu.siacs.conversations.xmpp.XmppConnection;
 import eu.siacs.conversations.xmpp.forms.Data;
 import eu.siacs.conversations.xmpp.jid.InvalidJidException;
@@ -110,7 +111,7 @@ public class PushManagementService {
 	}
 
 	public boolean availableAndUseful(Account account) {
-		return account.getServerIdentity() == XmppConnection.Identity.EJABBERD && available(account);
+		return Patches.SUFFICIENT_PUSH.contains(account.getServerIdentity()) && available(account);
 	}
 
 	private boolean playServicesAvailable() {