This _should_ fix the bug, that users quitting the network won't be
authorMarcus Eggenberger <egs@quassel-irc.org>
Wed, 28 Nov 2007 17:55:36 +0000 (17:55 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Wed, 28 Nov 2007 17:55:36 +0000 (17:55 +0000)
propagated to the nicklist. Can't test it, since the nicklist doesn't
currently work on Mac OS (the issue seems to be even before or in NickModel::setIrcChannel())

src/common/ircchannel.cpp
src/common/ircchannel.h
src/common/networkinfo.cpp
src/common/networkinfo.h

index 577270d..cff2e75 100644 (file)
@@ -56,7 +56,7 @@ bool IrcChannel::isKnownUser(IrcUser *ircuser) const {
     isknown = false;
   }
   
     isknown = false;
   }
   
-  if(!_userModes.contains(ircuser) && ircuser) {
+  if(!_userModes.contains(ircuser)) {
     qWarning() << "Channel" << name() << "received data for unknown User" << ircuser->nick();
     isknown = false;
   }
     qWarning() << "Channel" << name() << "received data for unknown User" << ircuser->nick();
     isknown = false;
   }
@@ -207,9 +207,8 @@ void IrcChannel::initSetUserModes(const QVariantMap &usermodes) {
 void IrcChannel::ircUserDestroyed() {
   IrcUser *ircUser = static_cast<IrcUser *>(sender());
   Q_ASSERT(ircUser);
 void IrcChannel::ircUserDestroyed() {
   IrcUser *ircUser = static_cast<IrcUser *>(sender());
   Q_ASSERT(ircUser);
-  emit ircUserParted(ircUser);
-  emit ircUserDestroyed(ircUser);
   _userModes.remove(ircUser);
   _userModes.remove(ircUser);
+  emit ircUserParted(ircUser);
 }
 
 void IrcChannel::ircUserNickSet(QString nick) {
 }
 
 void IrcChannel::ircUserNickSet(QString nick) {
index 6dab1e2..c66bf2b 100644 (file)
@@ -90,7 +90,6 @@ signals:
 
   void ircUserJoined(IrcUser *ircuser);
   void ircUserParted(IrcUser *ircuser);
 
   void ircUserJoined(IrcUser *ircuser);
   void ircUserParted(IrcUser *ircuser);
-  void ircUserDestroyed(IrcUser *ircuser);
   void ircUserNickSet(IrcUser *ircuser, QString nick);
   void ircUserModeAdded(IrcUser *ircuser, QString mode);
   void ircUserModeRemoved(IrcUser *ircuser, QString mode);
   void ircUserNickSet(IrcUser *ircuser, QString nick);
   void ircUserModeAdded(IrcUser *ircuser, QString mode);
   void ircUserModeRemoved(IrcUser *ircuser, QString mode);
index 5690a26..0ef2f1f 100644 (file)
@@ -183,6 +183,14 @@ IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) {
   return  _ircUsers[nick];
 }
 
   return  _ircUsers[nick];
 }
 
+void NetworkInfo::removeIrcUser(QString nick) {
+  IrcUser *ircuser;
+  if((ircuser = ircUser(nick)) != 0) {
+    ircuser->deleteLater();
+    emit ircUserRemoved(nick);
+  }
+}
+
 IrcUser *NetworkInfo::ircUser(const QString &nickname) const {
   if(_ircUsers.contains(nickname))
     return _ircUsers[nickname];
 IrcUser *NetworkInfo::ircUser(const QString &nickname) const {
   if(_ircUsers.contains(nickname))
     return _ircUsers[nickname];
@@ -331,7 +339,9 @@ void NetworkInfo::ircUserNickChanged(QString newnick) {
 void NetworkInfo::ircUserDestroyed() {
   IrcUser *ircuser = static_cast<IrcUser *>(sender());
   Q_ASSERT(ircuser);
 void NetworkInfo::ircUserDestroyed() {
   IrcUser *ircuser = static_cast<IrcUser *>(sender());
   Q_ASSERT(ircuser);
-  _ircUsers.remove(_ircUsers.key(ircuser));
+  QString nick = _ircUsers.key(ircuser);
+  _ircUsers.remove(nick);
+  emit ircUserRemoved(nick);
 }
 
 void NetworkInfo::channelDestroyed() {
 }
 
 void NetworkInfo::channelDestroyed() {
index 776c7b7..f767603 100644 (file)
@@ -89,6 +89,7 @@ public slots:
   void removeSupport(const QString &param);
 
   inline void addIrcUser(const QString &hostmask) { newIrcUser(hostmask); }
   void removeSupport(const QString &param);
 
   inline void addIrcUser(const QString &hostmask) { newIrcUser(hostmask); }
+  void removeIrcUser(QString nick);
   
   //init geters
   QVariantMap initSupports() const;
   
   //init geters
   QVariantMap initSupports() const;
@@ -122,6 +123,8 @@ signals:
   void ircUserAdded(QString hostmask);
   void ircChannelAdded(QString channelname);
 
   void ircUserAdded(QString hostmask);
   void ircChannelAdded(QString channelname);
 
+  void ircUserRemoved(QString nick);
+  
   void initDone();
   void ircUserInitDone();
   void ircChannelInitDone();
   void initDone();
   void ircUserInitDone();
   void ircChannelInitDone();