--- a/mod_webpresence/mod_webpresence.lua Sun Aug 05 02:38:38 2012 +0100
+++ b/mod_webpresence/mod_webpresence.lua Sun Aug 05 09:07:48 2012 +0700
@@ -2,27 +2,28 @@
local jid_split = require "util.jid".prepped_split;
-if not require_resource then
- function require_resource(name)
- local icon_path = module:get_option_string("presence_icons", "icons");
- local f, err = module:load_resource(icon_path.."/"..name);
- if f then
- return f:read("*a");
- end
- module:log("warn", "Failed to open image file %s", icon_path..name);
- return "";
+local function require_resource(name)
+ local icon_path = module:get_option_string("presence_icons", "icons");
+ local f, err = module:load_resource(icon_path.."/"..name);
+ if f then
+ return f:read("*a");
end
+ module:log("warn", "Failed to open image file %s", icon_path..name);
+ return "";
end
-local statuses = { "online", "away", "xa", "dnd", "chat", "offline" };
+local statuses = { online = {}, away = {}, xa = {}, dnd = {}, chat = {}, offline = {} };
-for _, status in ipairs(statuses) do
- statuses[status] = { status_code = 200, headers = { content_type = "image/png" },
+for status, _ in pairs(statuses) do
+ statuses[status].image = { status_code = 200, headers = { content_type = "image/png" },
body = require_resource("status_"..status..".png") };
+ statuses[status].text = { status_code = 200, headers = { content_type = "plain/text" },
+ body = status };
end
local function handle_request(event, path)
- local jid = path:match("[^/]+$");
+ local status;
+ local jid, type = path:match("([^/]+)/?(.*)$");
if jid then
local user, host = jid_split(jid);
if host and not user then
@@ -32,7 +33,7 @@
if user and host then
local user_sessions = hosts[host] and hosts[host].sessions[user];
if user_sessions then
- local status = user_sessions.top_resources[1];
+ status = user_sessions.top_resources[1];
if status and status.presence then
status = status.presence:child_with_name("show");
if not status then
@@ -40,12 +41,13 @@
else
status = status:get_text();
end
- return statuses[status];
end
end
end
end
- return statuses.offline;
+
+ status = status or "offline";
+ return (type and type == "text") and statuses[status].text or statuses[status].image;
end
module:provides("http", {