diff mod_webpresence/mod_webpresence.lua @ 779:36044b77b6c2

mod_webpresence: Added possibility to get status as text
author Vadim Misbakh-Soloviov <mva@mva.name>
date Sun, 05 Aug 2012 09:07:48 +0700
parents 28b0a8cd950a
children 2d83708ea901
line wrap: on
line diff
--- 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", {