# HG changeset patch # User Kim Alvefur # Date 1415185969 -3600 # Node ID a104a159697d4282d26f6989d3930c79a73b8f09 # Parent 814398c7139beb5ca2a405d5dead351686ad6d02 mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup diff -r 814398c7139b -r a104a159697d mod_roster_allinall/mod_roster_allinall.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_roster_allinall/mod_roster_allinall.lua Wed Nov 05 12:12:49 2014 +0100 @@ -0,0 +1,44 @@ +local rostermanager = require"core.rostermanager"; +local jid_join = require"util.jid".join; +local jid_split = require"util.jid".split; +local host = module.host; +local sessions = hosts[host].sessions; + +-- Make a *one-way* subscription. User will see when contact is online, +-- contact will not see when user is online. +local function subscribe(user, contact) + local user_jid, contact_jid = jid_join(user, host), jid_join(contact, host); + + -- Update user's roster to say subscription request is pending... + rostermanager.set_contact_pending_out(user, host, contact_jid); + -- Update contact's roster to say subscription request is pending... + rostermanager.set_contact_pending_in(contact, host, user_jid); + -- Update contact's roster to say subscription request approved... + rostermanager.subscribed(contact, host, user_jid); + -- Update user's roster to say subscription request approved... + rostermanager.process_inbound_subscription_approval(user, host, contact_jid); + + rostermanager.roster_push(user, host, contact_jid); + rostermanager.roster_push(contact, host, user_jid); +end + + +module:hook("resource-bind", function(event) + local session = event.session; + local roster = session.roster; + local user = session.username; + local user_jid = jid_join(user, host); + local contact_jid; + for contact, contact_session in pairs(sessions) do + if contact ~= user then + contact_jid = jid_join(contact, host); + if not rostermanager.is_contact_subscribed(user, host, contact_jid) then + subscribe(contact, user); + end + if not rostermanager.is_contact_subscribed(contact, host, user_jid) then + subscribe(user, contact); + end + end + end +end); +