Software /
code /
prosody
Comparison
util/pubsub.lua @ 11767:5610f7c5b261
util.pubsub: Add support for limiting number of items to retrieve
Hopefully this will eventually be upgraded to RSM, which is why the
argument is called 'resultspec' and is a table.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 05 Sep 2021 16:21:10 +0200 |
parent | 11723:3ead0967e04d |
child | 11854:b605cbd5f13b |
comparison
equal
deleted
inserted
replaced
11766:6ad335cd43f9 | 11767:5610f7c5b261 |
---|---|
640 self:broadcast("purge", node, node_obj.subscribers, nil, actor, node_obj); | 640 self:broadcast("purge", node, node_obj.subscribers, nil, actor, node_obj); |
641 end | 641 end |
642 return true | 642 return true |
643 end | 643 end |
644 | 644 |
645 function service:get_items(node, actor, ids) --> (true, { id, [id] = node }) or (false, err) | 645 function service:get_items(node, actor, ids, resultspec) --> (true, { id, [id] = node }) or (false, err) |
646 -- Access checking | 646 -- Access checking |
647 if not self:may(node, actor, "get_items") then | 647 if not self:may(node, actor, "get_items") then |
648 return false, "forbidden"; | 648 return false, "forbidden"; |
649 end | 649 end |
650 -- | 650 -- |
658 end | 658 end |
659 if type(ids) == "string" then -- COMPAT see #1305 | 659 if type(ids) == "string" then -- COMPAT see #1305 |
660 ids = { ids }; | 660 ids = { ids }; |
661 end | 661 end |
662 local data = {}; | 662 local data = {}; |
663 local limit = resultspec and resultspec.max; | |
663 if ids then | 664 if ids then |
664 for _, key in ipairs(ids) do | 665 for _, key in ipairs(ids) do |
665 local value = self.data[node]:get(key); | 666 local value = self.data[node]:get(key); |
666 if value then | 667 if value then |
667 data[#data+1] = key; | 668 data[#data+1] = key; |
668 data[key] = value; | 669 data[key] = value; |
670 -- Limits and ids seem like a problematic combination. | |
671 if limit and #data >= limit then break end | |
669 end | 672 end |
670 end | 673 end |
671 else | 674 else |
672 for key, value in self.data[node]:items() do | 675 for key, value in self.data[node]:items() do |
673 data[#data+1] = key; | 676 data[#data+1] = key; |
674 data[key] = value; | 677 data[key] = value; |
678 if limit and #data >= limit then break | |
679 end | |
675 end | 680 end |
676 end | 681 end |
677 return true, data; | 682 return true, data; |
678 end | 683 end |
679 | 684 |