From 4eeeb8465232ee07aea05bae8354cabeeecfec77 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Wed, 28 Nov 2012 11:15:49 +0100 Subject: [PATCH] Show away users when joining the room. This is not finished yet, polling has to be implemented to refresh the list of away users --- backends/libcommuni/session.cpp | 18 +++++++++++++++-- backends/libcommuni/session.h | 34 +-------------------------------- 2 files changed, 17 insertions(+), 35 deletions(-) diff --git a/backends/libcommuni/session.cpp b/backends/libcommuni/session.cpp index cb0b6c92..61200b72 100644 --- a/backends/libcommuni/session.cpp +++ b/backends/libcommuni/session.cpp @@ -48,6 +48,8 @@ void MyIrcSession::on_connected() { } } + sendCommand(IrcCommand::createCapability("REQ", QStringList("away-notify"))); + 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()))); } @@ -86,8 +88,8 @@ void MyIrcSession::on_joined(IrcMessage *message) { bool flags = 0; std::string nickname = TO_UTF8(m->sender().name()); flags = correctNickname(nickname); - np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel()), (int) flags, pbnetwork::STATUS_ONLINE); - LOG4CXX_INFO(logger, user << ": Joined " << TO_UTF8(m->parameters()[0])); + np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel()) + suffix, (int) flags, pbnetwork::STATUS_ONLINE); + LOG4CXX_INFO(logger, user << ": " << nickname << " joined " << TO_UTF8(m->channel()) + suffix); } @@ -193,6 +195,8 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) { IrcNumericMessage *m = (IrcNumericMessage *) message; switch (m->code()) { + case 301: + break; case 332: m_topicData = TO_UTF8(m->parameters().value(2)); break; @@ -206,6 +210,13 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) { } np->handleSubject(user, TO_UTF8(m->parameters().value(1)) + suffix, m_topicData, nick); break; + case 352: + channel = m->parameters().value(1); + nick = TO_UTF8(m->parameters().value(5)); + if (m->parameters().value(6).toUpper().startsWith("G")) { + np->handleParticipantChanged(user, nick, TO_UTF8(channel) + suffix, m_modes[TO_UTF8(channel) + nick], pbnetwork::STATUS_AWAY); + } + break; case 353: channel = m->parameters().value(2); members = m->parameters().value(3).split(" "); @@ -218,6 +229,9 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) { m_modes[TO_UTF8(channel) + nickname] = flags; np->handleParticipantChanged(user, nickname, TO_UTF8(channel) + suffix,(int) flags, pbnetwork::STATUS_ONLINE); } + + // ask /who to get away states + sendCommand(IrcCommand::createWho(channel)); break; case 432: np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Erroneous Nickname"); diff --git a/backends/libcommuni/session.h b/backends/libcommuni/session.h index e8a262ac..d398dd25 100644 --- a/backends/libcommuni/session.h +++ b/backends/libcommuni/session.h @@ -41,6 +41,7 @@ public: MyIrcSession(const std::string &user, IRCNetworkPlugin *np, const std::string &suffix = "", QObject* parent = 0); std::map m_modes; + std::map m_away; std::string suffix; int rooms; @@ -89,37 +90,4 @@ protected: std::list m_names; }; -//class MyIrcBuffer : public Irc::Buffer -//{ -// Q_OBJECT - -//public: -// MyIrcBuffer(const QString& receiver, const std::string &user, NetworkPlugin *np, const std::string &suffix, Irc::Session* parent); -// NetworkPlugin *np; -// std::string user; -// MyIrcSession *p; -// std::string m_topicData; -// std::string suffix; - -//protected Q_SLOTS: -// void on_receiverChanged(const QString& receiver); -// void on_joined(const QString& origin); -// void on_parted(const QString& origin, const QString& message); -// void on_quit(const QString& origin, const QString& message); -// void on_nickChanged(const QString& origin, const QString& nick); -// void on_modeChanged(const QString& origin, const QString& mode, const QString& args); -// void on_topicChanged(const QString& origin, const QString& topic); -// void on_invited(const QString& origin, const QString& receiver, const QString& channel); -// void on_kicked(const QString& origin, const QString& nick, const QString& message); -// void on_messageReceived(const QString& origin, const QString& message, Irc::Buffer::MessageFlags flags); -// void on_noticeReceived(const QString& origin, const QString& notice, Irc::Buffer::MessageFlags flags); -// void on_ctcpRequestReceived(const QString& origin, const QString& request, Irc::Buffer::MessageFlags flags); -// void on_ctcpReplyReceived(const QString& origin, const QString& reply, Irc::Buffer::MessageFlags flags); -// void on_ctcpActionReceived(const QString& origin, const QString& action, Irc::Buffer::MessageFlags flags); -// void on_numericMessageReceived(const QString& origin, uint code, const QStringList& params); -// void on_unknownMessageReceived(const QString& origin, const QStringList& params); - -// bool correctNickname(std::string &nickname); -//}; - #endif // SESSION_H