fixed #63

Daniel Gultsch created

Change summary

src/eu/siacs/conversations/services/XmppConnectionService.java | 12 +++
src/eu/siacs/conversations/xmpp/XmppConnection.java            | 11 +++
2 files changed, 21 insertions(+), 2 deletions(-)

Detailed changes

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

@@ -287,7 +287,11 @@ public class XmppConnectionService extends Service {
 				} else {
 					Contact contact = findContact(account, fromParts[0]);
 					if (contact == null) {
-						Log.d(LOGTAG,packet.getFrom()+ " could not be found");
+						if ("subscribe".equals(type)) {
+							account.getXmppConnection().addPendingSubscription(fromParts[0]);
+						} else {
+							Log.d(LOGTAG,packet.getFrom()+ " could not be found");
+						}
 						return;
 					}
 					if (type == null) {
@@ -343,7 +347,7 @@ public class XmppConnectionService extends Service {
 								requestPresenceUpdatesFrom(contact);
 							}
 						} else {
-							// TODO: ask user to handle it maybe
+							account.getXmppConnection().addPendingSubscription(fromParts[0]);
 						}
 					} else {
 						//Log.d(LOGTAG, packet.toString());
@@ -1232,6 +1236,10 @@ public class XmppConnectionService extends Service {
 		account.getXmppConnection().sendIqPacket(iq, null);
 		if (autoGrant) {
 			requestPresenceUpdatesFrom(contact);
+			if (account.getXmppConnection().hasPendingSubscription(contact.getJid())) {
+				Log.d("xmppService","contact had pending subscription");
+				sendPresenceUpdatesTo(contact);
+			}
 		}
 		replaceContactInConversation(contact.getJid(), contact);
 	}

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

@@ -77,6 +77,8 @@ public class XmppConnection implements Runnable {
 	private Element streamFeatures;
 	private HashMap<String, List<String>> disco = new HashMap<String, List<String>>();
 	
+	private HashSet<String> pendingSubscriptions = new HashSet<String>();
+	
 	private String streamId = null;
 	private int smVersion = 3;
 	
@@ -904,4 +906,13 @@ public class XmppConnection implements Runnable {
 	public String getMucServer() {
 		return findDiscoItemByFeature("http://jabber.org/protocol/muc");
 	}
+	
+	public boolean hasPendingSubscription(String jid) {
+		return this.pendingSubscriptions.contains(jid);
+	}
+	
+	public void addPendingSubscription(String jid) {
+		Log.d(LOGTAG,"adding "+jid+" to pending subscriptions");
+		this.pendingSubscriptions.add(jid);
+	}
 }