From d9d6909c69b57b81380798fabe3a4e2d3d347cb1 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Fri, 29 Jun 2018 22:24:48 +0200 Subject: fixed some extended muc info handling. match what ejabberd does --- .../de/pixart/messenger/entities/Conversation.java | 9 ++------ .../de/pixart/messenger/entities/MucOptions.java | 25 ++++++++++++++++------ 2 files changed, 21 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/main/java/de/pixart/messenger/entities/Conversation.java b/src/main/java/de/pixart/messenger/entities/Conversation.java index 4729eb976..18a20532a 100644 --- a/src/main/java/de/pixart/messenger/entities/Conversation.java +++ b/src/main/java/de/pixart/messenger/entities/Conversation.java @@ -920,7 +920,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); } @@ -940,7 +940,6 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl this.attributes.put(key, array); return true; } catch (JSONException e) { - e.printStackTrace(); return false; } } @@ -948,11 +947,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/de/pixart/messenger/entities/MucOptions.java b/src/main/java/de/pixart/messenger/entities/MucOptions.java index ecf016c48..39afe65a6 100644 --- a/src/main/java/de/pixart/messenger/entities/MucOptions.java +++ b/src/main/java/de/pixart/messenger/entities/MucOptions.java @@ -2,6 +2,7 @@ package de.pixart.messenger.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; @@ -414,7 +416,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())); } @@ -424,8 +426,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() { -- cgit v1.2.3