persist some muc configurations
This commit is contained in:
parent
3dc749b22b
commit
d5c4a987a1
|
@ -56,6 +56,10 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
|
|||
private static final String ATTRIBUTE_NEXT_MESSAGE_TIMESTAMP = "next_message_timestamp";
|
||||
private static final String ATTRIBUTE_CRYPTO_TARGETS = "crypto_targets";
|
||||
private static final String ATTRIBUTE_NEXT_ENCRYPTION = "next_encryption";
|
||||
public static final String ATTRIBUTE_ALLOW_PM = "allow_pm";
|
||||
public static final String ATTRIBUTE_MEMBERS_ONLY = "members_only";
|
||||
public static final String ATTRIBUTE_MODERATED = "moderated";
|
||||
public static final String ATTRIBUTE_NON_ANONYMOUS = "non_anonymous";
|
||||
protected final ArrayList<Message> messages = new ArrayList<>();
|
||||
public AtomicBoolean messagesLoaded = new AtomicBoolean(true);
|
||||
protected Account account = null;
|
||||
|
@ -725,6 +729,12 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
|
|||
return mode == MODE_SINGLE || getBooleanAttribute(ATTRIBUTE_ALWAYS_NOTIFY, Config.ALWAYS_NOTIFY_BY_DEFAULT || isPrivateAndNonAnonymous());
|
||||
}
|
||||
|
||||
public boolean setAttribute(String key, boolean value) {
|
||||
boolean prev = getBooleanAttribute(key,false);
|
||||
setAttribute(key,Boolean.toString(value));
|
||||
return prev != value;
|
||||
}
|
||||
|
||||
private boolean setAttribute(String key, long value) {
|
||||
return setAttribute(key, Long.toString(value));
|
||||
}
|
||||
|
@ -811,7 +821,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
|
|||
}
|
||||
}
|
||||
|
||||
private boolean getBooleanAttribute(String key, boolean defaultValue) {
|
||||
public boolean getBooleanAttribute(String key, boolean defaultValue) {
|
||||
String value = this.getAttribute(key);
|
||||
if (value == null) {
|
||||
return defaultValue;
|
||||
|
|
|
@ -373,12 +373,24 @@ public class MucOptions {
|
|||
this.self = new User(this, createJoinJid(getProposedNick()));
|
||||
}
|
||||
|
||||
public void updateFeatures(ArrayList<String> features) {
|
||||
public boolean updateConfiguration(List<String> features, Data data) {
|
||||
updateFeatures(features);
|
||||
updateFormData(data == null ? new Data() : data);
|
||||
Field allowPmField = this.form.getFieldByName("muc#roomconfig_allowpm");
|
||||
boolean changed = false;
|
||||
changed |= conversation.setAttribute(Conversation.ATTRIBUTE_ALLOW_PM, allowPmField == null || "1".equals(allowPmField.getValue()));
|
||||
changed |= conversation.setAttribute(Conversation.ATTRIBUTE_MEMBERS_ONLY, this.hasFeature("muc_membersonly"));
|
||||
changed |= conversation.setAttribute(Conversation.ATTRIBUTE_MODERATED, this.hasFeature("muc_moderated"));
|
||||
changed |= conversation.setAttribute(Conversation.ATTRIBUTE_NON_ANONYMOUS, this.hasFeature("muc_nonanonymous"));
|
||||
return changed;
|
||||
}
|
||||
|
||||
private void updateFeatures(List<String> features) {
|
||||
this.features.clear();
|
||||
this.features.addAll(features);
|
||||
}
|
||||
|
||||
public void updateFormData(Data form) {
|
||||
private void updateFormData(Data form) {
|
||||
this.form = form;
|
||||
}
|
||||
|
||||
|
@ -397,8 +409,7 @@ public class MucOptions {
|
|||
}
|
||||
|
||||
public boolean allowPm() {
|
||||
Field field = this.form.getFieldByName("muc#roomconfig_allowpm");
|
||||
return field == null || "1".equals(field.getValue());
|
||||
return conversation.getBooleanAttribute(Conversation.ATTRIBUTE_ALLOW_PM, false);
|
||||
}
|
||||
|
||||
public boolean participating() {
|
||||
|
@ -408,7 +419,7 @@ public class MucOptions {
|
|||
}
|
||||
|
||||
public boolean membersOnly() {
|
||||
return hasFeature("muc_membersonly");
|
||||
return conversation.getBooleanAttribute(Conversation.ATTRIBUTE_MEMBERS_ONLY, false);
|
||||
}
|
||||
|
||||
public boolean mamSupport() {
|
||||
|
@ -420,19 +431,15 @@ public class MucOptions {
|
|||
}
|
||||
|
||||
public boolean nonanonymous() {
|
||||
return hasFeature("muc_nonanonymous");
|
||||
return conversation.getBooleanAttribute(Conversation.ATTRIBUTE_NON_ANONYMOUS, false);
|
||||
}
|
||||
|
||||
public boolean isPrivateAndNonAnonymous() {
|
||||
return membersOnly() && nonanonymous();
|
||||
}
|
||||
|
||||
public boolean persistent() {
|
||||
return hasFeature("muc_persistent");
|
||||
}
|
||||
|
||||
public boolean moderated() {
|
||||
return hasFeature("muc_moderated");
|
||||
return conversation.getBooleanAttribute(Conversation.ATTRIBUTE_MODERATED, false);
|
||||
}
|
||||
|
||||
public User deleteUser(Jid jid) {
|
||||
|
|
|
@ -2510,14 +2510,14 @@ public class XmppConnectionService extends Service {
|
|||
}
|
||||
}
|
||||
Element form = query.findChild("x", Namespace.DATA);
|
||||
if (form != null) {
|
||||
conversation.getMucOptions().updateFormData(Data.parse(form));
|
||||
Data data = form == null ? null : Data.parse(form);
|
||||
if (conversation.getMucOptions().updateConfiguration(features, data)) {
|
||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": muc configuration changed for " + conversation.getJid().asBareJid());
|
||||
updateConversation(conversation);
|
||||
}
|
||||
conversation.getMucOptions().updateFeatures(features);
|
||||
if (callback != null) {
|
||||
callback.onConferenceConfigurationFetched(conversation);
|
||||
}
|
||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": fetched muc configuration for " + conversation.getJid().asBareJid() + " - " + features.toString());
|
||||
updateConversationUi();
|
||||
} else if (packet.getType() == IqPacket.TYPE.ERROR) {
|
||||
if (callback != null) {
|
||||
|
|
Loading…
Reference in New Issue