# HG changeset patch # User Matthew Wild # Date 1753971171 -3600 # Node ID 1c0e9486ba23512fb970f018db287649e66d5904 # Parent 6e2458b69e337cc3cdf2a35cf5c73644e197104e mod_pubsub_subscription: Fix sometimes not subscribing at startup, improve logs diff -r 6e2458b69e33 -r 1c0e9486ba23 mod_pubsub_subscription/mod_pubsub_subscription.lua --- a/mod_pubsub_subscription/mod_pubsub_subscription.lua Wed Jul 30 14:16:55 2025 +0100 +++ b/mod_pubsub_subscription/mod_pubsub_subscription.lua Thu Jul 31 15:12:51 2025 +0100 @@ -31,9 +31,9 @@ assert(item.node, "pubsub subscription item MUST have a 'node' field."); item.from = item.from or module.host; - local already_subscibed = false; + local already_subscribed = false; for _ in active_subscriptions:iter(item.service, item.node, item.from, nil) do -- luacheck: ignore 512 - already_subscibed = true; + already_subscribed = true; break end @@ -42,10 +42,22 @@ pending_subscription:set(iq_id, item._id); active_subscriptions:set(item.service, item.node, item.from, item._id, item); - if not already_subscibed then - module:send(st.iq({ type = "set", id = iq_id, from = item.from, to = item.service }) - :tag("pubsub", { xmlns = xmlns_pubsub }) - :tag("subscribe", { jid = item.from, node = item.node })); + if not already_subscribed then + local function send_subscribe() + module:log("debug", "%s is subscribing to %s:%s", item.from, item.service, item.node); + module:send(st.iq({ type = "set", id = iq_id, from = item.from, to = item.service }) + :tag("pubsub", { xmlns = xmlns_pubsub }) + :tag("subscribe", { jid = item.from, node = item.node })); + end + + if prosody.start_time then + send_subscribe(); + else + module:log("debug", "%s will subscribe to %s:%s after server startup", item.from, item.service, item.node); + module:hook_global("server-started", send_subscribe); + end + else + module:log("debug", "%s is already subscribed to %s:%s", item.from, item.service, item.node); end end @@ -65,7 +77,7 @@ end); end -function handle_iq(context, event) +function handle_iq(context, event) --luacheck: ignore 212/context local stanza = event.stanza; local service = stanza.attr.from;