aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/modulemanager.lua18
-rw-r--r--core/offlinemessage.lua35
2 files changed, 17 insertions, 36 deletions
diff --git a/core/modulemanager.lua b/core/modulemanager.lua
index 4d654ae0..7c1bc0d8 100644
--- a/core/modulemanager.lua
+++ b/core/modulemanager.lua
@@ -55,6 +55,9 @@ local modulehelpers = setmetatable({}, { __index = _G });
local features_table = multitable_new();
local handler_table = multitable_new();
+local hooked = multitable_new();
+local event_hooks = multitable_new();
+
local NULL = {};
-- Load modules when a host is activated
@@ -151,6 +154,7 @@ function unload(host, name, ...)
handler_info[handlers[1]] = nil;
stanza_handlers:remove(param[1], param[2], param[3], param[4]);
end
+ event_hooks:remove(host, name);
return true;
end
@@ -234,7 +238,19 @@ function api:add_feature(xmlns)
features_table:set(self.host, self.name, xmlns, true);
end
-function api:add_event_hook (...) return eventmanager.add_event_hook(...); end
+local event_hook = function(host, mod_name, event_name, ...)
+ if type((...)) == "table" and (...).host and (...).host ~= host then return; end
+ for handler in pairs(event_hooks:get(host, mod_name, event_name) or NULL) do
+ handler(...);
+ end
+end;
+function api:add_event_hook(name, handler)
+ if not hooked:get(self.host, self.name, name) then
+ eventmanager.add_event_hook(name, function(...) event_hook(self.host, self.name, name, ...); end);
+ hooked:set(self.host, self.name, name, true);
+ end
+ event_hooks:set(self.host, self.name, name, handler, true);
+end
--------------------------------------------------------------------
diff --git a/core/offlinemessage.lua b/core/offlinemessage.lua
deleted file mode 100644
index 36f2948d..00000000
--- a/core/offlinemessage.lua
+++ /dev/null
@@ -1,35 +0,0 @@
--- Prosody IM v0.2
--- Copyright (C) 2008 Matthew Wild
--- Copyright (C) 2008 Waqas Hussain
---
--- This program is free software; you can redistribute it and/or
--- modify it under the terms of the GNU General Public License
--- as published by the Free Software Foundation; either version 2
--- of the License, or (at your option) any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program; if not, write to the Free Software
--- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
---
-
-
-
-require "util.datamanager"
-
-local datamanager = datamanager;
-local t_insert = table.insert;
-
-module "offlinemessage"
-
-function new(user, host, stanza)
- local offlinedata = datamanager.load(user, host, "offlinemsg") or {};
- t_insert(offlinedata, stanza);
- return datamanager.store(user, host, "offlinemsg", offlinedata);
-end
-
-return _M; \ No newline at end of file