@@ 7,13 7,45 @@ require "timeout"
module BlatherNotify
extend Blather::DSL
+ class PubSub
+ class Address
+ attr_reader :node, :server
+
+ def initialize(node:, server:)
+ @node = node
+ @server = server
+ end
+
+ def to_uri
+ "xmpp:#{@server}?;node=#{@node}"
+ end
+ end
+
+ def initialize(blather, addr)
+ @blather = blather
+ @addr = addr
+ end
+
+ def publish(xml)
+ @blather.write_with_promise(
+ Blather::Stanza::PubSub::Publish.new(
+ @addr.server,
+ @addr.node,
+ :set,
+ xml
+ )
+ )
+ end
+ end
+
@ready = Queue.new
when_ready { @ready << :ready }
- def self.start(jid, password)
+ def self.start(jid, password, default_pubsub_addr: nil)
# workqueue_count MUST be 0 or else Blather uses threads!
setup(jid, password, nil, nil, nil, nil, workqueue_count: 0)
+ set_default_pubsub(default_pubsub_addr)
EM.error_handler(&method(:panic))
@@ 81,4 113,18 @@ module BlatherNotify
write_with_promise(command(command_node, iq.sessionid, form: form))
end
end
+
+ def self.pubsub(addr)
+ PubSub.new(self, addr)
+ end
+
+ def self.set_default_pubsub(addr)
+ @default_pubsub = addr && pubsub(addr)
+ end
+
+ def self.publish(xml)
+ raise "No default pubsub set!" unless @default_pubsub
+
+ @default_pubsub.publish(xml)
+ end
end