aboutsummaryrefslogtreecommitdiffstats
path: root/src/de/gultsch/chat/services/XmppConnectionService.java
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel.gultsch@rwth-aachen.de>2014-02-07 16:50:29 +0100
committerDaniel Gultsch <daniel.gultsch@rwth-aachen.de>2014-02-07 16:50:29 +0100
commit95068ee776d9ec8e6c390133ca2bed083a46546f (patch)
tree26be6da8d503d213b5611f8a862f87cbd737321b /src/de/gultsch/chat/services/XmppConnectionService.java
parent86dbb2f411c28a5eaae207caf1e6bcd1e56503b0 (diff)
reworked new conversation activity again. less asking more knowing. mucs are now connected on creation of the conversation. no reconnect required
Diffstat (limited to 'src/de/gultsch/chat/services/XmppConnectionService.java')
-rw-r--r--src/de/gultsch/chat/services/XmppConnectionService.java57
1 files changed, 37 insertions, 20 deletions
diff --git a/src/de/gultsch/chat/services/XmppConnectionService.java b/src/de/gultsch/chat/services/XmppConnectionService.java
index 43be24c31..eafb121cb 100644
--- a/src/de/gultsch/chat/services/XmppConnectionService.java
+++ b/src/de/gultsch/chat/services/XmppConnectionService.java
@@ -65,7 +65,7 @@ public class XmppConnectionService extends Service {
String jid = fullJid.split("/")[0];
counterPart = fullJid;
Contact contact = findOrCreateContact(account,jid);
- conversation = findOrCreateConversation(account, contact);
+ conversation = findOrCreateConversation(account, contact,false);
} else if (packet.getType() == MessagePacket.TYPE_GROUPCHAT) {
String[] fromParts = fullJid.split("/");
if (fromParts.length != 2) {
@@ -201,6 +201,9 @@ public class XmppConnectionService extends Service {
public void getRoster(Account account, final OnRosterFetchedListener listener) {
List<Contact> contacts = databaseBackend.getContacts(account);
+ for(int i=0; i < contacts.size(); ++i) {
+ contacts.get(i).setAccount(account);
+ }
if (listener != null) {
listener.onRosterFetched(contacts);
}
@@ -339,27 +342,40 @@ public class XmppConnectionService extends Service {
}
public Conversation findOrCreateConversation(Account account,
- Contact contact) {
- // Log.d(LOGTAG,"was asked to find conversation for "+contact.getJid());
+ Contact contact,boolean muc) {
for (Conversation conv : this.getConversations()) {
if ((conv.getAccount().equals(account))
&& (conv.getContactJid().equals(contact.getJid()))) {
- // Log.d(LOGTAG,"found one in memory");
return conv;
}
}
Conversation conversation = databaseBackend.findConversation(account,
contact.getJid());
if (conversation != null) {
- Log.d("gultsch", "found one. unarchive it");
conversation.setStatus(Conversation.STATUS_AVAILABLE);
conversation.setAccount(account);
+ if (muc) {
+ conversation.setMode(Conversation.MODE_MULTI);
+ if (account.getStatus()==Account.STATUS_ONLINE) {
+ joinMuc(account, conversation);
+ }
+ } else {
+ conversation.setMode(Conversation.MODE_SINGLE);
+ }
this.databaseBackend.updateConversation(conversation);
} else {
- Log.d(LOGTAG, "didnt find one in archive. create new one");
- conversation = new Conversation(contact.getDisplayName(),
- contact.getProfilePhoto(), account, contact.getJid(),
- Conversation.MODE_SINGLE);
+ if (muc) {
+ conversation = new Conversation(contact.getDisplayName(),
+ contact.getProfilePhoto(), account, contact.getJid(),
+ Conversation.MODE_MULTI);
+ if (account.getStatus()==Account.STATUS_ONLINE) {
+ joinMuc(account, conversation);
+ }
+ } else {
+ conversation = new Conversation(contact.getDisplayName(),
+ contact.getProfilePhoto(), account, contact.getJid(),
+ Conversation.MODE_SINGLE);
+ }
this.databaseBackend.createConversation(conversation);
}
this.conversations.add(conversation);
@@ -443,20 +459,21 @@ public class XmppConnectionService extends Service {
Conversation conversation = conversations.get(i);
if ((conversation.getMode() == Conversation.MODE_MULTI)
&& (conversation.getAccount() == account)) {
- String muc = conversation.getContactJid();
- Log.d(LOGTAG,
- "join muc " + muc + " with account " + account.getJid());
- PresencePacket packet = new PresencePacket();
- packet.setAttribute("to", muc + "/" + account.getUsername());
- Element x = new Element("x");
- x.setAttribute("xmlns", "http://jabber.org/protocol/muc");
- packet.addChild(x);
- connections.get(conversation.getAccount()).sendPresencePacket(
- packet);
-
+ joinMuc(account, conversation);
}
}
}
+
+ public void joinMuc(Account account, Conversation conversation) {
+ String muc = conversation.getContactJid();
+ PresencePacket packet = new PresencePacket();
+ packet.setAttribute("to", muc + "/" + account.getUsername());
+ Element x = new Element("x");
+ x.setAttribute("xmlns", "http://jabber.org/protocol/muc");
+ packet.addChild(x);
+ connections.get(conversation.getAccount()).sendPresencePacket(
+ packet);
+ }
public void disconnectMultiModeConversations() {