if(!_userModes.contains(ircuser) && ircuser) {
_userModes[ircuser] = QString();
ircuser->joinChannel(name());
+ qDebug() << "JOIN" << name() << ircuser->nick() << ircUsers().count();
connect(ircuser, SIGNAL(nickSet(QString)), this, SLOT(ircUserNickSet(QString)));
connect(ircuser, SIGNAL(destroyed()), this, SLOT(ircUserDestroyed()));
// if you wonder why there is no counterpart to ircUserJoined:
if(isKnownUser(ircuser)) {
_userModes.remove(ircuser);
ircuser->partChannel(name());
+ qDebug() << "PART" << name() << ircuser->nick() << ircUsers().count();
// if you wonder why there is no counterpart to ircUserParted:
// the joines are propagted by the ircuser. the signal ircUserParted is only for convenience
emit ircUserParted(ircuser);
Q_ASSERT(ircUser);
_userModes.remove(ircUser);
emit ircUserParted(ircUser);
+ qDebug() << "DEST" << name() << ircUsers().count();
}
void IrcChannel::ircUserNickSet(QString nick) {
}
IrcUser::~IrcUser() {
+ qDebug() << nick() << "destroyed.";
}
// ====================
QString nick(nickFromMask(hostmask));
if(!_ircUsers.contains(nick)) {
IrcUser *ircuser = new IrcUser(hostmask, this);
+ qDebug() << "new IrcUser()" << ircuser << hostmask;
// mark IrcUser as already initialized to keep the SignalProxy from requesting initData
if(initialized())
ircuser->setInitialized();
return _ircUsers[nick];
}
+void NetworkInfo::removeIrcUser(IrcUser *ircuser) {
+ QString nick = _ircUsers.key(ircuser);
+ if(nick.isNull())
+ return;
+
+ _ircUsers.remove(nick);
+ ircuser->deleteLater();
+ emit ircUserRemoved(nick);
+}
+
void NetworkInfo::removeIrcUser(QString nick) {
IrcUser *ircuser;
- if((ircuser = ircUser(nick)) != 0) {
- ircuser->deleteLater();
- emit ircUserRemoved(nick);
- }
+ if((ircuser = ircUser(nick)) != 0)
+ removeIrcUser(ircuser);
}
IrcUser *NetworkInfo::ircUser(const QString &nickname) const {
QString nick(nickFromMask(mask));
IrcUser *ircuser;
+ qDebug() << "NetworkInfo::updateNickFromMask()" << mask;
if(_ircUsers.contains(nick)) {
+ qDebug() << " is known User";
ircuser = _ircUsers[nick];
ircuser->updateHostmask(mask);
} else {
+ qDebug() << " is new User";
ircuser = newIrcUser(mask);
}
return ircuser;
void NetworkInfo::ircUserDestroyed() {
IrcUser *ircuser = static_cast<IrcUser *>(sender());
Q_ASSERT(ircuser);
- QString nick = _ircUsers.key(ircuser);
- _ircUsers.remove(nick);
- emit ircUserRemoved(nick);
+ qDebug() << "NetworkInfo::ircUserDestroyed()" << ircuser;
+ removeIrcUser(ircuser);
}
void NetworkInfo::channelDestroyed() {
// these slots are to keep the hashlists of all users and the
// channel lists up to date
void ircUserNickChanged(QString newnick);
+ void setInitialized();
+private slots:
void ircUserDestroyed();
void channelDestroyed();
-
- void setInitialized();
+ void removeIrcUser(IrcUser *ircuser);
signals:
void networkNameSet(const QString &networkName);
QPointer<SignalProxy> _proxy;
void determinePrefixes();
+
};
#endif
QByteArray className(params[0].toByteArray());
QString objectName(params[1].toString());
-
+
if(!_syncSlave.contains(className)) {
qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Class:"
<< className;
<< className << objectName;
return;
}
-
+
QObject *obj = _syncSlave[className][objectName];
+ qDebug() << "Receive Init Request for" << className << objectName << obj;
QVariantList params_;
params_ << obj->metaObject()->className()
QString channel = params[0];
IrcUser *ircuser = networkInfo()->updateNickFromMask(prefix);
emit displayMsg(Message::Join, channel, channel, prefix);
-
+ qDebug() << "IrcServerHandler::handleJoin()" << prefix << params;
ircuser->joinChannel(channel);
}
void IrcServerHandler::handleQuit(QString prefix, QStringList params) {
IrcUser *ircuser = networkInfo()->updateNickFromMask(prefix);
Q_ASSERT(ircuser);
+ qDebug() << "IrcServerHandler:handleQuit" << prefix << params;
QString msg;
if(params.count())
foreach(QString channel, ircuser->channels())
emit displayMsg(Message::Quit, channel, msg, prefix);
-
- ircuser->deleteLater();
+
+ networkInfo()->removeIrcUser(nickFromMask(prefix));
}
void IrcServerHandler::handleTopic(QString prefix, QStringList params) {