From bd8f277b9129a48a95ee19a2a3ec41d13aa66d4a Mon Sep 17 00:00:00 2001 From: fiaxh Date: Sat, 14 Jun 2025 17:50:07 +0200 Subject: Add basic support for BOB thumbnails in SFS --- xmpp-vala/src/module/util.vala | 12 ++++++++++++ xmpp-vala/src/module/xep/0231_bits_of_binary.vala | 10 ---------- .../src/module/xep/0264_jingle_content_thumbnails.vala | 15 ++++----------- 3 files changed, 16 insertions(+), 21 deletions(-) (limited to 'xmpp-vala') diff --git a/xmpp-vala/src/module/util.vala b/xmpp-vala/src/module/util.vala index 28f1a5f8..076c327f 100644 --- a/xmpp-vala/src/module/util.vala +++ b/xmpp-vala/src/module/util.vala @@ -12,6 +12,18 @@ public string random_uuid() { return "%08x-%04x-%04x-%04x-%04x%08x".printf(b1, b2, b3, b4, b5_1, b5_2); } +public Bytes? get_data_for_uri(string uri) { + if (uri.has_suffix("@bob.xmpp.org")) { + string cid = uri.replace("cid:", ""); + return Xep.BitsOfBinary.known_bobs[cid]; + } else if (uri.has_prefix("data:image/png;base64,")) { + return new Bytes.take(Base64.decode(uri.replace("data:image/png;base64,", ""))); + } else { + warning("Couldn't parse data from uri %s", uri); + return null; + } +} + public abstract class StanzaListener : OrderedListener { public abstract async bool run(XmppStream stream, T stanza); diff --git a/xmpp-vala/src/module/xep/0231_bits_of_binary.vala b/xmpp-vala/src/module/xep/0231_bits_of_binary.vala index cd756b5e..7e811045 100644 --- a/xmpp-vala/src/module/xep/0231_bits_of_binary.vala +++ b/xmpp-vala/src/module/xep/0231_bits_of_binary.vala @@ -6,16 +6,6 @@ namespace Xmpp.Xep.BitsOfBinary { public static HashMap known_bobs = null; - public Bytes? get_data_for_uri(string uri) { - if (uri.has_suffix("@bob.xmpp.org")) { - string cid = uri.replace("cid:", ""); - return BitsOfBinary.known_bobs[cid]; - } else if (uri.has_prefix("data:image/png;base64,")) { - return new Bytes.take(Base64.decode(uri.replace("data:image/png;base64,", ""))); - } - return null; - } - public class Module : XmppStreamModule { public static ModuleIdentity IDENTITY = new ModuleIdentity(NS_URI, "bits_of_binary"); diff --git a/xmpp-vala/src/module/xep/0264_jingle_content_thumbnails.vala b/xmpp-vala/src/module/xep/0264_jingle_content_thumbnails.vala index 5dba0c6d..d408e94b 100644 --- a/xmpp-vala/src/module/xep/0264_jingle_content_thumbnails.vala +++ b/xmpp-vala/src/module/xep/0264_jingle_content_thumbnails.vala @@ -13,15 +13,16 @@ namespace Xmpp.Xep.JingleContentThumbnails { } public class Thumbnail { - public string uri; public Bytes data; public string? media_type; public int width; public int height; public StanzaNode to_stanza_node() { + string data_uri = "data:image/png;base64," + Base64.encode(data.get_data()); + StanzaNode node = new StanzaNode.build("thumbnail", NS_URI).add_self_xmlns() - .put_attribute("uri", this.uri); + .put_attribute("uri", data_uri); if (this.media_type != null) { node.put_attribute("media-type", this.media_type); } @@ -38,17 +39,9 @@ namespace Xmpp.Xep.JingleContentThumbnails { string uri = node.get_attribute("uri"); if (uri == null) return null; - string? data_uri = null; - Bytes data = BitsOfBinary.get_data_for_uri(uri); - - if (uri.has_suffix("@bob.xmpp.org")) { - data_uri = "data:image/png;base64," + Base64.encode(data.get_data()); - } else if (uri.has_prefix("data:image/png;base64,")) { - data_uri = uri; - } + Bytes data = Xmpp.get_data_for_uri(uri); Thumbnail thumbnail = new Thumbnail(); - thumbnail.uri = data_uri; thumbnail.data = data; thumbnail.media_type = node.get_attribute("media-type"); thumbnail.width = node.get_attribute_int("width"); -- cgit v1.3