Changeset

643:28b0a8cd950a

mod_webpresence: Update to timber, remove squish hack (icons are now loaded relative to the module file)
author Matthew Wild <mwild1@gmail.com>
date Sat, 28 Apr 2012 19:44:42 +0100
parents 642:842a8a3b0d81
children 644:ceac1a0e74ea
files mod_webpresence/mod_webpresence.in.lua mod_webpresence/mod_webpresence.lua mod_webpresence/squishy
diffstat 3 files changed, 54 insertions(+), 112 deletions(-) [+]
line wrap: on
line diff
--- a/mod_webpresence/mod_webpresence.in.lua	Sat Apr 28 18:21:29 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-local jid_split = require "util.jid".prepped_split;
-
-if not require_resource then
-	function require_resource(name)
-		local f = io.open((config.get("*", "core", "presence_icons") or "")..name);
-		if f then
-			return f:read("*a");
-		end
-		module:log("warn", "Failed to open image file %s", (config.get("*", "core", "presence_icons") or "")..name);
-		return "";
-	end
-end
-
-local response_404 = { status = "404 Not Found", body = "<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :(" };
-
-local statuses = { "online", "away", "xa", "dnd", "chat", "offline" };
-
-for _, status in ipairs(statuses) do
-	statuses[status] = { status = "200 OK", headers = { ["Content-Type"] = "image/png" }, 
-		body = require_resource("icons/status_"..status..".png") };
-end
-
-local function handle_request(method, body, request)
-	local jid = request.url.path:match("[^/]+$");
-	if jid then
-		local user, host = jid_split(jid);
-		if host and not user then
-			user, host = host, request.headers.host;
-			if host then host = host:gsub(":%d+$", ""); end
-		end
-		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];
-				if status and status.presence then
-					status = status.presence:child_with_name("show");
-					if not status then
-						status = "online";
-					else
-						status = status:get_text();
-					end
-					return statuses[status];
-				end
-			end
-		end
-	end
-	return statuses.offline;
-end
-
-local ports = config.get(module.host, "core", "http_ports") or { 5280 };
-require "net.httpserver".new_from_config(ports, "status", handle_request);
--- a/mod_webpresence/mod_webpresence.lua	Sat Apr 28 18:21:29 2012 +0100
+++ b/mod_webpresence/mod_webpresence.lua	Sat Apr 28 19:44:42 2012 +0100
@@ -1,49 +1,56 @@
-do local e={};e["icons/status_online.png"]='PNG\r\
-\
-\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(U_h[u?woM65Kel]+a[uOE\
-">D܆Pd0/VӗXAa)Ctin7U$m&Mn{ׇ;kwps뺬\'?7CjZԢ	Tu\\;zVwxGn{f43wiI//ѿ^;y^#jbB\0H["%v1k?R۶<\
-\\bЬ*Z@C{A\rPQu%3εjL\0ޕ{YhTPyɟ\' ޫ?(a+dE((BAhc3T^Ob0a2K%uU-.x"-KŸ`ߖ}zbcz4PªґȲ9l6mibA.w\\Fn/7XQA	GZЧ!~alcm"G"9	<xULEo.5"-->~@6@$><JӚ&q8<pZ)[<H\'\0I%~#tgR!X־ؽ2F #\0pC܈wp*<d3S/?oYV\\v6Xa\
-VSCT&[ζB5?12oe@uwDήI\'%+ƈݩQN{<J᱂TTd:\r6\\\
-}qsCZӝ/Vjg-hEӯ_\'i~&\0\0\0\0IENDB`'e["icons/status_away.png"]='PNG\r\
-\
-\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\01IDAT(U_Lu\0{QD	atԌpXHg\\5aVmڅEKE.Bm,\' H)” 9y{]s<R9/*nA<Ʀ]ms=nSlq2\0tc3wrIpw~xryTn0ii8.pԉ3J\0<X-V\0=0}|`?b`7A}m\0m5Ç0MsfDjK+XΚ<_0UzW8	@:a ~tˏfhBáf,ͤX([>cy@y()BI,Yueyz3o$胰Z&,PII*C$2dI{Cֻ|S<\0"r:p.dJI$x-6~/Q`ք1>Eb}t~x֣ͼwҨ{u5T%%%\0Ӿ}f&ԿGЪ`x7<IMGw3H@*;0K"UDtd/M}C#6nfol	^`E(5yz_Czcy+WumdsxITf`2\
-{~_SJQ]U+FFK3GϰőgƘYLzA>=4>=FuVCh?bɔ4C̠ɬwUjwv{Y[ҏ]@*Nn߼k^qRo,3v,j\0\0\0\0IENDB`'e["icons/status_xa.png"]="PNG\r\
-\
-\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\07IDAT(UmLUu\0s=s7LoC؂jm\rIlBhЋsEzqImI,m (6)|P,.쑄,Ϟ6ivFjYEqhFtCmE?KۤIHmLDm3rљPyuSm^JUMƥ\0XCpOKk-,>_SU180$d'xhST>uo_PD87s@~iҵ/M4ώ#8ӹk/Ot$Xʖk%|!XPKW6օxsbGuk;/?etJ	%{F};yX/!8BaaҁD>7^Ӷ*>+~?Xƚ{y_IX&Eq9ic9acddi(\0`vp\0`׫Ӓ$j5T	O\r7M\rӅat=P%px‚Y%j3ٌ]p񠷵Ѻ~Da&FFس\0wzvXԽ3R䡺L'\\+zװL3ZU딎͒á#Ngeʑ\\2Qm	,K2LM7^hQ\0ڎc+_ Ee'(.i-\\1mJXM1Q䋉;Vw>E*lwQ:E=wUU'v?hj\0\0\0\0IENDB`"e["icons/status_dnd.png"]="PNG\r\
-\
-\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(}k\\Us;IBj\"2hRLM[pQWnDtUQ(nZ*6]T\
-ªP-lL-I$w⚚ w^xD;{-SGZ宩_U٣6?jd\
-%!E`9x}W'zy?OZxi.+#Ei:mϷ{G~;ܡ\0h^xk}`m^D@w)|xp_'浙7~0XS*'}z`@B\"v|_:;ڢ1Z RZ5(P\
-_6ϙ(\
-7\0i+R1J1A	1DiWL>Fb{s9sf=?=7j!!ƈk-(ͦJVj<w]>3B DAD֚Z]14[C/4jD!@UY@}bSCBPʴzE,Enwp1e:]Yߕ_\\|jڭ{ɉ'֓{+|_R:6rjxuRcፖNuj)ОO?y[]𶎼xt#fjWWdݿ(yRi\0\0\0\0IENDB`"e["icons/status_chat.png"]='PNG\r\
-\
-\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(ULus!D`sqY:3deS˭15d-mfrㇶ6;f-oZs؈X6`LԎKk?PWt:r5c0:75m\rLƌP/ުz[/=@4"Xb24~ğo/ǎ{_hh*Rnr"),I $3=]}8@m@J.Fk/Zк<-no:\0w//gMk6E)ŲbX}N\r`"&o++tyYŕMap\0к\
-PEhvsiw%]DagkBY e%,NݦG{buoXd(-+gE2twP\\<M3NGɓg7-I33ss&ׯoC?xzgc+YSf \0\0	LdD"	jksb"|#Gpg,,K1qyGϦ̓gZ[/\
-uZ @\
-J 2ܝuȵX%WիauHHT7j*jލZ&cy\\={$nCq.u~-" ".D}䧟7Knٲ7Su%XDx7{lK`-("j[,ϛ\rVTV/se}cȈaw^b@03\0\0\0\0IENDB`'e["icons/status_offline.png"]="PNG\r\
-\
-\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(UKcg^\\[;SAp)tmL)3V,dp`6]/BA2JAP(iNҚdD'~Nr?޷Xٝ=Q\\_?VAQv 埮gjCia(\0B<u].//ūT]>Z~PEo5Fof0\0P0wr{UFփ666041]!Jd޽<<P>߯F>H)ut:8###8F0>0{5놚ddppvFGGmn8Tft]GJQ\0Xy`eeYZZbI)F\
-(szzP#z{{bT*2Du<$MMME\
-\0mL&<\0xjm7֬J#LRTH$eYhi)˸8dYΒfabb~u]|e>Ь¡RD\"Agg'S,RRWWGTUʓEJGw?ގ<\\.i#3y_?nTpztx\\CQ۶B ˲^EWlxVߥaY7&Â3YD_~UUu۟_<1mUirrZ7gD\0\0\0\0IENDB`"function require_resource(r)return e[r]or error("resource '"..tostring(r).."' not found");end end local s=require"util.jid".prepped_split;if not require_resource then
-function require_resource(e)local r=io.open((config.get("*","core","presence_icons")or"")..e);if r then
-return r:read("*a");end
-module:log("warn","Failed to open image file %s",(config.get("*","core","presence_icons")or"")..e);return"";end
+module:depends("http");
+
+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 "";
+	end
+end
+
+local statuses = { "online", "away", "xa", "dnd", "chat", "offline" };
+
+for _, status in ipairs(statuses) do
+	statuses[status] = { status_code = 200, headers = { content_type = "image/png" }, 
+		body = require_resource("status_"..status..".png") };
 end
