~singpolyma/biboumi

faa33c1a712f98de4bafee821bde7eb270bbb7f7 — louiz’ 4 years ago 9ce0166
Pass an IrcClient* to send_muc_leave instead of doing an other search
3 files changed, 9 insertions(+), 13 deletions(-)

M src/bridge/bridge.cpp
M src/bridge/bridge.hpp
M src/irc/irc_client.cpp
M src/bridge/bridge.cpp => src/bridge/bridge.cpp +4 -9
@@ 429,7 429,7 @@ void Bridge::leave_irc_channel(Iid&& iid, const std::string& status_message, con
        }
      else if (channel->joined)
        {
          this->send_muc_leave(iid, *channel->get_self(), "", true, true, resource);
          this->send_muc_leave(iid, *channel->get_self(), "", true, true, resource, irc);
        }
      if (persistent)
        this->remove_resource_from_chan(key, resource);


@@ 442,7 442,7 @@ void Bridge::leave_irc_channel(Iid&& iid, const std::string& status_message, con
      if (channel && channel->joined)
        this->send_muc_leave(iid, *channel->get_self(),
                             "Biboumi note: " + std::to_string(resources - 1) + " resources are still in this channel.",
                             true, true, resource);
                             true, true, resource, irc);
      this->remove_resource_from_chan(key, resource);
    }
      if (this->number_of_channels_the_resource_is_in(iid.get_server(), resource) == 0)


@@ 860,14 860,9 @@ void Bridge::send_presence_error(const Iid& iid, const std::string& nick,
void Bridge::send_muc_leave(const Iid& iid, const IrcUser& user,
                            const std::string& message, const bool self,
                            const bool user_requested,
                            const std::string& resource)
                            const std::string& resource,
                            const IrcClient* client)
{
  const IrcClient* client = this->find_irc_client(iid.get_server());
  if (!client)
    {
      log_error("Tried to send an unavailable presence for non existant client: ", std::to_string(iid));
      return;
    }
  std::string affiliation;
  std::string role;
  std::tie(role, affiliation) = get_role_affiliation_from_irc_mode(user.get_most_significant_mode(client->get_sorted_user_modes()));

M src/bridge/bridge.hpp => src/bridge/bridge.hpp +2 -1
@@ 173,7 173,8 @@ public:
  void send_muc_leave(const Iid& iid, const IrcUser& nick,
                      const std::string& message, const bool self,
                      const bool user_requested,
                      const std::string& resource="");
                      const std::string& resource,
                      const IrcClient* client);
  /**
   * Send presences to indicate that an user old_nick (ourself if self ==
   * true) changed his nick to new_nick.  The user_mode is needed because

M src/irc/irc_client.cpp => src/irc/irc_client.cpp +3 -3
@@ 965,7 965,7 @@ void IrcClient::on_part(const IrcMessage& message)
      iid.set_local(chan_name);
      iid.set_server(this->hostname);
      iid.type = Iid::Type::Channel;
      this->bridge.send_muc_leave(iid, *user_ptr, txt, self, true);
      this->bridge.send_muc_leave(iid, *user_ptr, txt, self, true, {}, this);
    }
}



@@ 982,7 982,7 @@ void IrcClient::on_error(const IrcMessage& message)
    IrcChannel* channel = pair.second.get();
    if (!channel->joined)
      continue;
    this->bridge.send_muc_leave(iid, *channel->get_self(), leave_message, true, false);
    this->bridge.send_muc_leave(iid, *channel->get_self(), leave_message, true, false, {}, this);
  }
  this->channels.clear();
  this->send_gateway_message("ERROR: " + leave_message);


@@ 1007,7 1007,7 @@ void IrcClient::on_quit(const IrcMessage& message)
      iid.set_local(chan_name);
      iid.set_server(this->hostname);
      iid.type = Iid::Type::Channel;
      this->bridge.send_muc_leave(iid, *user, txt, self, false);
      this->bridge.send_muc_leave(iid, *user, txt, self, false, {}, this);
      channel->remove_user(user);
    }
}