diff options
author | Jonas Smedegaard <dr@jones.dk> | 2017-06-24 09:21:37 +0200 |
---|---|---|
committer | Jonas Smedegaard <dr@jones.dk> | 2017-06-24 09:21:37 +0200 |
commit | 3d39f109ba8ea7ae9778c58bd1665b9e8e0f45cb (patch) | |
tree | 9a5684babcd16d302fbe59c56b6045660ad62488 /src/irc/irc_channel.cpp | |
parent | f9cee98aacd6aea8ccb7f5677b4ff1e1e234e4d1 (diff) | |
parent | c21cbbf9667991d2b928562a9c199e625d3f9bba (diff) | |
download | biboumi-3d39f109ba8ea7ae9778c58bd1665b9e8e0f45cb.tar.gz biboumi-3d39f109ba8ea7ae9778c58bd1665b9e8e0f45cb.tar.bz2 biboumi-3d39f109ba8ea7ae9778c58bd1665b9e8e0f45cb.tar.xz biboumi-3d39f109ba8ea7ae9778c58bd1665b9e8e0f45cb.zip |
Updated version 5.0 from 'upstream/5.0'
with Debian dir 2ae31d03ffb1d79153a692af23c7b2b097cc4b2b
Diffstat (limited to 'src/irc/irc_channel.cpp')
-rw-r--r-- | src/irc/irc_channel.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/irc/irc_channel.cpp b/src/irc/irc_channel.cpp index 40d7f54..53043c7 100644 --- a/src/irc/irc_channel.cpp +++ b/src/irc/irc_channel.cpp @@ -1,21 +1,25 @@ #include <irc/irc_channel.hpp> #include <algorithm> -void IrcChannel::set_self(const std::string& name) +void IrcChannel::set_self(IrcUser* user) { - this->self = std::make_unique<IrcUser>(name); + this->self = user; } IrcUser* IrcChannel::add_user(const std::string& name, const std::map<char, char>& prefix_to_mode) { - this->users.emplace_back(std::make_unique<IrcUser>(name, prefix_to_mode)); + auto new_user = std::make_unique<IrcUser>(name, prefix_to_mode); + auto old_user = this->find_user(new_user->nick); + if (old_user) + return old_user; + this->users.emplace_back(std::move(new_user)); return this->users.back().get(); } IrcUser* IrcChannel::get_self() const { - return this->self.get(); + return this->self; } IrcUser* IrcChannel::find_user(const std::string& name) const @@ -32,19 +36,27 @@ IrcUser* IrcChannel::find_user(const std::string& name) const void IrcChannel::remove_user(const IrcUser* user) { const auto nick = user->nick; + const bool is_self = (user == this->self); const auto it = std::find_if(this->users.begin(), this->users.end(), [nick](const std::unique_ptr<IrcUser>& u) { return nick == u->nick; }); if (it != this->users.end()) - this->users.erase(it); + { + this->users.erase(it); + if (is_self) + { + this->self = nullptr; + this->joined = false; + } + } } void IrcChannel::remove_all_users() { this->users.clear(); - this->self.reset(); + this->self = nullptr; } DummyIrcChannel::DummyIrcChannel(): |