Changeset

177:0ffb565fcfd6

plugins.presence: Initial commit of plugin that caches the last outgoing presence, and handles rebroadcast
author Kim Alvefur <zash@zash.se>
date Fri, 31 Dec 2010 01:29:28 +0100
parents 176:6004486e8b6c
children 178:2189f75e09b9
files plugins/presence.lua
diffstat 1 files changed, 38 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/presence.lua	Fri Dec 31 01:29:28 2010 +0100
@@ -0,0 +1,38 @@
+local st = require "util.stanza"
+function verse.plugins.presence(stream)
+	stream.last_presence = nil;
+
+	stream:hook("presence-out", function (presence)
+		if not presence.attr.to then
+			stream.last_presence = presence; -- Cache non-directed presence
+		end
+	end, 1);
+
+	function stream:resend_presence()
+		if last_presence then
+			stream:send(last_presence);
+		end
+	end
+
+	-- Becase I didn't find util.stanza in the client code.
+	-- And, then the name fits better :)
+	-- // Zash
+	function stream:set_status(opts)
+		local p = st.presence();
+		if type(opts) == "table" then
+			if opts.show then
+				p:tag("show"):text(opts.show):up();
+			end
+			if opts.prio then
+				p:tag("priority"):text(opts.priority):up();
+			end
+			if opts.msg then
+				p:tag("status"):text(opts.msg):up();
+			end
+		end
+		-- TODO maybe use opts as prio if it's a int,
+		-- or as show or status if it's a string?
+
+		stream:send(p);
+	end
+end