Mercurial > prosody-modules
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", {