Little fix and cleanup in the channels list code
This commit is contained in:
@@ -478,7 +478,7 @@ void Bridge::send_irc_nick_change(const Iid& iid, const std::string& new_nick, c
|
||||
void Bridge::send_irc_channel_list_request(const Iid& iid, const std::string& iq_id, const std::string& to_jid,
|
||||
ResultSetInfo rs_info)
|
||||
{
|
||||
auto& list = channel_list_cache[iid.get_server()];
|
||||
auto& list = this->channel_list_cache[iid.get_server()];
|
||||
|
||||
// We fetch the list from the IRC server only if we have a complete
|
||||
// cached list that needs to be invalidated (that is, when the request
|
||||
@@ -501,7 +501,7 @@ void Bridge::send_irc_channel_list_request(const Iid& iid, const std::string& iq
|
||||
if (irc_hostname != iid.get_server())
|
||||
return false;
|
||||
|
||||
auto& list = channel_list_cache[iid.get_server()];
|
||||
auto& list = this->channel_list_cache[iid.get_server()];
|
||||
|
||||
if (message.command == "263" || message.command == "RPL_TRYAGAIN" || message.command == "ERR_TOOMANYMATCHES"
|
||||
|| message.command == "ERR_NOSUCHSERVER")
|
||||
@@ -579,7 +579,7 @@ bool Bridge::send_matching_channel_list(const ChannelList& channel_list, const R
|
||||
const std::string& id, const std::string& to_jid, const std::string& from)
|
||||
{
|
||||
auto begin = channel_list.channels.begin();
|
||||
auto end = channel_list.channels.begin();
|
||||
auto end = channel_list.channels.end();
|
||||
if (channel_list.complete)
|
||||
{
|
||||
begin = std::find_if(channel_list.channels.begin(), channel_list.channels.end(), [this, &rs_info](const ListElement& element)
|
||||
|
||||
@@ -1938,21 +1938,27 @@ if __name__ == '__main__':
|
||||
partial(expect_stanza, "/presence"),
|
||||
partial(expect_stanza, "/message[@from='#coucou%{irc_server_one}'][@type='groupchat']/subject[not(text())]"),
|
||||
|
||||
# Ask for 0 item
|
||||
partial(send_stanza, "<iq from='{jid_one}/{resource_one}' id='id1' to='{irc_server_one}' type='get'><query xmlns='http://jabber.org/protocol/disco#items'><set xmlns='http://jabber.org/protocol/rsm'><max>0</max></set></query></iq>"),
|
||||
|
||||
# Get 0 item
|
||||
partial(expect_stanza, (
|
||||
"/iq[@type='result']/disco_items:query",
|
||||
)),
|
||||
|
||||
# Ask for 2 (of 3) items We don’t have the count,
|
||||
# because biboumi doesn’t have the complete list when
|
||||
# it sends us the 2 items
|
||||
partial(send_stanza, "<iq from='{jid_one}/{resource_one}' id='id1' to='{irc_server_one}' type='get'><query xmlns='http://jabber.org/protocol/disco#items'><set xmlns='http://jabber.org/protocol/rsm'><max>2</max></set></query></iq>"),
|
||||
partial(expect_stanza, (
|
||||
"/iq[@type='result']/disco_items:query",
|
||||
"/iq/disco_items:query/disco_items:item[@jid='#bar%{irc_server_one}']",
|
||||
"/iq/disco_items:query/disco_items:item[@jid='#coucou%{irc_server_one}']",
|
||||
"/iq/disco_items:query/rsm:set/rsm:first[text()='#bar%{irc_server_one}'][@index='0']",
|
||||
"/iq/disco_items:query/rsm:set/rsm:last[text()='#coucou%{irc_server_one}']",
|
||||
"/iq/disco_items:query/rsm:set/rsm:count[text()='3']"
|
||||
"/iq/disco_items:query/rsm:set/rsm:last[text()='#coucou%{irc_server_one}']"
|
||||
)),
|
||||
|
||||
# Ask for 12 (of 3) items. We get the whole list, and thus we have the count included.
|
||||
partial(send_stanza, "<iq from='{jid_one}/{resource_one}' id='id1' to='{irc_server_one}' type='get'><query xmlns='http://jabber.org/protocol/disco#items'><set xmlns='http://jabber.org/protocol/rsm'><max>12</max></set></query></iq>"),
|
||||
partial(expect_stanza, (
|
||||
"/iq[@type='result']/disco_items:query",
|
||||
@@ -1964,6 +1970,10 @@ if __name__ == '__main__':
|
||||
"/iq/disco_items:query/rsm:set/rsm:count[text()='3']"
|
||||
)),
|
||||
|
||||
# Ask for 1 item, AFTER the first item (so,
|
||||
# the second). Since we don’t invalidate the cache
|
||||
# with this request, we should have the count
|
||||
# included.
|
||||
partial(send_stanza, "<iq from='{jid_one}/{resource_one}' id='id1' to='{irc_server_one}' type='get'><query xmlns='http://jabber.org/protocol/disco#items'><set xmlns='http://jabber.org/protocol/rsm'><after>#bar%{irc_server_one}</after><max>1</max></set></query></iq>"),
|
||||
partial(expect_stanza, (
|
||||
"/iq[@type='result']/disco_items:query",
|
||||
@@ -1973,14 +1983,24 @@ if __name__ == '__main__':
|
||||
"/iq/disco_items:query/rsm:set/rsm:count[text()='3']"
|
||||
)),
|
||||
|
||||
partial(send_stanza, "<iq from='{jid_one}/{resource_one}' id='id1' to='{irc_server_one}' type='get'><query xmlns='http://jabber.org/protocol/disco#items'><set xmlns='http://jabber.org/protocol/rsm'><after>#bar%{irc_server_one}</after><max>1</max></set></query></iq>"),
|
||||
# Ask for 1 item, AFTER the second item (so,
|
||||
# the third).
|
||||
partial(send_stanza, "<iq from='{jid_one}/{resource_one}' id='id1' to='{irc_server_one}' type='get'><query xmlns='http://jabber.org/protocol/disco#items'><set xmlns='http://jabber.org/protocol/rsm'><after>#coucou%{irc_server_one}</after><max>1</max></set></query></iq>"),
|
||||
partial(expect_stanza, (
|
||||
"/iq[@type='result']/disco_items:query",
|
||||
"/iq/disco_items:query/disco_items:item[@jid='#coucou%{irc_server_one}']",
|
||||
"/iq/disco_items:query/rsm:set/rsm:first[text()='#coucou%{irc_server_one}'][@index='1']",
|
||||
"/iq/disco_items:query/rsm:set/rsm:last[text()='#coucou%{irc_server_one}']",
|
||||
"/iq/disco_items:query/disco_items:item[@jid='#foo%{irc_server_one}']",
|
||||
"/iq/disco_items:query/rsm:set/rsm:first[text()='#foo%{irc_server_one}'][@index='2']",
|
||||
"/iq/disco_items:query/rsm:set/rsm:last[text()='#foo%{irc_server_one}']",
|
||||
"/iq/disco_items:query/rsm:set/rsm:count[text()='3']"
|
||||
))
|
||||
)),
|
||||
|
||||
# Ask for 1 item, AFTER the third item (so,
|
||||
# the fourth). Since it doesn't exist, we get 0 item
|
||||
partial(send_stanza, "<iq from='{jid_one}/{resource_one}' id='id1' to='{irc_server_one}' type='get'><query xmlns='http://jabber.org/protocol/disco#items'><set xmlns='http://jabber.org/protocol/rsm'><after>#foo%{irc_server_one}</after><max>1</max></set></query></iq>"),
|
||||
partial(expect_stanza, (
|
||||
"/iq[@type='result']/disco_items:query",
|
||||
"/iq/disco_items:query/rsm:set/rsm:count[text()='3']"
|
||||
)),
|
||||
]),
|
||||
Scenario("complete_channel_list_with_pages_of_3",
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user