diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2014-10-05 13:18:28 +0200 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2014-10-05 13:18:28 +0200 |
commit | f7f7a73ce78bfc22fdeebfdc89946d8ffccaf25f (patch) | |
tree | 29516de1385c2e88cf850d1a247f42bf97ad2762 /src/eu | |
parent | bf893bee083136f7adfee5671c60a789fd030bb1 (diff) | |
parent | 54e9235bfcbfc22250bd9a14eb8575003856b91d (diff) |
Merge pull request #524 from betheg/muc_errors_conditions
MUC: differentiated a few more errors.
Diffstat (limited to 'src/eu')
-rw-r--r-- | src/eu/siacs/conversations/entities/MucOptions.java | 23 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/ConversationFragment.java | 14 |
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 0294c8aae..595d9058a 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 c324eb320..2fa6b4544 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(); |