X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=core%2Frostermanager.lua;h=516983a9dfcb934af9f0b8837bb42f7aa41180ea;hb=090bf617e12f1a84c0d1d04917f771c9684a5304;hp=ddff841e9e3b5571e03137ce5adf5e120a63eb5a;hpb=863f00a39e9e9a50569b3390c5bc16f27c4e88ea;p=prosody.git diff --git a/core/rostermanager.lua b/core/rostermanager.lua index ddff841e..516983a9 100644 --- a/core/rostermanager.lua +++ b/core/rostermanager.lua @@ -18,6 +18,7 @@ local pairs, ipairs = pairs, ipairs; local tostring = tostring; local hosts = hosts; +local bare_sessions = bare_sessions; local datamanager = require "util.datamanager" local st = require "util.stanza"; @@ -81,23 +82,24 @@ function roster_push(username, host, jid) end function load_roster(username, host) - log("debug", "load_roster: asked for: "..username.."@"..host); + local jid = username.."@"..host; + log("debug", "load_roster: asked for: "..jid); + local user = bare_sessions[jid]; local roster; - if hosts[host] and hosts[host].sessions[username] then - roster = hosts[host].sessions[username].roster; - if not roster then - log("debug", "load_roster: loading for new user: "..username.."@"..host); - roster = datamanager.load(username, host, "roster") or {}; - if not roster[false] then roster[false] = { }; end - hosts[host].sessions[username].roster = roster; - hosts[host].events.fire_event("roster-load", username, host, roster); - end - return roster; + if user then + roster = user.roster; + if roster then return roster; end + log("debug", "load_roster: loading for new user: "..username.."@"..host); + else -- Attempt to load roster for non-loaded user + log("debug", "load_roster: loading for offline user: "..username.."@"..host); end - - -- Attempt to load roster for non-loaded user - log("debug", "load_roster: loading for offline user: "..username.."@"..host); roster = datamanager.load(username, host, "roster") or {}; + if user then user.roster = roster; end + if not roster[false] then roster[false] = { }; end + if roster[jid] then + roster[jid] = nil; + log("warn", "roster for "..jid.." has a self-contact"); + end hosts[host].events.fire_event("roster-load", username, host, roster); return roster; end