changeset 13618:46c5fd59fe98

Autocompletion now works for users that changed their nick or joined the channel.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Wed, 17 Aug 2011 21:26:37 +0200
parents be7496863660
children f72530c9471a
files gui/src/qirc/IRCClientImpl.cpp gui/src/qirc/IRCClientImpl.h gui/src/qirc/IRCClientInterface.h
diffstat 3 files changed, 29 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/gui/src/qirc/IRCClientImpl.cpp
+++ b/gui/src/qirc/IRCClientImpl.cpp
@@ -149,6 +149,8 @@
     m_clientInterface (clientInterface)
 {
   m_channelName = channelName;
+  connect (clientInterface, SIGNAL (nicknameChanged (QString,QString)),
+           this, SLOT (handleNickChange (QString,QString)));
 }
 
 QTextDocument *
@@ -198,6 +200,23 @@
   Q_UNUSED (reason);
 }
 
+void
+IRCChannelProxyImpl::handleNickChange (const QString &oldNick, const QString &newNick)
+{
+  m_userList = m_userListModel.stringList ();
+  m_userList.removeAll (oldNick);
+  m_userList.append (newNick);
+  m_userListModel.setStringList (m_userList);
+}
+
+void
+IRCChannelProxyImpl::handleJoin (const QString &nick)
+{
+  m_userList = m_userListModel.stringList ();
+  m_userList.append (nick);
+  m_userListModel.setStringList (m_userList);
+}
+
 IRCClientImpl::IRCClientImpl (QObject *parent)
   : IRCClientInterface (parent)
 {
@@ -315,7 +334,7 @@
     {
       line = m_tcpSocket.readLine();
       if (line.size ())
-        handleIncomingLine(QString(line));
+        handleIncomingLine(QString (line).toLocal8Bit ());
       else
         break;
     }
@@ -337,6 +356,7 @@
 void
 IRCClientImpl::handleUserJoined (const QString &nick, const QString &channel)
 {
+  ircChannelProxy (channel)->handleJoin (nick);
   emit userJoined (nick, channel);
 }
 
@@ -468,7 +488,7 @@
 IRCClientImpl::sendLine (const QString &line)
 {
   if (m_connected)
-    m_tcpSocket.write ((line + "\r\n").toStdString ().c_str ());
+    m_tcpSocket.write ( (line +  + "\r\n").toUtf8 ());
 }
 
 void
--- a/gui/src/qirc/IRCClientImpl.h
+++ b/gui/src/qirc/IRCClientImpl.h
@@ -289,7 +289,9 @@
   void sendMessage (const QString& message);
   void sendJoinRequest ();
   void leave (const QString &reason);
-
+public slots:
+  void handleNickChange (const QString& oldNick, const QString& newNick);
+  void handleJoin (const QString& nick);
 private:
   QString             m_channelName;
   QStringList         m_userList;
--- a/gui/src/qirc/IRCClientInterface.h
+++ b/gui/src/qirc/IRCClientInterface.h
@@ -66,6 +66,10 @@
     * \arg reason Reason for leaving the channel.
     */
   virtual void leave (const QString& reason) = 0;
+
+public slots:
+  virtual void handleNickChange (const QString& oldNick, const QString& newNick) = 0;
+  virtual void handleJoin (const QString& nick) = 0;
 };
 
 /**