fixed some extended muc info handling. match what ejabberd does

This commit is contained in:
Daniel Gultsch 2018-06-19 11:05:21 +02:00
parent 159fedb358
commit 6c27d07803
2 changed files with 21 additions and 13 deletions

View file

@ -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);
}
}

View file

@ -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<ServiceDiscoveryResult.Identity> 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() {