~singpolyma/cheogram-android

6c27d078039bc2a097d320a1d66ad7147c691ddd — Daniel Gultsch 5 years ago 159fedb
fixed some extended muc info handling. match what ejabberd does
M src/main/java/eu/siacs/conversations/entities/Conversation.java => src/main/java/eu/siacs/conversations/entities/Conversation.java +2 -7
@@ 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);
		}
	}


M src/main/java/eu/siacs/conversations/entities/MucOptions.java => src/main/java/eu/siacs/conversations/entities/MucOptions.java +19 -6
@@ 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() {