Show away users when joining the room. This is not finished yet, polling has to be implemented to refresh the list of away users

This commit is contained in:
Jan Kaluza 2012-11-28 11:15:49 +01:00
parent 75ad2ddfc5
commit 4eeeb84652
2 changed files with 17 additions and 35 deletions

View file

@ -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");

View file

@ -41,6 +41,7 @@ public:
MyIrcSession(const std::string &user, IRCNetworkPlugin *np, const std::string &suffix = "", QObject* parent = 0);
std::map<std::string, bool> m_modes;
std::map<std::string, bool> m_away;
std::string suffix;
int rooms;
@ -89,37 +90,4 @@ protected:
std::list<std::string> 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