}
QStringList IrcUser::channels() const {
- return _channels.toList();
+ QStringList chanList;
+ IrcChannel *channel;
+ foreach(channel, _channels) {
+ chanList << channel->name();
+ }
+ return chanList;
}
// ====================
setHost(host);
}
-void IrcUser::joinChannel(const QString &channel) {
+void IrcUser::joinChannel(IrcChannel *channel) {
+ Q_ASSERT(channel);
if(!_channels.contains(channel)) {
+ channel->join(this);
+ connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed()));
_channels.insert(channel);
- networkInfo->newIrcChannel(channel)->join(this);
- emit channelJoined(channel);
+ emit channelJoined(channel->name());
}
}
-void IrcUser::partChannel(const QString &channel) {
+void IrcUser::joinChannel(const QString &channelname) {
+ joinChannel(networkInfo->newIrcChannel(channelname));
+}
+
+void IrcUser::partChannel(IrcChannel *channel) {
if(_channels.contains(channel)) {
_channels.remove(channel);
+ disconnect(channel, 0, this, 0);
+ channel->part(this);
+ emit channelParted(channel->name());
+ }
+}
- Q_ASSERT(networkInfo->ircChannel(channel));
- networkInfo->ircChannel(channel)->part(this);
-
- emit channelParted(channel);
+void IrcUser::partChannel(const QString &channelname) {
+ IrcChannel *channel = networkInfo->ircChannel(channelname);
+ if(channel == 0) {
+ qWarning() << "IrcUser::partChannel(): received part for unknown Channel" << channelname;
+ } else {
+ partChannel(channel);
+ }
+}
+
+void IrcUser::channelDestroyed() {
+ // private slot!
+ IrcChannel *channel = static_cast<IrcChannel*>(sender());
+ Q_ASSERT(channel);
+ if(_channels.contains(channel)) {
+ _channels.remove(channel);
+ disconnect(channel, 0, this, 0);
}
}
void updateHostmask(const QString &mask);
void setUserModes(const QString &modes);
-
- void joinChannel(const QString &channel);
- void partChannel(const QString &channel);
+
+ void joinChannel(IrcChannel *channel);
+ void joinChannel(const QString &channelname);
+ void partChannel(IrcChannel *channel);
+ void partChannel(const QString &channelname);
void addUserMode(const QString &mode);
void removeUserMode(const QString &mode);
void nickSet(QString newnick);
void hostmaskUpdated(QString mask);
- void channelsSet(QStringList channels);
void userModesSet(QString modes);
void channelJoined(QString channel);
private slots:
void updateObjectName();
+ void channelDestroyed();
private:
inline bool operator==(const IrcUser &ircuser2) {
QString _user;
QString _host;
- QSet<QString> _channels;
+ // QSet<QString> _channels;
+ QSet<IrcChannel *> _channels;
QString _userModes;
NetworkInfo *networkInfo;
}
IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) {
- QString nick(nickFromMask(hostmask));
+ 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
_ircUsers[nick] = ircuser;
emit ircUserAdded(hostmask);
}
- return _ircUsers[nick];
+ return _ircUsers[nick];
}
void NetworkInfo::removeIrcUser(IrcUser *ircuser) {
removeIrcUser(ircuser);
}
-IrcUser *NetworkInfo::ircUser(const QString &nickname) const {
+IrcUser *NetworkInfo::ircUser(QString nickname) const {
+ nickname = nickname.toLower();
if(_ircUsers.contains(nickname))
return _ircUsers[nickname];
else
return _ircUsers.values();
}
-IrcChannel *NetworkInfo::newIrcChannel(QString channelname) {
- channelname = channelname.toLower();
- if(!_ircChannels.contains(channelname)) {
+IrcChannel *NetworkInfo::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(initialized())
connect(channel, SIGNAL(initDone()), this, SIGNAL(ircChannelInitDone()));
connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed()));
- _ircChannels[channelname] = channel;
+ _ircChannels[channelname.toLower()] = channel;
emit ircChannelAdded(channelname);
}
- return _ircChannels[channelname];
+ return _ircChannels[channelname.toLower()];
}
QString support(const QString ¶m) const;
IrcUser *newIrcUser(const QString &hostmask);
- IrcUser *ircUser(const QString &nickname) const;
+ IrcUser *ircUser(QString nickname) const;
QList<IrcUser *> ircUsers() const;
- IrcChannel *newIrcChannel(QString channelname);
+ IrcChannel *newIrcChannel(const QString &channelname);
IrcChannel *ircChannel(QString channelname);
QList<IrcChannel *> ircChannels() const;