Mercurial > prosody-modules
comparison mod_register_apps/mod_register_apps.lua @ 4171:85fa8c9e992a
mod_register_apps: Add support for module:provides("site-app", app_info)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 06 Oct 2020 16:03:38 +0100 |
parents | 4656a64e59be |
children | bbd584cee042 |
comparison
equal
deleted
inserted
replaced
4170:2a655577fbcb | 4171:85fa8c9e992a |
---|---|
111 return base_url.."/"..s; | 111 return base_url.."/"..s; |
112 end | 112 end |
113 | 113 |
114 local site_apps = module:shared("apps"); | 114 local site_apps = module:shared("apps"); |
115 | 115 |
116 for k, v in pairs(site_apps) do | 116 local function add_app(app_info, source) |
117 if v._source == module.name then | 117 local app_id = app_info.id or app_info.name:gsub("%W+", "-"):lower(); |
118 site_apps[k] = nil; | 118 if (not show_apps or show_apps:contains(app_id)) |
119 and not (hide_apps and hide_apps:contains(app_id)) | |
120 and not site_apps[app_id] then | |
121 app_info.id = app_id; | |
122 app_info.image = relurl(app_info.image); | |
123 site_apps[app_id] = app_info; | |
124 app_info._source = source; | |
125 table.insert(site_apps, app_info); | |
119 end | 126 end |
120 end | 127 end |
121 | 128 |
122 for _, app_info in ipairs(app_config) do | 129 local function remove_app(app_info) |
123 local app_id = app_info.id or app_info.name:gsub("%W+", "-"):lower(); | 130 local app_id = app_info.id or app_info.name:gsub("%W+", "-"):lower(); |
124 if (not show_apps or show_apps:contains(app_id)) | 131 site_apps[app_id] = nil; |
125 and not (hide_apps and hide_apps:contains(app_id)) then | 132 end |
126 app_info.id = app_id; | 133 |
127 app_info.image = relurl(app_info.image); | 134 local function add_config_apps() |
128 site_apps[app_id] = app_info; | 135 for _, app_info in ipairs(app_config) do |
129 app_info._source = module.name; | 136 add_app(app_info, module.name); |
130 table.insert(site_apps, app_info); | 137 end |
138 end | |
139 | |
140 local function module_app_added(event) | |
141 module:log("warn", "ADDING %s", event.item.name) | |
142 add_app(event.item, module.name); | |
143 end | |
144 | |
145 local function module_app_removed(event) | |
146 remove_app(event.item); | |
147 end | |
148 | |
149 -- Remove all apps added by this module | |
150 local function remove_all_apps() | |
151 for k, v in pairs(site_apps) do | |
152 if v._source == module.name then | |
153 remove_app(k); | |
154 end | |
131 end | 155 end |
132 end | 156 end |
133 | 157 |
134 local mime_map = { | 158 local mime_map = { |
135 png = "image/png"; | 159 png = "image/png"; |
142 path = module:get_directory().."/assets"; | 166 path = module:get_directory().."/assets"; |
143 mime_map = mime_map; | 167 mime_map = mime_map; |
144 }); | 168 }); |
145 }; | 169 }; |
146 }); | 170 }); |
171 | |
172 function module.load() | |
173 add_config_apps(); | |
174 module:handle_items("site-app-provider", module_app_added, module_app_removed, true); | |
175 end | |
176 | |
177 function module.unload() | |
178 remove_all_apps(); | |
179 end | |
180 |