aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala
diff options
context:
space:
mode:
authorfrosty <frostinator33@airmail.cc>2026-10-26 10:21:57 -0400
committerfrosty <frostinator33@airmail.cc>2026-10-26 10:21:57 -0400
commit74aecd8b0986d07b50b7ce310d64e645b8b54e38 (patch)
tree560e6434f183eb54cd779936f3a4c9575146a066 /xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala
parent3d7e90d401da02d430a87db0ec7e1db3a6f1a68f (diff)
parent4436001bb361ad4f9e4e05819214ecf0ea77c063 (diff)
Merge 'upstream/master'
Diffstat (limited to 'xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala')
-rw-r--r--xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala37
1 files changed, 25 insertions, 12 deletions
diff --git a/xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala b/xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala
index 38437735..b129c571 100644
--- a/xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala
+++ b/xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala
@@ -10,15 +10,19 @@ namespace Xmpp.Xep.MessageDisplayedSynchronization {
private void handle_displayed_node_item(XmppStream stream, string? id, StanzaNode? item) {
if (id == null || item == null) return;
- Jid conversation_jid = Jid.from_string(id);
- StanzaNode? stanza_id_node = item.get_subnode("stanza-id", UniqueStableStanzaIDs.NS_URI);
- if (stanza_id_node == null || stanza_id_node.get_attribute("by") == null || stanza_id_node.get_attribute("id") == null) return;
- Jid stanza_id_by_jid = Jid.from_string(stanza_id_node.get_attribute("by"));
- string stanza_id = stanza_id_node.get_attribute("id");
- if (stream.has_flag(Flag.IDENTITY)) {
- stream.get_flag(Flag.IDENTITY).learn_mds(conversation_jid, stanza_id_by_jid, stanza_id);
+ try {
+ Jid conversation_jid = Jid.from_string(id);
+ StanzaNode? stanza_id_node = item.get_subnode("stanza-id", UniqueStableStanzaIDs.NS_URI);
+ if (stanza_id_node == null || stanza_id_node.get_attribute("by") == null || stanza_id_node.get_attribute("id") == null) return;
+ Jid stanza_id_by_jid = Jid.from_string(stanza_id_node.get_attribute("by"));
+ string stanza_id = stanza_id_node.get_attribute("id");
+ if (stream.has_flag(Flag.IDENTITY)) {
+ stream.get_flag(Flag.IDENTITY).learn_mds(conversation_jid, stanza_id_by_jid, stanza_id);
+ }
+ on_message_displayed(conversation_jid, stanza_id_by_jid, stanza_id);
+ } catch (InvalidJidError e) {
+ warning("Received mds item with invalid jid, ignoring: %s", e.message);
}
- on_message_displayed(conversation_jid, stanza_id_by_jid, stanza_id);
}
private void on_pubsub_item(XmppStream stream, Jid jid, string id, StanzaNode? item) {
@@ -32,9 +36,13 @@ namespace Xmpp.Xep.MessageDisplayedSynchronization {
private void on_initial_presence_sent(XmppStream stream) {
var pubsub = stream.get_module(Pubsub.Module.IDENTITY);
pubsub.request_all.begin(stream, null, NS_URI, (_, res) => {
- Gee.List<StanzaNode>? items = pubsub.request_all.end(res);
- foreach (StanzaNode node_item in items) {
- handle_displayed_node_item(stream, node_item.get_attribute("id"), node_item.get_subnode("displayed", NS_URI));
+ try {
+ Gee.List<StanzaNode>? items = pubsub.request_all.end(res);
+ foreach (StanzaNode node_item in items) {
+ handle_displayed_node_item(stream, node_item.get_attribute("id"), node_item.get_subnode("displayed", NS_URI));
+ }
+ } catch (IOError e) {
+ warning("Failed requesting initial mds set: %s", e.message);
}
});
}
@@ -50,7 +58,12 @@ namespace Xmpp.Xep.MessageDisplayedSynchronization {
.set_max_items("max")
.set_send_last_published_item("never")
.set_access_model("whitelist");
- return yield pubsub.publish(stream, stream.get_flag(Bind.Flag.IDENTITY).my_jid.bare_jid, NS_URI, conversation_jid.to_string(), node, options);
+ try {
+ return yield pubsub.publish(stream, stream.get_flag(Bind.Flag.IDENTITY).my_jid.bare_jid, NS_URI, conversation_jid.to_string(), node, options);
+ } catch (IOError e) {
+ warning("Failed publishing mds item: %s", e.message);
+ return false;
+ }
}
public override void attach(XmppStream stream) {