changeset 782:2d83708ea901

mod_webpresence: fixed text notation, added html, added status message output
author Vadim Misbakh-Soloviov <mva@mva.name>
date Mon, 06 Aug 2012 17:08:12 +0700
parents ab40d1650688
children d039a8dace3b
files mod_webpresence/mod_webpresence.lua
diffstat 1 files changed, 34 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mod_webpresence/mod_webpresence.lua	Sun Aug 05 17:51:58 2012 +0100
+++ b/mod_webpresence/mod_webpresence.lua	Mon Aug 06 17:08:12 2012 +0700
@@ -1,6 +1,8 @@
 module:depends("http");
 
 local jid_split = require "util.jid".prepped_split;
+local b64 = require "util.encodings".base64.encode;
+local sha1 = require "util.hashes".sha1;
 
 local function require_resource(name)
 	local icon_path = module:get_option_string("presence_icons", "icons");
@@ -13,16 +15,15 @@
 end
 
 local statuses = { online = {}, away = {}, xa = {}, dnd = {}, chat = {}, offline = {} };
-
-for status, _ in pairs(statuses) do
-	statuses[status].image = { 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" },
+	statuses[status].text = { status_code = 200, headers = { content_type = "text/plain" },
 		body = status };
-end
+end]]
 
 local function handle_request(event, path)
-	local status;
+	local status, message;
 	local jid, type = path:match("([^/]+)/?(.*)$");
 	if jid then
 		local user, host = jid_split(jid);
@@ -35,19 +36,44 @@
 			if user_sessions then
 				status = user_sessions.top_resources[1];
 				if status and status.presence then
+					message = status.presence:child_with_name("status");
 					status = status.presence:child_with_name("show");
 					if not status then
 						status = "online";
 					else
 						status = status:get_text();
 					end
+					if message then
+						message = message:get_text();
+					end
 				end
 			end
 		end
 	end
-
 	status = status or "offline";
-	return (type and type == "text") and statuses[status].text or statuses[status].image;
+	if type == "" then type = "image" end;
+	if type == "image" then 
+		statuses[status].image = { status_code = 200, headers = { content_type = "image/png" }, 
+			body = require_resource("status_"..status..".png") };
+	elseif type == "html" then
+		statuses[status].html = { status_code = 200, headers = { content_type = "text/html" },
+			body = [[<div id="]]..sha1(jid,true)..[[_status" class="xmpp_status">]]..
+					[[<img id="]]..sha1(jid,true)..[[_img" class="xmpp_status_image" ]]..
+						[[src="data:image/png;base64,]]..
+						b64(require_resource("status_"..status..".png"))..[[">]]..
+					[[<span id="]]..sha1(jid,true)..[[_name" ]]..
+						[[class="xmpp_status_name">]]..status..[[</span>]]..
+					(message and [[<span id="]]..sha1(jid,true)..[[_message" ]]..
+						[[class="xmpp_status_message">]]..message..[[</span>]] or "")..
+				[[</div>]] };
+	elseif type == "text" then
+		statuses[status].text = { status_code = 200, headers = { content_type = "text/plain" },
+			body = status };
+	elseif type == "message" then
+		statuses[status].message = { status_code = 200, headers = { content_type = "text/plain" },
+			body = (message and message or "") };
+	end
+	return statuses[status][type];
 end
 
 module:provides("http", {