Software /
code /
prosody
Annotate
core/moduleapi.lua @ 7567:495de404a8ae
ejabberdsql2prosody: rename variable 'host' to prevent shadowing upvalue [luacheck]
Functions roster(), roster_pending(), roster_group(), private_storage() and
offline_msg() have argument named "host", which used to shadow upvalue of this
variable before this change. Instead of renaming this argument, let's rename
the variable to match what the script says in usage:
Usage: ejabberdsql2prosody.lua filename.txt hostname
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Fri, 12 Aug 2016 13:44:47 +0800 |
parent | 7342:79a5db780e8b |
child | 7343:1da5a710848d |
child | 7646:6210dfaec84f |
rev | line source |
---|---|
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2012 Matthew Wild |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2012 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5771
diff
changeset
|
4 -- |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local config = require "core.configmanager"; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local array = require "util.array"; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 local set = require "util.set"; |
6651
deaa3d66dc2c
moduleapi: Add module:broadcast() to send a stanza to a list of JIDs
Matthew Wild <mwild1@gmail.com>
parents:
6640
diff
changeset
|
12 local it = require "util.iterators"; |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local logger = require "util.logger"; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local pluginloader = require "util.pluginloader"; |
4750
b3525f3c2fee
moduleapi: Import util.timer
Matthew Wild <mwild1@gmail.com>
parents:
4747
diff
changeset
|
15 local timer = require "util.timer"; |
6165
6a184b16b717
core.certmanager, core.moduleapi, mod_storage_sql, mod_storage_sql2: Import from util.paths
Kim Alvefur <zash@zash.se>
parents:
5825
diff
changeset
|
16 local resolve_relative_path = require"util.paths".resolve_relative_path; |
6556
74253c7beb9c
moduleapi: Module API for statsmanager
Matthew Wild <mwild1@gmail.com>
parents:
6422
diff
changeset
|
17 local measure = require "core.statsmanager".measure; |
6659
0a494394cd3e
moduleapi: Import util.stanza required for module:broadcast()
Matthew Wild <mwild1@gmail.com>
parents:
6656
diff
changeset
|
18 local st = require "util.stanza"; |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat; |
5021
85b2689dbcfe
Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents:
4896
diff
changeset
|
21 local error, setmetatable, type = error, setmetatable, type; |
7162
d0b64f1e4f5d
loggingmanager,modulemanager,moduleapi: Localize unpack compatible with Lua 5.2+
Kim Alvefur <zash@zash.se>
parents:
7127
diff
changeset
|
22 local ipairs, pairs, select = ipairs, pairs, select; |
7163
eadbf19d0de0
loggingmanager,modulemanager,moduleapi: Ignore warning about accessing _G.unpack [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7162
diff
changeset
|
23 local unpack = table.unpack or unpack; --luacheck: ignore 113 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 local tonumber, tostring = tonumber, tostring; |
6414
31c15004bfb0
core.moduleapi: Use require instead of global to get storagemanager in module:open_store()
Kim Alvefur <zash@zash.se>
parents:
6165
diff
changeset
|
25 local require = require; |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 local prosody = prosody; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 local hosts = prosody.hosts; |
5434
9dd36e20c1e3
moduleapi: assert() that prosody.core_post_stanza is not nil
Matthew Wild <mwild1@gmail.com>
parents:
5412
diff
changeset
|
29 |
9dd36e20c1e3
moduleapi: assert() that prosody.core_post_stanza is not nil
Matthew Wild <mwild1@gmail.com>
parents:
5412
diff
changeset
|
30 -- FIXME: This assert() is to try and catch an obscure bug (2013-04-05) |
9dd36e20c1e3
moduleapi: assert() that prosody.core_post_stanza is not nil
Matthew Wild <mwild1@gmail.com>
parents:
5412
diff
changeset
|
31 local core_post_stanza = assert(prosody.core_post_stanza, |
9dd36e20c1e3
moduleapi: assert() that prosody.core_post_stanza is not nil
Matthew Wild <mwild1@gmail.com>
parents:
5412
diff
changeset
|
32 "prosody.core_post_stanza is nil, please report this as a bug"); |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 -- Registry of shared module data |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 local shared_data = setmetatable({}, { __mode = "v" }); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 local NULL = {}; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 local api = {}; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 -- Returns the name of the current module |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 function api:get_name() |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 return self.name; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 -- Returns the host that the current module is serving |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 function api:get_host() |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 return self.host; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 function api:get_host_type() |
5771
c4ed6680bf8d
moduleapi: module:get_host_type() now returns 'global' for * and 'local' for non-components
Matthew Wild <mwild1@gmail.com>
parents:
5530
diff
changeset
|
52 return (self.host == "*" and "global") or hosts[self.host].type or "local"; |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 function api:set_global() |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 self.host = "*"; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 -- Update the logger |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 local _log = logger.init("mod_"..self.name); |
6656
58c111a39d27
moduleapi: Add luacheck annotation
Matthew Wild <mwild1@gmail.com>
parents:
6655
diff
changeset
|
59 self.log = function (self, ...) return _log(...); end; --luacheck: ignore self |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 self._log = _log; |
4605
69746db53125
moduleapi: Set module.global = true when module:set_global() is called
Matthew Wild <mwild1@gmail.com>
parents:
4539
diff
changeset
|
61 self.global = true; |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 function api:add_feature(xmlns) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 self:add_item("feature", xmlns); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 end |
6655
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
67 function api:add_identity(category, identity_type, name) |
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
68 self:add_item("identity", {category = category, type = identity_type, name = name}); |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 function api:add_extension(data) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 self:add_item("extension", data); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 end |
5412
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
73 function api:has_feature(xmlns) |
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
74 for _, feature in ipairs(self:get_host_items("feature")) do |
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
75 if feature == xmlns then return true; end |
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
76 end |
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
77 return false; |
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
78 end |
6655
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
79 function api:has_identity(category, identity_type, name) |
5412
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
80 for _, id in ipairs(self:get_host_items("identity")) do |
6655
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
81 if id.category == category and id.type == identity_type and id.name == name then |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5771
diff
changeset
|
82 return true; |
5412
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
83 end |
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
84 end |
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
85 return false; |
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
86 end |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 function api:fire_event(...) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 return (hosts[self.host] or prosody).events.fire_event(...); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 |
4534
7a0a31c4f6c5
modulemanager, moduleapi: Replace hooks multitable with an event_handlers map stored in individual modules. Also adds module:hook_object_event() to hook events on any util.events compatible object.
Matthew Wild <mwild1@gmail.com>
parents:
4531
diff
changeset
|
92 function api:hook_object_event(object, event, handler, priority) |
4896
27cda15104f2
modulemanager, moduleapi: Turn module.event_handlers into a multitable and track object->event->handler associations correctly (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
4893
diff
changeset
|
93 self.event_handlers:set(object, event, handler, true); |
4534
7a0a31c4f6c5
modulemanager, moduleapi: Replace hooks multitable with an event_handlers map stored in individual modules. Also adds module:hook_object_event() to hook events on any util.events compatible object.
Matthew Wild <mwild1@gmail.com>
parents:
4531
diff
changeset
|
94 return object.add_handler(event, handler, priority); |
7a0a31c4f6c5
modulemanager, moduleapi: Replace hooks multitable with an event_handlers map stored in individual modules. Also adds module:hook_object_event() to hook events on any util.events compatible object.
Matthew Wild <mwild1@gmail.com>
parents:
4531
diff
changeset
|
95 end |
7a0a31c4f6c5
modulemanager, moduleapi: Replace hooks multitable with an event_handlers map stored in individual modules. Also adds module:hook_object_event() to hook events on any util.events compatible object.
Matthew Wild <mwild1@gmail.com>
parents:
4531
diff
changeset
|
96 |
4708
0e324923ff95
moduleapi: Fix parameters to unhook_object_event()
Matthew Wild <mwild1@gmail.com>
parents:
4707
diff
changeset
|
97 function api:unhook_object_event(object, event, handler) |
6654
22a7ee3379bc
moduleapi: Clear self.event_handlers when unhooking an event, to prevent leaks
Matthew Wild <mwild1@gmail.com>
parents:
6653
diff
changeset
|
98 self.event_handlers:set(object, event, handler, nil); |
4695
838ad61c6b2c
moduleapi: Add module:unhook_object_event()
Matthew Wild <mwild1@gmail.com>
parents:
4666
diff
changeset
|
99 return object.remove_handler(event, handler); |
838ad61c6b2c
moduleapi: Add module:unhook_object_event()
Matthew Wild <mwild1@gmail.com>
parents:
4666
diff
changeset
|
100 end |
838ad61c6b2c
moduleapi: Add module:unhook_object_event()
Matthew Wild <mwild1@gmail.com>
parents:
4666
diff
changeset
|
101 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 function api:hook(event, handler, priority) |
4534
7a0a31c4f6c5
modulemanager, moduleapi: Replace hooks multitable with an event_handlers map stored in individual modules. Also adds module:hook_object_event() to hook events on any util.events compatible object.
Matthew Wild <mwild1@gmail.com>
parents:
4531
diff
changeset
|
103 return self:hook_object_event((hosts[self.host] or prosody).events, event, handler, priority); |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 function api:hook_global(event, handler, priority) |
4534
7a0a31c4f6c5
modulemanager, moduleapi: Replace hooks multitable with an event_handlers map stored in individual modules. Also adds module:hook_object_event() to hook events on any util.events compatible object.
Matthew Wild <mwild1@gmail.com>
parents:
4531
diff
changeset
|
107 return self:hook_object_event(prosody.events, event, handler, priority); |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 |
4719
2087d42f1e77
moduleapi: Rename module:hook_stanza() -> module:hook_tag() (hook_stanza works for compat)
Matthew Wild <mwild1@gmail.com>
parents:
4718
diff
changeset
|
110 function api:hook_tag(xmlns, name, handler, priority) |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
111 if not handler and type(name) == "function" then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 -- If only 2 options then they specified no xmlns |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 xmlns, name, handler, priority = nil, xmlns, name, handler; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 elseif not (handler and name) then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 self:log("warn", "Error: Insufficient parameters to module:hook_stanza()"); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 return; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 return self:hook("stanza/"..(xmlns and (xmlns..":") or "")..name, function (data) return handler(data.origin, data.stanza, data); end, priority); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 end |
4719
2087d42f1e77
moduleapi: Rename module:hook_stanza() -> module:hook_tag() (hook_stanza works for compat)
Matthew Wild <mwild1@gmail.com>
parents:
4718
diff
changeset
|
120 api.hook_stanza = api.hook_tag; -- COMPAT w/pre-0.9 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 |
5825
ac5e05ffc921
moduleapi: Add module:unhook()
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
122 function api:unhook(event, handler) |
ac5e05ffc921
moduleapi: Add module:unhook()
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
123 return self:unhook_object_event((hosts[self.host] or prosody).events, event, handler); |
ac5e05ffc921
moduleapi: Add module:unhook()
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
124 end |
ac5e05ffc921
moduleapi: Add module:unhook()
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
125 |
6640
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
126 function api:wrap_object_event(events_object, event, handler) |
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
127 return self:hook_object_event(assert(events_object.wrappers, "no wrappers"), event, handler); |
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
128 end |
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
129 |
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
130 function api:wrap_event(event, handler) |
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
131 return self:wrap_object_event((hosts[self.host] or prosody).events, event, handler); |
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
132 end |
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
133 |
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
134 function api:wrap_global(event, handler) |
6652
06116b2789f0
moduleapi: Remove accidental use of undefined and unnecessary 'priority' variable
Matthew Wild <mwild1@gmail.com>
parents:
6651
diff
changeset
|
135 return self:hook_object_event(prosody.events, event, handler); |
6640
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
136 end |
859e9af53aa1
moduleapi: New methods for modules to conveniently wrap events
Matthew Wild <mwild1@gmail.com>
parents:
6639
diff
changeset
|
137 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 function api:require(lib) |
7115
805d068d2fd5
modulemanager, util.pluginloader: Move logic for locating some module libraries to pluginloader, to fix problems with non-filesystem errors being masked by the second load_code call
Matthew Wild <mwild1@gmail.com>
parents:
6779
diff
changeset
|
139 local f, n = pluginloader.load_code_ext(self.name, lib, "lib.lua", self.environment); |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 if not f then error("Failed to load plugin library '"..lib.."', error: "..n); end -- FIXME better error message |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 return f(); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
143 |
4538
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
144 function api:depends(name) |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6659
diff
changeset
|
145 local modulemanager = require"core.modulemanager"; |
4538
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
146 if not self.dependencies then |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
147 self.dependencies = {}; |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
148 self:hook("module-reloaded", function (event) |
4854
dab55c6f7710
moduleapi: Don't auto-reload self when already reloading (fixes reload of modules with cyclic dependencies)
Matthew Wild <mwild1@gmail.com>
parents:
4790
diff
changeset
|
149 if self.dependencies[event.module] and not self.reloading then |
4538
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
150 self:log("info", "Auto-reloading due to reload of %s:%s", event.host, event.module); |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
151 modulemanager.reload(self.host, self.name); |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
152 return; |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
153 end |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
154 end); |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
155 self:hook("module-unloaded", function (event) |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
156 if self.dependencies[event.module] then |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
157 self:log("info", "Auto-unloading due to unload of %s:%s", event.host, event.module); |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
158 modulemanager.unload(self.host, self.name); |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
159 end |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
160 end); |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
161 end |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
162 local mod = modulemanager.get_module(self.host, name) or modulemanager.get_module("*", name); |
4707
d8fc9a1aabeb
moduleapi: module:depends(): Don't load shared modules onto the current host if the current host is '*'...
Matthew Wild <mwild1@gmail.com>
parents:
4695
diff
changeset
|
163 if mod and mod.module.host == "*" and self.host ~= "*" |
d8fc9a1aabeb
moduleapi: module:depends(): Don't load shared modules onto the current host if the current host is '*'...
Matthew Wild <mwild1@gmail.com>
parents:
4695
diff
changeset
|
164 and modulemanager.module_has_method(mod, "add_host") then |
5077
6c2c8bf36d22
moduleapi: Clarify comment
Matthew Wild <mwild1@gmail.com>
parents:
5053
diff
changeset
|
165 mod = nil; -- Target is a shared module, so we still want to load it on our host |
4663
24524d70a50a
moduleapi: module:depends(): Load shared modules onto the current host even if they are loaded globally already
Matthew Wild <mwild1@gmail.com>
parents:
4661
diff
changeset
|
166 end |
4538
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
167 if not mod then |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
168 local err; |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
169 mod, err = modulemanager.load(self.host, name); |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
170 if not mod then |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
171 return error(("Unable to load required module, mod_%s: %s"):format(name, ((err or "unknown error"):gsub("%-", " ")) )); |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
172 end |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
173 end |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
174 self.dependencies[name] = true; |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
175 return mod; |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
176 end |
d0a89c1c43fd
moduleapi: Add module:depends(), a way to safely depend upon another module at runtime
Matthew Wild <mwild1@gmail.com>
parents:
4534
diff
changeset
|
177 |
4539
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
178 -- Returns one or more shared tables at the specified virtual paths |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
179 -- Intentionally does not allow the table at a path to be _set_, it |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
180 -- is auto-created if it does not exist. |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
181 function api:shared(...) |
4651
d1739d72100a
moduleapi: Have modules internally store a reference to shared tables they use, to ensure they don't get collected while any module that had access to that table is still loaded (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
4614
diff
changeset
|
182 if not self.shared_data then self.shared_data = {}; end |
4539
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
183 local paths = { n = select("#", ...), ... }; |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
184 local data_array = {}; |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
185 local default_path_components = { self.host, self.name }; |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
186 for i = 1, paths.n do |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
187 local path = paths[i]; |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
188 if path:sub(1,1) ~= "/" then -- Prepend default components |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
189 local n_components = select(2, path:gsub("/", "%1")); |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
190 path = (n_components<#default_path_components and "/" or "")..t_concat(default_path_components, "/", 1, #default_path_components-n_components).."/"..path; |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
191 end |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
192 local shared = shared_data[path]; |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
193 if not shared then |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
194 shared = {}; |
5053
375ab71e4b37
moduleapi: If path name ends with '-cache' create table as weak (keys and values)
Matthew Wild <mwild1@gmail.com>
parents:
5024
diff
changeset
|
195 if path:match("%-cache$") then |
375ab71e4b37
moduleapi: If path name ends with '-cache' create table as weak (keys and values)
Matthew Wild <mwild1@gmail.com>
parents:
5024
diff
changeset
|
196 setmetatable(shared, { __mode = "kv" }); |
375ab71e4b37
moduleapi: If path name ends with '-cache' create table as weak (keys and values)
Matthew Wild <mwild1@gmail.com>
parents:
5024
diff
changeset
|
197 end |
4539
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
198 shared_data[path] = shared; |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
199 end |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
200 t_insert(data_array, shared); |
4651
d1739d72100a
moduleapi: Have modules internally store a reference to shared tables they use, to ensure they don't get collected while any module that had access to that table is still loaded (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
4614
diff
changeset
|
201 self.shared_data[path] = shared; |
4539
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
202 end |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
203 return unpack(data_array); |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
204 end |
3cbfa768eb06
moduleapi: Add module:shared(), a way to easily share data between multiple loaded modules
Matthew Wild <mwild1@gmail.com>
parents:
4538
diff
changeset
|
205 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
206 function api:get_option(name, default_value) |
5377
898454038524
core.*: Complete removal of all traces of the "core" section and section-related code.
Kim Alvefur <zash@zash.se>
parents:
5163
diff
changeset
|
207 local value = config.get(self.host, name); |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
208 if value == nil then |
5377
898454038524
core.*: Complete removal of all traces of the "core" section and section-related code.
Kim Alvefur <zash@zash.se>
parents:
5163
diff
changeset
|
209 value = default_value; |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
210 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
211 return value; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
212 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
213 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
214 function api:get_option_string(name, default_value) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
215 local value = self:get_option(name, default_value); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
216 if type(value) == "table" then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
217 if #value > 1 then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
218 self:log("error", "Config option '%s' does not take a list, using just the first item", name); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
219 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
220 value = value[1]; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
221 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
222 if value == nil then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 return nil; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 return tostring(value); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
227 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
228 function api:get_option_number(name, ...) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
229 local value = self:get_option(name, ...); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
230 if type(value) == "table" then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
231 if #value > 1 then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
232 self:log("error", "Config option '%s' does not take a list, using just the first item", name); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
233 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
234 value = value[1]; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
235 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
236 local ret = tonumber(value); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 if value ~= nil and ret == nil then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
238 self:log("error", "Config option '%s' not understood, expecting a number", name); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
239 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
240 return ret; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
241 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
242 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
243 function api:get_option_boolean(name, ...) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
244 local value = self:get_option(name, ...); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
245 if type(value) == "table" then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
246 if #value > 1 then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
247 self:log("error", "Config option '%s' does not take a list, using just the first item", name); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
248 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
249 value = value[1]; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
250 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
251 if value == nil then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
252 return nil; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
253 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
254 local ret = value == true or value == "true" or value == 1 or nil; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
255 if ret == nil then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
256 ret = (value == false or value == "false" or value == 0); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
257 if ret then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
258 ret = false; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
259 else |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
260 ret = nil; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
261 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
262 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
263 if ret == nil then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
264 self:log("error", "Config option '%s' not understood, expecting true/false", name); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
265 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
266 return ret; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
267 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
268 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
269 function api:get_option_array(name, ...) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
270 local value = self:get_option(name, ...); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
271 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
272 if value == nil then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
273 return nil; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
274 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5771
diff
changeset
|
275 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
276 if type(value) ~= "table" then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
277 return array{ value }; -- Assume any non-list is a single-item list |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
278 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5771
diff
changeset
|
279 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
280 return array():append(value); -- Clone |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
281 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
282 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
283 function api:get_option_set(name, ...) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
284 local value = self:get_option_array(name, ...); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5771
diff
changeset
|
285 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
286 if value == nil then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
287 return nil; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
288 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5771
diff
changeset
|
289 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
290 return set.new(value); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
291 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
292 |
5527
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
293 function api:get_option_inherited_set(name, ...) |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
294 local value = self:get_option_set(name, ...); |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
295 local global_value = self:context("*"):get_option_set(name, ...); |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
296 if not value then |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
297 return global_value; |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
298 elseif not global_value then |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
299 return value; |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
300 end |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
301 value:include(global_value); |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
302 return value; |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
303 end |
7e7f45f587a1
moduleapi: Add module:get_option_inherited_set() to return a set that inherits items from a globally set set, if set
Matthew Wild <mwild1@gmail.com>
parents:
5526
diff
changeset
|
304 |
7127
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
305 function api:get_option_path(name, default, parent) |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
306 if parent == nil then |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
307 parent = parent or self:get_directory(); |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
308 elseif prosody.paths[parent] then |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
309 parent = prosody.paths[parent]; |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
310 end |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
311 local value = self:get_option_string(name, default); |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
312 if value == nil then |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
313 return nil; |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
314 end |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
315 return resolve_relative_path(parent, value); |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
316 end |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
317 |
27557dd7b460
moduleapi: Add API method for getting a file path
Kim Alvefur <zash@zash.se>
parents:
7115
diff
changeset
|
318 |
5526
d54011a23b20
moduleapi: Add module:context(host) to produce a fake API context for a given host (or global). module:context("*"):get_option("foo") to get global options.
Matthew Wild <mwild1@gmail.com>
parents:
5498
diff
changeset
|
319 function api:context(host) |
d54011a23b20
moduleapi: Add module:context(host) to produce a fake API context for a given host (or global). module:context("*"):get_option("foo") to get global options.
Matthew Wild <mwild1@gmail.com>
parents:
5498
diff
changeset
|
320 return setmetatable({host=host or "*"}, {__index=self,__newindex=self}); |
d54011a23b20
moduleapi: Add module:context(host) to produce a fake API context for a given host (or global). module:context("*"):get_option("foo") to get global options.
Matthew Wild <mwild1@gmail.com>
parents:
5498
diff
changeset
|
321 end |
d54011a23b20
moduleapi: Add module:context(host) to produce a fake API context for a given host (or global). module:context("*"):get_option("foo") to get global options.
Matthew Wild <mwild1@gmail.com>
parents:
5498
diff
changeset
|
322 |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
323 function api:add_item(key, value) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
324 self.items = self.items or {}; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
325 self.items[key] = self.items[key] or {}; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
326 t_insert(self.items[key], value); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
327 self:fire_event("item-added/"..key, {source = self, item = value}); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
328 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
329 function api:remove_item(key, value) |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
330 local t = self.items and self.items[key] or NULL; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
331 for i = #t,1,-1 do |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
332 if t[i] == value then |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
333 t_remove(self.items[key], i); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
334 self:fire_event("item-removed/"..key, {source = self, item = value}); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
335 return value; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
336 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
337 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
338 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
339 |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
340 function api:get_host_items(key) |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6659
diff
changeset
|
341 local modulemanager = require"core.modulemanager"; |
5412
a5fcda77c6b1
moduleapi: have get_host_items wrap on get_items from modulemanager, also add has_{feature/identity} to the API.
Marco Cirillo <maranda@lightwitch.org>
parents:
5377
diff
changeset
|
342 local result = modulemanager.get_items(key, self.host) or {}; |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
343 return result; |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
344 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
345 |
6655
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
346 function api:handle_items(item_type, added_cb, removed_cb, existing) |
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
347 self:hook("item-added/"..item_type, added_cb); |
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
348 self:hook("item-removed/"..item_type, removed_cb); |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
349 if existing ~= false then |
6655
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
350 for _, item in ipairs(self:get_host_items(item_type)) do |
4531
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
351 added_cb({ item = item }); |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
352 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
353 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
354 end |
c778ce7e3c78
modulemanager: Move in-module API functions to core.moduleapi (half the file size, yay)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
355 |
4613
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
356 function api:provides(name, item) |
5529
af58eea131b4
moduleapi: module:provides called without an item makes a copy of the environment instead. Fixes warnings about non-existent globals
Kim Alvefur <zash@zash.se>
parents:
5527
diff
changeset
|
357 -- if not item then item = setmetatable({}, { __index = function(t,k) return rawget(self.environment, k); end }); end |
af58eea131b4
moduleapi: module:provides called without an item makes a copy of the environment instead. Fixes warnings about non-existent globals
Kim Alvefur <zash@zash.se>
parents:
5527
diff
changeset
|
358 if not item then |
af58eea131b4
moduleapi: module:provides called without an item makes a copy of the environment instead. Fixes warnings about non-existent globals
Kim Alvefur <zash@zash.se>
parents:
5527
diff
changeset
|
359 item = {} |
af58eea131b4
moduleapi: module:provides called without an item makes a copy of the environment instead. Fixes warnings about non-existent globals
Kim Alvefur <zash@zash.se>
parents:
5527
diff
changeset
|
360 for k,v in pairs(self.environment) do |
af58eea131b4
moduleapi: module:provides called without an item makes a copy of the environment instead. Fixes warnings about non-existent globals
Kim Alvefur <zash@zash.se>
parents:
5527
diff
changeset
|
361 if k ~= "module" then item[k] = v; end |
af58eea131b4
moduleapi: module:provides called without an item makes a copy of the environment instead. Fixes warnings about non-existent globals
Kim Alvefur <zash@zash.se>
parents:
5527
diff
changeset
|
362 end |
af58eea131b4
moduleapi: module:provides called without an item makes a copy of the environment instead. Fixes warnings about non-existent globals
Kim Alvefur <zash@zash.se>
parents:
5527
diff
changeset
|
363 end |
4613
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
364 if not item.name then |
4660
96b40b5e8ea8
moduleapi: module:provides(): Fix usage of wrong table
Matthew Wild <mwild1@gmail.com>
parents:
4651
diff
changeset
|
365 local item_name = self.name; |
4613
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
366 -- Strip a provider prefix to find the item name |
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
367 -- (e.g. "auth_foo" -> "foo" for an auth provider) |
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
368 if item_name:find(name.."_", 1, true) == 1 then |
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
369 item_name = item_name:sub(#name+2); |
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
370 end |
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
371 item.name = item_name; |
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
372 end |
5530
d83482fc4a81
moduleapi: in module:provides(), add the name of the module in item._provided_by
Kim Alvefur <zash@zash.se>
parents:
5529
diff
changeset
|
373 item._provided_by = self.name; |
4661
76db5d0a2104
moduleapi: module:provides(): Add "-provider" onto the key name
Matthew Wild <mwild1@gmail.com>
parents:
4660
diff
changeset
|
374 self:add_item(name.."-provider", item); |
4613
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
375 end |
27fbc9c69eb5
moduleapi: Add module:provides(), a shortcut to add an item with the current module's name
Matthew Wild <mwild1@gmail.com>
parents:
4605
diff
changeset
|
376 |
7342
79a5db780e8b
moduleapi: Allow an origin session to be passed to module:send()
Kim Alvefur <zash@zash.se>
parents:
7163
diff
changeset
|
377 function api:send(stanza, origin) |
79a5db780e8b
moduleapi: Allow an origin session to be passed to module:send()
Kim Alvefur <zash@zash.se>
parents:
7163
diff
changeset
|
378 return core_post_stanza(origin or hosts[self.host], stanza); |
4614
20940729c1b4
moduleapi: Add module:send() as an alias for core_post_stanza() from the current host's origin
Matthew Wild <mwild1@gmail.com>
parents:
4613
diff
changeset
|
379 end |
20940729c1b4
moduleapi: Add module:send() as an alias for core_post_stanza() from the current host's origin
Matthew Wild <mwild1@gmail.com>
parents:
4613
diff
changeset
|
380 |
6651
deaa3d66dc2c
moduleapi: Add module:broadcast() to send a stanza to a list of JIDs
Matthew Wild <mwild1@gmail.com>
parents:
6640
diff
changeset
|
381 function api:broadcast(jids, stanza, iter) |
deaa3d66dc2c
moduleapi: Add module:broadcast() to send a stanza to a list of JIDs
Matthew Wild <mwild1@gmail.com>
parents:
6640
diff
changeset
|
382 for jid in (iter or it.values)(jids) do |
deaa3d66dc2c
moduleapi: Add module:broadcast() to send a stanza to a list of JIDs
Matthew Wild <mwild1@gmail.com>
parents:
6640
diff
changeset
|
383 local new_stanza = st.clone(stanza); |
deaa3d66dc2c
moduleapi: Add module:broadcast() to send a stanza to a list of JIDs
Matthew Wild <mwild1@gmail.com>
parents:
6640
diff
changeset
|
384 new_stanza.attr.to = jid; |
deaa3d66dc2c
moduleapi: Add module:broadcast() to send a stanza to a list of JIDs
Matthew Wild <mwild1@gmail.com>
parents:
6640
diff
changeset
|
385 core_post_stanza(hosts[self.host], new_stanza); |
deaa3d66dc2c
moduleapi: Add module:broadcast() to send a stanza to a list of JIDs
Matthew Wild <mwild1@gmail.com>
parents:
6640
diff
changeset
|
386 end |
deaa3d66dc2c
moduleapi: Add module:broadcast() to send a stanza to a list of JIDs
Matthew Wild <mwild1@gmail.com>
parents:
6640
diff
changeset
|
387 end |
deaa3d66dc2c
moduleapi: Add module:broadcast() to send a stanza to a list of JIDs
Matthew Wild <mwild1@gmail.com>
parents:
6640
diff
changeset
|
388 |
4666
fb522fbd495e
moduleapi: Add module:add_timer(delay, callback) - automatically halts the timer on module unload
Matthew Wild <mwild1@gmail.com>
parents:
4663
diff
changeset
|
389 function api:add_timer(delay, callback) |
fb522fbd495e
moduleapi: Add module:add_timer(delay, callback) - automatically halts the timer on module unload
Matthew Wild <mwild1@gmail.com>
parents:
4663
diff
changeset
|
390 return timer.add_task(delay, function (t) |
fb522fbd495e
moduleapi: Add module:add_timer(delay, callback) - automatically halts the timer on module unload
Matthew Wild <mwild1@gmail.com>
parents:
4663
diff
changeset
|
391 if self.loaded == false then return; end |
fb522fbd495e
moduleapi: Add module:add_timer(delay, callback) - automatically halts the timer on module unload
Matthew Wild <mwild1@gmail.com>
parents:
4663
diff
changeset
|
392 return callback(t); |
fb522fbd495e
moduleapi: Add module:add_timer(delay, callback) - automatically halts the timer on module unload
Matthew Wild <mwild1@gmail.com>
parents:
4663
diff
changeset
|
393 end); |
fb522fbd495e
moduleapi: Add module:add_timer(delay, callback) - automatically halts the timer on module unload
Matthew Wild <mwild1@gmail.com>
parents:
4663
diff
changeset
|
394 end |
fb522fbd495e
moduleapi: Add module:add_timer(delay, callback) - automatically halts the timer on module unload
Matthew Wild <mwild1@gmail.com>
parents:
4663
diff
changeset
|
395 |
4790
8bf710b19f65
moduleapi: Add module:get_directory() to get module file's directory, and module:load_resource() to load a file relative to that directory
Matthew Wild <mwild1@gmail.com>
parents:
4750
diff
changeset
|
396 local path_sep = package.config:sub(1,1); |
8bf710b19f65
moduleapi: Add module:get_directory() to get module file's directory, and module:load_resource() to load a file relative to that directory
Matthew Wild <mwild1@gmail.com>
parents:
4750
diff
changeset
|
397 function api:get_directory() |
8bf710b19f65
moduleapi: Add module:get_directory() to get module file's directory, and module:load_resource() to load a file relative to that directory
Matthew Wild <mwild1@gmail.com>
parents:
4750
diff
changeset
|
398 return self.path and (self.path:gsub("%"..path_sep.."[^"..path_sep.."]*$", "")) or nil; |
8bf710b19f65
moduleapi: Add module:get_directory() to get module file's directory, and module:load_resource() to load a file relative to that directory
Matthew Wild <mwild1@gmail.com>
parents:
4750
diff
changeset
|
399 end |
8bf710b19f65
moduleapi: Add module:get_directory() to get module file's directory, and module:load_resource() to load a file relative to that directory
Matthew Wild <mwild1@gmail.com>
parents:
4750
diff
changeset
|
400 |
8bf710b19f65
moduleapi: Add module:get_directory() to get module file's directory, and module:load_resource() to load a file relative to that directory
Matthew Wild <mwild1@gmail.com>
parents:
4750
diff
changeset
|
401 function api:load_resource(path, mode) |
6165
6a184b16b717
core.certmanager, core.moduleapi, mod_storage_sql, mod_storage_sql2: Import from util.paths
Kim Alvefur <zash@zash.se>
parents:
5825
diff
changeset
|
402 path = resolve_relative_path(self:get_directory(), path); |
4790
8bf710b19f65
moduleapi: Add module:get_directory() to get module file's directory, and module:load_resource() to load a file relative to that directory
Matthew Wild <mwild1@gmail.com>
parents:
4750
diff
changeset
|
403 return io.open(path, mode); |
8bf710b19f65
moduleapi: Add module:get_directory() to get module file's directory, and module:load_resource() to load a file relative to that directory
Matthew Wild <mwild1@gmail.com>
parents:
4750
diff
changeset
|
404 end |
8bf710b19f65
moduleapi: Add module:get_directory() to get module file's directory, and module:load_resource() to load a file relative to that directory
Matthew Wild <mwild1@gmail.com>
parents:
4750
diff
changeset
|
405 |
6655
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
406 function api:open_store(name, store_type) |
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
407 return require"core.storagemanager".open(self.host, name or self.name, store_type); |
5496
7a0b81b5ca71
moduleapi: Add module:open_store() as a front-end to storagemanager.open()
Matthew Wild <mwild1@gmail.com>
parents:
5434
diff
changeset
|
408 end |
7a0b81b5ca71
moduleapi: Add module:open_store() as a front-end to storagemanager.open()
Matthew Wild <mwild1@gmail.com>
parents:
5434
diff
changeset
|
409 |
6655
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
410 function api:measure(name, stat_type) |
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
411 return measure(stat_type, "/"..self.host.."/mod_"..self.name.."/"..name); |
6556
74253c7beb9c
moduleapi: Module API for statsmanager
Matthew Wild <mwild1@gmail.com>
parents:
6422
diff
changeset
|
412 end |
74253c7beb9c
moduleapi: Module API for statsmanager
Matthew Wild <mwild1@gmail.com>
parents:
6422
diff
changeset
|
413 |
6639
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
414 function api:measure_object_event(events_object, event_name, stat_name) |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
415 local m = self:measure(stat_name or event_name, "duration"); |
6655
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
416 local function handler(handlers, _event_name, _event_data) |
6639
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
417 local finished = m(); |
6655
a99ed5f5f709
moduleapi: Minor variable renaming to avoid clashes with the 'type' function
Matthew Wild <mwild1@gmail.com>
parents:
6654
diff
changeset
|
418 local ret = handlers(_event_name, _event_data); |
6639
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
419 finished(); |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
420 return ret; |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
421 end |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
422 return self:hook_object_event(events_object, event_name, handler); |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
423 end |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
424 |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
425 function api:measure_event(event_name, stat_name) |
6653
8241eac507c3
moduleapi: module:measure_event(), module:measure_global_event(): Fix copy/paste error
Matthew Wild <mwild1@gmail.com>
parents:
6652
diff
changeset
|
426 return self:measure_object_event((hosts[self.host] or prosody).events.wrappers, event_name, stat_name); |
6639
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
427 end |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
428 |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
429 function api:measure_global_event(event_name, stat_name) |
6653
8241eac507c3
moduleapi: module:measure_event(), module:measure_global_event(): Fix copy/paste error
Matthew Wild <mwild1@gmail.com>
parents:
6652
diff
changeset
|
430 return self:measure_object_event(prosody.events.wrappers, event_name, stat_name); |
6639
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
431 end |
3003d041c159
moduleapi: Experimental API for modules to measure the rate+duration of events
Matthew Wild <mwild1@gmail.com>
parents:
6556
diff
changeset
|
432 |
6422
6d4d87a89026
core.module{manager,api}: Fix for 010b141e91ed (Thanks v1ct0r)
Kim Alvefur <zash@zash.se>
parents:
6415
diff
changeset
|
433 return api; |