From 6c27d078039bc2a097d320a1d66ad7147c691ddd Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 19 Jun 2018 11:05:21 +0200 Subject: [PATCH] fixed some extended muc info handling. match what ejabberd does --- .../conversations/entities/Conversation.java | 9 ++----- .../conversations/entities/MucOptions.java | 25 ++++++++++++++----- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 0b288ee77..ed3a443ef 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -749,7 +749,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl return false; } } else { - String prev = this.attributes.getString(key); + final String prev = this.attributes.optString(key, null); this.attributes.put(key, value); return !value.equals(prev); } @@ -769,7 +769,6 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl this.attributes.put(key, array); return true; } catch (JSONException e) { - e.printStackTrace(); return false; } } @@ -777,11 +776,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl public String getAttribute(String key) { synchronized (this.attributes) { - try { - return this.attributes.getString(key); - } catch (JSONException e) { - return null; - } + return this.attributes.optString(key, null); } } diff --git a/src/main/java/eu/siacs/conversations/entities/MucOptions.java b/src/main/java/eu/siacs/conversations/entities/MucOptions.java index 7243a54d0..a080a488c 100644 --- a/src/main/java/eu/siacs/conversations/entities/MucOptions.java +++ b/src/main/java/eu/siacs/conversations/entities/MucOptions.java @@ -2,6 +2,7 @@ package eu.siacs.conversations.entities; import android.annotation.SuppressLint; import android.support.annotation.NonNull; +import android.util.Log; import java.util.ArrayList; import java.util.Collections; @@ -377,9 +378,10 @@ public class MucOptions { public boolean updateConfiguration(ServiceDiscoveryResult serviceDiscoveryResult) { this.serviceDiscoveryResult = serviceDiscoveryResult; String name; - Field roomInfoName = getRoomInfoForm().getFieldByName("muc#roominfo_name"); - if (roomInfoName != null) { - name = roomInfoName.getValue(); + Field roomConfigName = getRoomInfoForm().getFieldByName("muc#roomconfig_roomname"); + if (roomConfigName != null) { + Log.d(Config.LOGTAG,"value of room config name "+roomConfigName.getValue()); + name = roomConfigName.getValue(); } else { List identities = serviceDiscoveryResult.getIdentities(); String identityName = identities.size() > 0 ? identities.get(0).getName() : null; @@ -415,7 +417,7 @@ public class MucOptions { } public boolean canInvite() { - Field field = getRoomInfoForm().getFieldByName("muc#roominfo_allowinvites"); + Field field = getRoomInfoForm().getFieldByName("muc#roomconfig_allowinvites"); return !membersOnly() || self.getRole().ranks(Role.MODERATOR) || (field != null && "1".equals(field.getValue())); } @@ -425,8 +427,19 @@ public class MucOptions { } public boolean allowPm() { - Field field = getRoomInfoForm().getFieldByName("muc#roominfo_allowpm"); - return field != null && "1".equals(field.getValue()); + final Field field = getRoomInfoForm().getFieldByName("muc#roomconfig_allowpm"); + if (field == null) { + return true; //fall back if field does not exists + } + if ("anyone".equals(field.getValue())) { + return true; + } else if ("participants".equals(field.getValue())) { + return self.getRole().ranks(Role.PARTICIPANT); + } else if ("moderators".equals(field.getValue())) { + return self.getRole().ranks(Role.MODERATOR); + } else { + return false; + } } public boolean participating() {