Mercurial > prosody-modules
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 778:56dd7c6420ee | 779:36044b77b6c2 |
|---|---|
| 1 module:depends("http"); | 1 module:depends("http"); |
| 2 | 2 |
| 3 local jid_split = require "util.jid".prepped_split; | 3 local jid_split = require "util.jid".prepped_split; |
| 4 | 4 |
| 5 if not require_resource then | 5 local function require_resource(name) |
| 6 function require_resource(name) | 6 local icon_path = module:get_option_string("presence_icons", "icons"); |
| 7 local icon_path = module:get_option_string("presence_icons", "icons"); | 7 local f, err = module:load_resource(icon_path.."/"..name); |
| 8 local f, err = module:load_resource(icon_path.."/"..name); | 8 if f then |
| 9 if f then | 9 return f:read("*a"); |
| 10 return f:read("*a"); | |
| 11 end | |
| 12 module:log("warn", "Failed to open image file %s", icon_path..name); | |
| 13 return ""; | |
| 14 end | 10 end |
| 11 module:log("warn", "Failed to open image file %s", icon_path..name); | |
| 12 return ""; | |
| 15 end | 13 end |
| 16 | 14 |
| 17 local statuses = { "online", "away", "xa", "dnd", "chat", "offline" }; | 15 local statuses = { online = {}, away = {}, xa = {}, dnd = {}, chat = {}, offline = {} }; |
| 18 | 16 |
| 19 for _, status in ipairs(statuses) do | 17 for status, _ in pairs(statuses) do |
| 20 statuses[status] = { status_code = 200, headers = { content_type = "image/png" }, | 18 statuses[status].image = { status_code = 200, headers = { content_type = "image/png" }, |
| 21 body = require_resource("status_"..status..".png") }; | 19 body = require_resource("status_"..status..".png") }; |
| 20 statuses[status].text = { status_code = 200, headers = { content_type = "plain/text" }, | |
| 21 body = status }; | |
| 22 end | 22 end |
| 23 | 23 |
| 24 local function handle_request(event, path) | 24 local function handle_request(event, path) |
| 25 local jid = path:match("[^/]+$"); | 25 local status; |
| 26 local jid, type = path:match("([^/]+)/?(.*)$"); | |
| 26 if jid then | 27 if jid then |
| 27 local user, host = jid_split(jid); | 28 local user, host = jid_split(jid); |
| 28 if host and not user then | 29 if host and not user then |
| 29 user, host = host, event.request.headers.host; | 30 user, host = host, event.request.headers.host; |
| 30 if host then host = host:gsub(":%d+$", ""); end | 31 if host then host = host:gsub(":%d+$", ""); end |
| 31 end | 32 end |
| 32 if user and host then | 33 if user and host then |
| 33 local user_sessions = hosts[host] and hosts[host].sessions[user]; | 34 local user_sessions = hosts[host] and hosts[host].sessions[user]; |
| 34 if user_sessions then | 35 if user_sessions then |
| 35 local status = user_sessions.top_resources[1]; | 36 status = user_sessions.top_resources[1]; |
| 36 if status and status.presence then | 37 if status and status.presence then |
| 37 status = status.presence:child_with_name("show"); | 38 status = status.presence:child_with_name("show"); |
| 38 if not status then | 39 if not status then |
| 39 status = "online"; | 40 status = "online"; |
| 40 else | 41 else |
| 41 status = status:get_text(); | 42 status = status:get_text(); |
| 42 end | 43 end |
| 43 return statuses[status]; | |
| 44 end | 44 end |
| 45 end | 45 end |
| 46 end | 46 end |
| 47 end | 47 end |
| 48 return statuses.offline; | 48 |
| 49 status = status or "offline"; | |
| 50 return (type and type == "text") and statuses[status].text or statuses[status].image; | |
| 49 end | 51 end |
| 50 | 52 |
| 51 module:provides("http", { | 53 module:provides("http", { |
| 52 default_path = "/status"; | 54 default_path = "/status"; |
| 53 route = { | 55 route = { |
