Merge 0.9->0.10 (third time lucky)
[prosody.git] / core / rostermanager.lua
index f14bb435950788dbba2b3114a91209164298a9e6..8c7612b450fe697fe21b81f9400c004b39743c51 100644 (file)
@@ -1,7 +1,7 @@
 -- Prosody IM
 -- Copyright (C) 2008-2010 Matthew Wild
 -- Copyright (C) 2008-2010 Waqas Hussain
--- 
+--
 -- This project is MIT/X11 licensed. Please see the
 -- COPYING file in the source package for more information.
 --
@@ -15,9 +15,10 @@ local pairs = pairs;
 local tostring = tostring;
 
 local hosts = hosts;
-local bare_sessions = bare_sessions;
+local bare_sessions = prosody.bare_sessions;
 
 local datamanager = require "util.datamanager"
+local um_user_exists = require "core.usermanager".user_exists;
 local st = require "util.stanza";
 
 module "rostermanager"
@@ -99,12 +100,17 @@ function load_roster(username, host)
                log("warn", "roster for %s has a self-contact", jid);
        end
        if not err then
-               hosts[host].events.fire_event("roster-load", username, host, roster);
+               hosts[host].events.fire_event("roster-load", { username = username, host = host, roster = roster });
        end
        return roster, err;
 end
 
 function save_roster(username, host, roster)
+       if not um_user_exists(username, host) then
+               log("debug", "not saving roster for %s@%s: the user doesn't exist", username, host);
+               return nil;
+       end
+
        log("debug", "save_roster: saving roster for %s@%s", username, host);
        if not roster then
                roster = hosts[host] and hosts[host].sessions[username] and hosts[host].sessions[username].roster;