Diff

util/pubsub.lua @ 5312:fdcd2ac7c22d

mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
author Florian Zeitz <florob@babelmonkeys.de>
date Fri, 25 Jan 2013 01:32:14 +0100
parent 5305:391b72fede9f
child 5315:abf1a926d0da
line wrap: on
line diff
--- a/util/pubsub.lua	Sat Jan 26 03:39:18 2013 +0500
+++ b/util/pubsub.lua	Fri Jan 25 01:32:14 2013 +0100
@@ -245,7 +245,7 @@
 	end
 	node_obj.data[id] = item;
 	self.events.fire_event("item-published", { node = node, actor = actor, id = id, item = item });
-	self.config.broadcaster(node, node_obj.subscribers, item);
+	self.config.broadcaster("items", node, node_obj.subscribers, item);
 	return true;
 end
 
@@ -259,19 +259,28 @@
 	if (not node_obj) or (not node_obj.data[id]) then
 		return false, "item-not-found";
 	end
-	if id then
-		node_obj.data[id] = nil;
-	else
-		node_obj.data = {}; -- Purge
-	end
+	node_obj.data[id] = nil;
 	if retract then
-		self.config.broadcaster(node, node_obj.subscribers, retract);
+		self.config.broadcaster("items", node, node_obj.subscribers, retract);
 	end
 	return true
 end
 
-function service:purge(node, actor, purge)
-	return self:retract(node, actor, nil, purge);
+function service:purge(node, actor, notify)
+	-- Access checking
+	if not self:may(node, actor, "retract") then
+		return false, "forbidden";
+	end
+	--
+	local node_obj = self.nodes[node];
+	if not node_obj then
+		return false, "item-not-found";
+	end
+	node_obj.data = {}; -- Purge
+	if notify then
+		self.config.broadcaster("purge", node, node_obj.subscribers);
+	end
+	return true
 end
 
 function service:get_items(node, actor, id)