aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2014-10-05 13:18:28 +0200
committerDaniel Gultsch <daniel@gultsch.de>2014-10-05 13:18:28 +0200
commitf7f7a73ce78bfc22fdeebfdc89946d8ffccaf25f (patch)
tree29516de1385c2e88cf850d1a247f42bf97ad2762 /src
parentbf893bee083136f7adfee5671c60a789fd030bb1 (diff)
parent54e9235bfcbfc22250bd9a14eb8575003856b91d (diff)
Merge pull request #524 from betheg/muc_errors_conditions
MUC: differentiated a few more errors.
Diffstat (limited to 'src')
-rw-r--r--src/eu/siacs/conversations/entities/MucOptions.java23
-rw-r--r--src/eu/siacs/conversations/ui/ConversationFragment.java14
2 files changed, 36 insertions, 1 deletions
diff --git a/src/eu/siacs/conversations/entities/MucOptions.java b/src/eu/siacs/conversations/entities/MucOptions.java
index 0294c8aa..595d9058 100644
--- a/src/eu/siacs/conversations/entities/MucOptions.java
+++ b/src/eu/siacs/conversations/entities/MucOptions.java
@@ -15,6 +15,13 @@ public class MucOptions {
public static final int ERROR_NICK_IN_USE = 1;
public static final int ERROR_ROOM_NOT_FOUND = 2;
public static final int ERROR_PASSWORD_REQUIRED = 3;
+ public static final int ERROR_BANNED = 4;
+ public static final int ERROR_MEMBERS_ONLY = 5;
+
+ public static final int KICKED_FROM_ROOM = 9;
+
+ public static final String STATUS_CODE_BANNED = "301";
+ public static final String STATUS_CODE_KICKED = "307";
public interface OnRenameListener {
public void onRename(boolean success);
@@ -179,6 +186,18 @@ public class MucOptions {
x.getContent()));
}
}
+ } else if (type.equals("unavailable") && name.equals(this.joinnick)) {
+ Element status = packet.findChild("x",
+ "http://jabber.org/protocol/muc#user").findChild(
+ "status");
+ String code = status.getAttribute("code");
+ if (code.equals(STATUS_CODE_KICKED)) {
+ this.isOnline = false;
+ this.error = KICKED_FROM_ROOM;
+ } else if (code.equals(STATUS_CODE_BANNED)) {
+ this.isOnline = false;
+ this.error = ERROR_BANNED;
+ }
} else if (type.equals("unavailable")) {
deleteUser(packet.getAttribute("from").split("/", 2)[1]);
} else if (type.equals("error")) {
@@ -199,6 +218,10 @@ public class MucOptions {
this.passwordChanged = true;
}
this.error = ERROR_PASSWORD_REQUIRED;
+ } else if (error.hasChild("forbidden")) {
+ this.error = ERROR_BANNED;
+ } else if (error.hasChild("registration-required")) {
+ this.error = ERROR_MEMBERS_ONLY;
}
}
}
diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java
index c324eb32..2fa6b454 100644
--- a/src/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/eu/siacs/conversations/ui/ConversationFragment.java
@@ -485,6 +485,18 @@ public class ConversationFragment extends Fragment {
showSnackbar(R.string.conference_requires_password,
R.string.enter_password, enterPassword);
break;
+ case MucOptions.ERROR_BANNED:
+ showSnackbar(R.string.conference_banned,
+ R.string.leave, leaveMuc);
+ break;
+ case MucOptions.ERROR_MEMBERS_ONLY:
+ showSnackbar(R.string.conference_members_only,
+ R.string.leave, leaveMuc);
+ break;
+ case MucOptions.KICKED_FROM_ROOM:
+ showSnackbar(R.string.conference_kicked,
+ R.string.leave, leaveMuc);
+ break;
default:
break;
}
@@ -493,7 +505,7 @@ public class ConversationFragment extends Fragment {
getActivity().invalidateOptionsMenu();
updateChatMsgHint();
if (!activity.shouldPaneBeOpen()) {
- activity.xmppConnectionService.markRead(conversation,true);
+ activity.xmppConnectionService.markRead(conversation, true);
activity.updateConversationList();
}
this.updateSendButton();