Mercurial > hg > octave-lyh
changeset 13600:aa4e5bed1750
Automatically changing nick when logging in to server.
author | Jacob Dawid <jacob.dawid@googlemail.com> |
---|---|
date | Mon, 15 Aug 2011 03:20:55 +0200 |
parents | e67616aca5a6 |
children | 26956bb3c927 |
files | gui/src/IRCWidget.cpp gui/src/IRCWidget.h gui/src/qirc/IRCClientImpl.cpp gui/src/qirc/IRCClientImpl.h gui/src/qirc/IRCClientInterface.h |
diffstat | 5 files changed, 48 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/gui/src/IRCWidget.cpp +++ b/gui/src/IRCWidget.cpp @@ -91,8 +91,11 @@ this, SLOT (handleNickChange (QString,QString))); connect (m_ircClientInterface, SIGNAL (notification (QString,QString)), this, SLOT (showNotification (QString,QString))); - connect (m_ircClientInterface, SIGNAL (loggedIn(QString)), + connect (m_ircClientInterface, SIGNAL (loggedIn (QString)), this, SLOT (handleLoggedIn(QString))); + connect (m_ircClientInterface, SIGNAL (userNicknameChanged (QString)), + this, SLOT (handleUserNicknameChanged (QString))); + connect (m_nickButton, SIGNAL (clicked ()), this, SLOT (nickPopup ())); connect (m_inputLine, SIGNAL (returnPressed ()), this, SLOT (sendInputLine ())); @@ -268,10 +271,6 @@ m_nickList.removeAll (QString (oldNick)); m_nickList.append (QString (newNick)); updateNickCompleter (); - - //m_nickButton->setText (m_ircClient->nickInUse ()); - //QSettings *settings = ResourceManager::instance ()->settings (); - //settings->setValue ("IRCNick", m_ircClient->nickInUse ()); } void @@ -293,6 +292,14 @@ } void +IRCWidget::handleUserNicknameChanged (const QString &nick) +{ + m_nickButton->setText (nick); + QSettings *settings = ResourceManager::instance ()->settings (); + settings->setValue ("IRCNick", nick); +} + +void IRCWidget::updateNickCompleter () { QCompleter *completer = new QCompleter (m_nickList, this);
--- a/gui/src/IRCWidget.h +++ b/gui/src/IRCWidget.h @@ -45,6 +45,7 @@ void handleNickChange (const QString& oldNick, const QString& newNick); void handleUserJoined (const QString& nick, const QString& channel); void handleUserQuit (const QString& nick, const QString& reason); + void handleUserNicknameChanged (const QString& nick); void nickPopup (); void sendMessage (QString);
--- a/gui/src/qirc/IRCClientImpl.cpp +++ b/gui/src/qirc/IRCClientImpl.cpp @@ -176,6 +176,7 @@ IRCClientImpl::IRCClientImpl (QObject *parent) : IRCClientInterface (parent) { + m_loggedIn = false; connect (&m_tcpSocket, SIGNAL (connected ()), this, SLOT (handleConnected ())); connect (&m_tcpSocket, SIGNAL (disconnected ()), this, SLOT (handleDisconnected ())); connect (&m_tcpSocket, SIGNAL (readyRead ()), this, SLOT (handleReadyRead ())); @@ -216,6 +217,12 @@ return m_connected; } +bool +IRCClientImpl::isLoggedIn () +{ + return m_loggedIn; +} + const QHostAddress& IRCClientImpl::host() { @@ -293,6 +300,12 @@ void IRCClientImpl::handleNicknameChanged (const QString &oldNick, const QString &newNick) { + // Check if our nickname changed. + if (oldNick == m_nickname) + { + m_nickname = newNick; + emit userNicknameChanged (m_nickname); + } emit nicknameChanged (oldNick, newNick); } @@ -311,7 +324,7 @@ void IRCClientImpl::handleIncomingLine (const QString &line) { - //emit debugMessage (QString (">>>recv: \"%1\"").arg (line)); + emit debugMessage (QString (">>>recv: \"%1\"").arg (line)); if (m_connected && !line.isEmpty()) { IRCServerMessage ircServerMessage(line); @@ -320,11 +333,26 @@ switch (ircServerMessage.numericValue ()) { case IRCReply::Welcome: + m_loggedIn = true; + emit userNicknameChanged (nickname ()); emit loggedIn (nickname ()); break; case IRCError::NicknameInUse: case IRCError::NickCollision: - emit debugMessage ("FIXME: Received nickname in use reply."); + // If we are already logged in, the user attempted to + // switch to a username that is already existing. + // In that case warn him. + if (isLoggedIn ()) + { + emit error ("The nickname is already in use."); + } + // Otherwise we are attempting to log in to the server. + // Change the nick so that we can at least log in. + else + { + m_nickname += "_"; + sendNicknameChangeRequest (m_nickname); + } break; case IRCError::PasswordMismatch: emit debugMessage ("FIXME: Received password mismatch reply."); @@ -420,7 +448,7 @@ void IRCClientImpl::sendLine (const QString &line) { - //emit debugMessage (QString (">>>send: \"%1\"").arg (line)); + emit debugMessage (QString (">>>send: \"%1\"").arg (line)); if (m_connected) m_tcpSocket.write ((line + "\r\n").toStdString ().c_str ()); }
--- a/gui/src/qirc/IRCClientImpl.h +++ b/gui/src/qirc/IRCClientImpl.h @@ -283,6 +283,7 @@ const QString& nickname (); bool isConnected (); + bool isLoggedIn (); const QHostAddress& host(); int port(); IRCChannelProxyInterface *ircChannelProxy(const QString& channel); @@ -315,6 +316,7 @@ int m_port; QString m_nickname; bool m_connected; + bool m_loggedIn; QTcpSocket m_tcpSocket; QMap<QString, IRCChannelProxyInterface*> m_channels; };
--- a/gui/src/qirc/IRCClientInterface.h +++ b/gui/src/qirc/IRCClientInterface.h @@ -54,6 +54,7 @@ virtual const QString& nickname () = 0; virtual bool isConnected () = 0; + virtual bool isLoggedIn () = 0; virtual const QHostAddress& host() = 0; virtual int port() = 0; virtual IRCChannelProxyInterface *ircChannelProxy(const QString& channel) = 0; @@ -76,6 +77,7 @@ void notification (const QString& sender, const QString& message); void message (const QString& channel, const QString& sender, const QString& message); void nicknameChanged (const QString& oldNick, const QString& newNick); + void userNicknameChanged (const QString& nick); void userJoined (const QString& nick, const QString& channel); void userQuit (const QString& nick, const QString& reason); void loggedIn (const QString& nick);