Mercurial > prosody-hg
comparison util/pubsub.lua @ 9816:7f84d7f77a00 0.11
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 28 Jan 2019 01:41:01 +0100 |
| parents | 18eca6afb367 |
| children | ec353524b739 |
comparison
equal
deleted
inserted
replaced
| 9814:5eb4ef537e98 | 9816:7f84d7f77a00 |
|---|---|
| 598 self.config.broadcaster("purge", node, node_obj.subscribers, nil, actor, node_obj, self); | 598 self.config.broadcaster("purge", node, node_obj.subscribers, nil, actor, node_obj, self); |
| 599 end | 599 end |
| 600 return true | 600 return true |
| 601 end | 601 end |
| 602 | 602 |
| 603 function service:get_items(node, actor, id) --> (true, { id, [id] = node }) or (false, err) | 603 function service:get_items(node, actor, ids) --> (true, { id, [id] = node }) or (false, err) |
| 604 -- Access checking | 604 -- Access checking |
| 605 if not self:may(node, actor, "get_items") then | 605 if not self:may(node, actor, "get_items") then |
| 606 return false, "forbidden"; | 606 return false, "forbidden"; |
| 607 end | 607 end |
| 608 -- | 608 -- |
| 609 local node_obj = self.nodes[node]; | 609 local node_obj = self.nodes[node]; |
| 610 if not node_obj then | 610 if not node_obj then |
| 611 return false, "item-not-found"; | 611 return false, "item-not-found"; |
| 612 end | 612 end |
| 613 if id then -- Restrict results to a single specific item | 613 if type(ids) == "string" then -- COMPAT see #1305 |
| 614 local with_id = self.data[node]:get(id); | 614 ids = { ids }; |
| 615 if not with_id then | 615 end |
| 616 return true, { }; | 616 local data = {}; |
| 617 end | 617 if ids then |
| 618 return true, { id, [id] = with_id }; | 618 for _, key in ipairs(ids) do |
| 619 local value = self.data[node]:get(key); | |
| 620 if value then | |
| 621 data[#data+1] = key; | |
| 622 data[key] = value; | |
| 623 end | |
| 624 end | |
| 619 else | 625 else |
| 620 local data = {} | |
| 621 for key, value in self.data[node]:items() do | 626 for key, value in self.data[node]:items() do |
| 622 data[#data+1] = key; | 627 data[#data+1] = key; |
| 623 data[key] = value; | 628 data[key] = value; |
| 624 end | 629 end |
| 625 return true, data; | 630 end |
| 626 end | 631 return true, data; |
| 627 end | 632 end |
| 628 | 633 |
| 629 function service:get_last_item(node, actor) --> (true, id, node) or (false, err) | 634 function service:get_last_item(node, actor) --> (true, id, node) or (false, err) |
| 630 -- Access checking | 635 -- Access checking |
| 631 if not self:may(node, actor, "get_items") then | 636 if not self:may(node, actor, "get_items") then |
