QString nick(nickFromMask(hostmask).toLower());
if(!_ircUsers.contains(nick)) {
IrcUser *ircuser = new IrcUser(hostmask, this);
- // mark IrcUser as already initialized to keep the SignalProxy from requesting initData
- //if(isInitialized())
- // ircuser->setInitialized();
+
if(proxy())
proxy()->synchronize(ircuser);
else
connect(ircuser, SIGNAL(nickSet(QString)), this, SLOT(ircUserNickChanged(QString)));
connect(ircuser, SIGNAL(initDone()), this, SLOT(ircUserInitDone()));
+ connect(ircuser, SIGNAL(destroyed()), this, SLOT(ircUserDestroyed()));
_ircUsers[nick] = ircuser;
emit ircUserAdded(hostmask);
emit ircUserAdded(ircuser);
return newIrcUser(decodeServerString(hostmask));
}
+void Network::ircUserDestroyed() {
+ IrcUser *ircUser = static_cast<IrcUser *>(sender());
+ if(!ircUser)
+ return;
+
+ QHash<QString, IrcUser *>::iterator ircUserIter = _ircUsers.begin();
+ while(ircUserIter != _ircUsers.end()) {
+ if(ircUser == *ircUserIter) {
+ ircUserIter = _ircUsers.erase(ircUserIter);
+ break;
+ }
+ ircUserIter++;
+ }
+}
+
void Network::removeIrcUser(IrcUser *ircuser) {
QString nick = _ircUsers.key(ircuser);
if(nick.isNull())
ircuser->deleteLater();
}
+void Network::removeIrcUser(const QString &nick) {
+ IrcUser *ircuser;
+ if((ircuser = ircUser(nick)) != 0)
+ removeIrcUser(ircuser);
+}
+
void Network::removeChansAndUsers() {
QList<IrcUser *> users = ircUsers();
foreach(IrcUser *user, users) {
}
}
-void Network::removeIrcUser(const QString &nick) {
- IrcUser *ircuser;
- if((ircuser = ircUser(nick)) != 0)
- removeIrcUser(ircuser);
-}
-
IrcUser *Network::ircUser(QString nickname) const {
nickname = nickname.toLower();
if(_ircUsers.contains(nickname))
IrcChannel *Network::newIrcChannel(const QString &channelname) {
if(!_ircChannels.contains(channelname.toLower())) {
IrcChannel *channel = new IrcChannel(channelname, this);
- // mark IrcUser as already initialized to keep the SignalProxy from requesting initData
- //if(isInitialized())
- // channel->setInitialized();
if(proxy())
proxy()->synchronize(channel);
}
QStringList Network::initIrcChannels() const {
- return _ircChannels.keys();
+ QStringList channels;
+ QHash<QString, IrcChannel *>::const_iterator iter = _ircChannels.constBegin();
+ while(iter != _ircChannels.constEnd()) {
+ channels << iter.value()->name();
+ iter++;
+ }
+ return channels;
}
void Network::initSetSupports(const QVariantMap &supports) {
}
}
-void Network::initSetChannels(const QStringList &channels) {
+void Network::initSetIrcChannels(const QStringList &channels) {
if(!_ircChannels.empty())
return;
foreach(QString channel, channels)