From 39175223b400fd7e832f2e61047e2fcee14d570f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 17 Apr 2025 10:15:55 +0200 Subject: [PATCH] add compile time config to merge bodies instead of ignoring --- src/main/java/eu/siacs/conversations/Config.java | 2 ++ .../android/xmpp/model/stanza/Message.java | 15 ++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 8417b20221c923aa0bf71bd0c84535bb73d9d11b..628b3c3531b389c3f6dcd623bd241f2d61e1e519 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -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; diff --git a/src/main/java/im/conversations/android/xmpp/model/stanza/Message.java b/src/main/java/im/conversations/android/xmpp/model/stanza/Message.java index dd5f7458e94937a81f4f8479decc7a91ab670915..bf64102e2e00b20d3ba8faccddeee0bd7575285f 100644 --- a/src/main/java/im/conversations/android/xmpp/model/stanza/Message.java +++ b/src/main/java/im/conversations/android/xmpp/model/stanza/Message.java @@ -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 clazz) { - final var builder = new ImmutableMap.Builder(); + final var builder = new ImmutableMultimap.Builder(); 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() {