clix/publish_atom.lua

Fri, 17 Aug 2012 17:29:21 +0200

author
Kim Alvefur <zash@zash.se>
date
Fri, 17 Aug 2012 17:29:21 +0200
changeset 93
8ab81c304073
parent 72
0f69e1902f5b
child 94
6f038202a502
permissions
-rw-r--r--

clix.publish_atom: Don't load pubsub plugin ourself, instead pass to clix_connect

local new_uuid = require "util.uuid".generate;
local datetime = require "util.datetime".datetime;

return function (opts, arg)
	if opts.short_help then
		print("Publish an Atom entry to a pubsub node");
		return;
	end
	--if (#arg == 0 or opts.help) then -- why?
	if opts.help then
		print("clix publish_atom \\");
		print("","--service=pubsub.shakespeare.lit \\");
		print("","--node=princely_musings \\");
		print("","--id=123 \\");
		print("","--author=Hamlet \\");
		print("","--title=Soliloquy \\");
		print("","--summary=\"To be, or not to be: that is the question\"");
		return 0;
	end
	local function on_connect(conn)
		-- Required: id, title, updated, author (which must have a name)
		local entry_id = opts.entry_id or ("clix-"..new_uuid());
		local atom_entry = verse.stanza("entry", { xmlns="http://www.w3.org/2005/Atom" })
			:tag("id"):text(entry_id):up(id)
			:tag("title"):text(opts.title or ""):up()
			:tag("updated"):text(opts.updated or datetime()):up();
		atom_entry:tag("author"):tag("name"):text(opts.author or os.getenv("USER") or "Unknown author"):up();
		atom_entry:up();
		if opts.summary then
			atom_entry:tag("summary"):text(opts.summary):up();
		end

		if opts.content then
			atom_entry:tag("content"):text(opts.content):up();
		end

		conn.pubsub(opts.service, opts.node):publish(entry_id, nil, atom_entry
		, function(ok)
			-- TODO Report success?
			conn:close();
		end);

		--conn:send(verse.message({ to = opts.to, type = "chat" }) :body(text));
	end
	clix_connect(opts, on_connect, {"pubsub"});
end

mercurial