Reset the preferred private JID when all resources leave a room
For example if we are talking in private with nick Joe from room #foo, and then we leave that room, we start receiving Joe’s message from the server-wide JID e2e tests included!!!
This commit is contained in:
+18
-1
@@ -344,7 +344,12 @@ void Bridge::leave_irc_channel(Iid&& iid, std::string&& status_message, const st
|
||||
|
||||
const auto resources = this->number_of_resources_in_chan(key);
|
||||
if (resources == 1)
|
||||
irc->send_part_command(iid.get_local(), status_message);
|
||||
{
|
||||
irc->send_part_command(iid.get_local(), status_message);
|
||||
// Since there are no resources left in that channel, we don't
|
||||
// want to receive private messages using this room's JID
|
||||
this->remove_all_preferred_from_jid_of_room(iid.get_local());
|
||||
}
|
||||
else
|
||||
{
|
||||
IrcChannel* chan = irc->get_channel(iid.get_local());
|
||||
@@ -767,6 +772,18 @@ void Bridge::remove_preferred_from_jid(const std::string& nick)
|
||||
this->preferred_user_from.erase(it);
|
||||
}
|
||||
|
||||
void Bridge::remove_all_preferred_from_jid_of_room(const std::string& channel_name)
|
||||
{
|
||||
for (auto it = this->preferred_user_from.begin(); it != this->preferred_user_from.end();)
|
||||
{
|
||||
Iid iid(Jid(it->second).local);
|
||||
if (iid.get_local() == channel_name)
|
||||
it = this->preferred_user_from.erase(it);
|
||||
else
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
void Bridge::add_waiting_irc(irc_responder_callback_t&& callback)
|
||||
{
|
||||
this->waiting_irc.emplace_back(std::move(callback));
|
||||
|
||||
@@ -185,6 +185,11 @@ public:
|
||||
* Remove the preferred jid for the given IRC nick
|
||||
*/
|
||||
void remove_preferred_from_jid(const std::string& nick);
|
||||
/**
|
||||
* Given a channel_name, remove all preferred from_jid that come
|
||||
* from this chan.
|
||||
*/
|
||||
void remove_all_preferred_from_jid_of_room(const std::string& channel_name);
|
||||
/**
|
||||
* Add a callback to the waiting list of irc callbacks.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user