diff --git a/backends/libcommuni/ircnetworkplugin.cpp b/backends/libcommuni/ircnetworkplugin.cpp index 74bdec24..a925dc97 100644 --- a/backends/libcommuni/ircnetworkplugin.cpp +++ b/backends/libcommuni/ircnetworkplugin.cpp @@ -105,7 +105,7 @@ void IRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std: } } std::cout << "JOINING " << r << "\n"; - m_sessions[u]->addAutoJoinChannel(r); + m_sessions[u]->addAutoJoinChannel(r, password); m_sessions[u]->sendCommand(IrcCommand::createJoin(FROM_UTF8(r), FROM_UTF8(password))); m_sessions[u]->rooms += 1; // update nickname, because we have nickname per session, no nickname per room. diff --git a/backends/libcommuni/session.cpp b/backends/libcommuni/session.cpp index 43709a20..51505fb4 100644 --- a/backends/libcommuni/session.cpp +++ b/backends/libcommuni/session.cpp @@ -11,7 +11,6 @@ #include "session.h" #include #include -#include "Swiften/Elements/StatusShow.h" #include #include @@ -40,8 +39,8 @@ void MyIrcSession::on_connected() { np->handleConnected(user); } - for(std::list::const_iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { - sendCommand(IrcCommand::createJoin(FROM_UTF8(*it))); + for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { + sendCommand(IrcCommand::createJoin(FROM_UTF8(it->second->getChannel()), FROM_UTF8(it->second->getPassword()))); } if (getIdentify().find(" ") != std::string::npos) { @@ -88,23 +87,23 @@ void MyIrcSession::on_parted(IrcMessage *message) { void MyIrcSession::on_quit(IrcMessage *message) { IrcQuitMessage *m = (IrcQuitMessage *) message; - for(std::list::const_iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { + for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { bool flags = 0; std::string nickname = TO_UTF8(m->sender().name()); flags = correctNickname(nickname); - LOG4CXX_INFO(logger, user << ": " << nickname << " quit " << (*it) + suffix); - np->handleParticipantChanged(user, nickname, (*it) + suffix,(int) flags, pbnetwork::STATUS_NONE, TO_UTF8(m->reason())); + LOG4CXX_INFO(logger, user << ": " << nickname << " quit " << it->second->getChannel() + suffix); + np->handleParticipantChanged(user, nickname, it->second->getChannel() + suffix,(int) flags, pbnetwork::STATUS_NONE, TO_UTF8(m->reason())); } } void MyIrcSession::on_nickChanged(IrcMessage *message) { IrcNickMessage *m = (IrcNickMessage *) message; - for(std::list::const_iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { + for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { std::string nickname = TO_UTF8(m->sender().name()); - bool flags = m_modes[(*it) + nickname]; + bool flags = m_modes[it->second->getChannel() + nickname]; LOG4CXX_INFO(logger, user << ": " << nickname << " changed nickname to " << TO_UTF8(m->nick())); - np->handleParticipantChanged(user, nickname, (*it) + suffix,(int) flags, pbnetwork::STATUS_ONLINE, "", TO_UTF8(m->nick())); + np->handleParticipantChanged(user, nickname, it->second->getChannel() + suffix,(int) flags, pbnetwork::STATUS_ONLINE, "", TO_UTF8(m->nick())); } } @@ -117,15 +116,15 @@ void MyIrcSession::on_modeChanged(IrcMessage *message) { if (nickname.empty()) return; LOG4CXX_INFO(logger, user << ": " << nickname << " changed mode to " << mode); - for(std::list::const_iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { + for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) { if (mode == "+o") { - m_modes[(*it) + nickname] = 1; + m_modes[it->second->getChannel() + nickname] = 1; } else { - m_modes[(*it) + nickname] = 0; + m_modes[it->second->getChannel() + nickname] = 0; } - bool flags = m_modes[(*it) + nickname]; - np->handleParticipantChanged(user, nickname, (*it) + suffix,(int) flags, pbnetwork::STATUS_ONLINE, ""); + bool flags = m_modes[it->second->getChannel() + nickname]; + np->handleParticipantChanged(user, nickname, it->second->getChannel() + suffix,(int) flags, pbnetwork::STATUS_ONLINE, ""); } } diff --git a/backends/libcommuni/session.h b/backends/libcommuni/session.h index 8b31da58..bff2aee4 100644 --- a/backends/libcommuni/session.h +++ b/backends/libcommuni/session.h @@ -13,6 +13,8 @@ #include #include +#include "Swiften/Swiften.h" +#include using namespace Transport; @@ -21,17 +23,31 @@ class MyIrcSession : public IrcSession Q_OBJECT public: + class AutoJoinChannel { + public: + AutoJoinChannel(const std::string &channel = "", const std::string &password = "") : m_channel(channel), m_password(password) {} + virtual ~AutoJoinChannel() {} + + const std::string &getChannel() { return m_channel; } + const std::string &getPassword() { return m_password; } + private: + std::string m_channel; + std::string m_password; + }; + + typedef std::map > AutoJoinMap; + MyIrcSession(const std::string &user, NetworkPlugin *np, const std::string &suffix = "", QObject* parent = 0); std::map m_modes; std::string suffix; int rooms; - void addAutoJoinChannel(const std::string &channel) { - m_autoJoin.push_back(channel); + void addAutoJoinChannel(const std::string &channel, const std::string &password) { + m_autoJoin[channel] = boost::make_shared(channel, password); } void removeAutoJoinChannel(const std::string &channel) { - m_autoJoin.remove(channel); + m_autoJoin.erase(channel); } void setIdentify(const std::string &identify) { @@ -63,7 +79,7 @@ protected: NetworkPlugin *np; std::string user; std::string m_identify; - std::list m_autoJoin; + AutoJoinMap m_autoJoin; std::string m_topicData; bool m_connected; }; diff --git a/backends/libcommuni/singleircnetworkplugin.cpp b/backends/libcommuni/singleircnetworkplugin.cpp index 276ac5ec..439d765b 100644 --- a/backends/libcommuni/singleircnetworkplugin.cpp +++ b/backends/libcommuni/singleircnetworkplugin.cpp @@ -114,7 +114,7 @@ void SingleIRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, cons } LOG4CXX_INFO(logger, user << ": Joining " << room); - m_sessions[user]->addAutoJoinChannel(room); + m_sessions[user]->addAutoJoinChannel(room, password); m_sessions[user]->sendCommand(IrcCommand::createJoin(FROM_UTF8(room), FROM_UTF8(password))); m_sessions[user]->rooms += 1;