-local e={status="404 Not Found",body="<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :("};local n={"online","away","xa","dnd","chat","offline"};for r,e in ipairs(n)do
-n[e]={status="200 OK",headers={["Content-Type"]="image/png"},body=require_resource("icons/status_"..e..".png")};end
-local function t(e,e,o)local e=o.url.path:match("[^/]+$");if e then
-local r,e=s(e);if e and not r then
-r,e=e,o.headers.host;if e then e=e:gsub(":%d+$","");end
+
+local function handle_request(event, path)
+	local jid = path:match("[^/]+$");
+	if jid then
+		local user, host = jid_split(jid);
+		if host and not user then
+			user, host = host, event.request.headers.host;
+			if host then host = host:gsub(":%d+$", ""); end
+		end
+		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];
+				if status and status.presence then
+					status = status.presence:child_with_name("show");
+					if not status then
+						status = "online";
+					else
+						status = status:get_text();
+					end
+					return statuses[status];
+				end
+			end
+		end
+	end
+	return statuses.offline;
 end
-if r and e then
-local e=hosts[e]and hosts[e].sessions[r];if e then
-local e=e.top_resources[1];if e and e.presence then
-e=e.presence:child_with_name("show");if not e then
-e="online";else
-e=e:get_text();end
-return n[e];end
-end
-end
-end
-return n.offline;end
-local e=config.get(module.host,"core","http_ports")or{5280};require"net.httpserver".new_from_config(e,"status",t);
\ No newline at end of file
+
+module:provides("http", {
+	default_path = "/status";
+	route = {
+		["GET /*"] = handle_request;
+	};
+});
--- a/mod_webpresence/squishy	Sat Apr 28 18:21:29 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-
-Option "minify-level" "full"
-
-Resource "icons/status_online.png"
-Resource "icons/status_away.png"
-Resource "icons/status_xa.png"
-Resource "icons/status_dnd.png"
-Resource "icons/status_chat.png"
-Resource "icons/status_offline.png"
-
-Main "mod_webpresence.in.lua"
-
-Output "mod_webpresence.lua"
-