X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=core%2Frostermanager.lua;h=0163e343a09c5540f9defeda4c607ebb3d7407e1;hb=f2b3c28c5cf29d06440d89f1933d83248296b693;hp=fdaf64a7667858596212fa5dab9b3c3e2ce94054;hpb=75721bb86a050dcb12e83f488562dc0fd4ad6a26;p=prosody.git diff --git a/core/rostermanager.lua b/core/rostermanager.lua index fdaf64a7..0163e343 100644 --- a/core/rostermanager.lua +++ b/core/rostermanager.lua @@ -1,4 +1,4 @@ --- Prosody IM v0.4 +-- Prosody IM -- Copyright (C) 2008-2009 Matthew Wild -- Copyright (C) 2008-2009 Waqas Hussain -- @@ -82,19 +82,24 @@ end function load_roster(username, host) log("debug", "load_roster: asked for: "..username.."@"..host); + local roster; if hosts[host] and hosts[host].sessions[username] then - local roster = hosts[host].sessions[username].roster; + 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; end + -- Attempt to load roster for non-loaded user log("debug", "load_roster: loading for offline user: "..username.."@"..host); - return datamanager.load(username, host, "roster") or {}; + roster = datamanager.load(username, host, "roster") or {}; + hosts[host].events.fire_event("roster-load", username, host, roster); + return roster; end function save_roster(username, host) @@ -224,6 +229,10 @@ function subscribed(username, host, jid) if is_contact_pending_in(username, host, jid) then local roster = load_roster(username, host); local item = roster[jid]; + if not item then -- FIXME should roster item be auto-created? + item = {subscription = "none", groups = {}}; + roster[jid] = item; + end if item.subscription == "none" then item.subscription = "from"; else -- subscription == to