<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,8 +1,9 @@
 xmpp4r-observable (0.5.4)
 
   * Fixed #pubsub.* behaviour on #disconnect / #connect
+  * Added #pubsub.node_exists?
 
- -- Pablo Lorenzzoni &lt;pablo@propus.com.br&gt;  Wed, 14 Oct 2009 16:51:11 2009 -0300
+ -- Pablo Lorenzzoni &lt;pablo@propus.com.br&gt;  Wed, 27 Oct 2009 15:51:11 2009 -0200
 
 xmpp4r-observable (0.5.3)
 </diff>
      <filename>ChangeLog</filename>
    </modified>
    <modified>
      <diff>@@ -15,7 +15,7 @@ module ObservableThing
 		unless observer.respond_to? func
 			raise NoMethodError, &quot;observer does not respond to `#{func.to_s}'&quot;
 		end
-		@things[thing][observer] = func
+		@things[thing][observer] = func unless @things[thing].include?(observer)
 	end
 
 	# Deletes an observer for some &quot;thing&quot;.</diff>
      <filename>lib/observable_thing.rb</filename>
    </modified>
    <modified>
      <diff>@@ -101,6 +101,7 @@ module Jabber
 				@observable = observable
 
 				@helper = @service_jid = nil
+				@disco = Jabber::Discovery::Helper.new(@observable.client)
 				attach!
 			end
 
@@ -148,7 +149,7 @@ module Jabber
 			# Subscribe to a node.
 			def subscribe_to(node)
 				raise_noservice if ! has_service?
-				@helper.subscribe_to(node)
+				@helper.subscribe_to(node) unless is_subscribed_to?(node)
 			end
 	
 			# Unsubscribe from a node.
@@ -199,7 +200,7 @@ module Jabber
 				node
 			end
 	
-			# Return an array of noes I own
+			# Return an array of nodes I own
 			def my_nodes
 				if ! defined? @my_nodes
 					ret = []
@@ -211,6 +212,30 @@ module Jabber
 				return @my_nodes
 			end
 
+			# Return true if a given node exists
+			def node_exists?(node)
+				ret = []
+				if ! defined? @existing_nodes or ! @existing_nodes.include?(node)
+					# We'll renew @existing_nodes if we haven't got it the first time
+					reply = @disco.get_items_for(@service_jid)
+					reply.items.each do |item|
+						ret &lt;&lt; item.node
+					end
+					@existing_nodes = ret
+				end
+				return @existing_nodes.include?(node)
+			end
+
+			# Returns an array of nodes I am subscribed to
+			def subscribed_nodes
+				ret = []
+				subscriptions.each do |sub|
+					next if sub.node.nil?
+					ret &lt;&lt; sub.node if sub.attributes['subscription'] == 'subscribed' and ! my_nodes.include?(sub.node)
+				end
+				return ret
+			end
+
 			# Return true if we're subscribed to that node
 			def is_subscribed_to?(node)
 				ret = false
@@ -709,6 +734,7 @@ module Jabber
 			@deferred_delivery_thread = Thread.new {
 				loop {
 					sleep 3 while @deferred_messages.empty?
+					sleep 3
 					message = @deferred_messages.deq
 					if @subs.subscribed_to?(message[:to])
 						deliver(message[:to], message[:message], message[:type])</diff>
      <filename>lib/xmpp4r-observable.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>634fc443a00144a5e08b4181d8125eedd9efbb09</id>
    </parent>
  </parents>
  <author>
    <name>Pablo Lorenzoni</name>
    <email>pablo@propus.com.br</email>
  </author>
  <url>http://github.com/spectra/xmpp4r-observable/commit/56aeb2081e1c167b980f03f964017fac26a5111e</url>
  <id>56aeb2081e1c167b980f03f964017fac26a5111e</id>
  <committed-date>2009-10-27T11:26:42-07:00</committed-date>
  <authored-date>2009-10-27T11:26:42-07:00</authored-date>
  <message>A few more improvements.</message>
  <tree>2c6bd6a7c5427111b11b6011e56bdb1dfdd7e32b</tree>
  <committer>
    <name>Pablo Lorenzoni</name>
    <email>pablo@propus.com.br</email>
  </committer>
</commit>
