Change summary
src/main/java/eu/siacs/conversations/Config.java | 2
src/main/java/im/conversations/android/xmpp/model/stanza/Message.java | 15
2 files changed, 12 insertions(+), 5 deletions(-)
Detailed changes
@@ -136,6 +136,8 @@ public final class Config {
public static final boolean IGNORE_ID_REWRITE_IN_MUC = true;
public static final boolean MUC_LEAVE_BEFORE_JOIN = false;
+ // if this is set to true messages that contain multiple bodies (per language) will be ignored
+ public static final boolean TREAT_MULTI_CONTENT_AS_INVALID = false;
public static final long MAM_MAX_CATCHUP = MILLISECONDS_IN_DAY * 5;
public static final int MAM_MAX_MESSAGES = 750;
@@ -1,7 +1,11 @@
package im.conversations.android.xmpp.model.stanza;
+import com.google.common.base.Joiner;
import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
+import eu.siacs.conversations.Config;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xml.LocalizedContent;
import im.conversations.android.annotation.XmlElement;
@@ -31,7 +35,7 @@ public class Message extends Stanza {
}
private LocalizedContent getLocalizedContent(final Class<? extends Extension> clazz) {
- final var builder = new ImmutableMap.Builder<String, String>();
+ final var builder = new ImmutableMultimap.Builder<String, String>();
final var messageLanguage = this.getAttribute("xml:lang");
final var parentLanguage =
Strings.isNullOrEmpty(messageLanguage)
@@ -47,11 +51,12 @@ public class Message extends Stanza {
}
builder.put(language, content);
}
- try {
- return LocalizedContent.get(builder.buildOrThrow());
- } catch (final IllegalArgumentException e) {
+ final var multiMap = builder.build().asMap();
+ if (Config.TREAT_MULTI_CONTENT_AS_INVALID
+ && Iterables.any(multiMap.values(), v -> v.size() > 1)) {
return null;
}
+ return LocalizedContent.get(Maps.transformValues(multiMap, v -> Joiner.on('\n').join(v)));
}
public Type getType() {