diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index f94401268795f300b86c1c064963ec170f0e0851..04175632ef46035b175a40da6cf09727de0b2c14 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -7,6 +7,7 @@ import android.graphics.Color; import android.os.Build; import android.text.Html; import android.text.SpannableStringBuilder; +import android.util.Base64; import android.util.Log; import com.cheogram.android.BobTransfer; @@ -24,6 +25,7 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.time.Duration; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -1191,6 +1193,24 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable return file; } + public List getCids() { + List cids = new ArrayList<>(); + Element file = getFileElement(); + if (file == null) return cids; + + for (Element child : file.getChildren()) { + if (child.getName().equals("hash") && child.getNamespace().equals("urn:xmpp:hashes:2")) { + try { + cids.add(CryptoHelper.cid(Base64.decode(child.getContent(), Base64.DEFAULT), child.getAttribute("algo"))); + } catch (final NoSuchAlgorithmException | IllegalStateException e) { } + } + } + + cids.sort((x, y) -> y.getType().compareTo(x.getType())); + + return cids; + } + public List getThumbnails() { List thumbs = new ArrayList<>(); Element file = getFileElement();