return QString();
}
+void BufferItem::ircUserDestroyed() {
+ // PRIVATE
+ IrcUser *ircUser = static_cast<IrcUser *>(sender());
+ removeUserFromCategory(ircUser);
+ emit dataChanged(2);
+}
+
int BufferItem::nickCount() const {
if(_ircChannel)
return _ircChannel->ircUsers().count();
return;
addUserToCategory(ircUser);
+ connect(ircUser, SIGNAL(destroyed()),
+ this, SLOT(ircUserDestroyed()));
emit dataChanged(2);
}
return;
}
+ disconnect(ircUser, 0, this, 0);
removeUserFromCategory(ircUser);
emit dataChanged(2);
}
*****************************************/
IrcUserItem::IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent)
: PropertyMapItem(QStringList() << "nickName", parent),
- _ircUser(ircUser)
+ _ircUser(ircUser),
+ _id(qHash(ircUser))
{
// we don't need to handle the ircUser's destroyed signal since it's automatically removed
// by the IrcChannel::ircUserParted();
}
quint64 IrcUserItem::id() const {
- return qHash((IrcUser *)_ircUser);
+ return _id;
}
QVariant IrcUserItem::data(int column, int role) const {
private slots:
void ircChannelDestroyed();
+ void ircUserDestroyed();
private:
BufferInfo _bufferInfo;
private:
QPointer<IrcUser> _ircUser;
+ quint64 _id;
};
IrcUser *ircUser = static_cast<IrcUser *>(sender());
Q_ASSERT(ircUser);
_userModes.remove(ircUser);
- emit ircUserParted(ircUser);
- //qDebug() << "DEST" << name() << ircUsers().count();
+ // no further propagation.
+ // this leads only to fuck ups.
}
void IrcChannel::ircUserNickSet(QString nick) {
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);
}
}
ircuser->deleteLater();
}
-void Network::removeIrcUser(QString nick) {
+void Network::removeChansAndUsers() {
+ QList<IrcUser *> users = ircUsers();
+ foreach(IrcUser *user, users) {
+ removeIrcUser(user);
+ }
+ QList<IrcChannel *> channels = ircChannels();
+ foreach(IrcChannel *channel, channels) {
+ removeIrcChannel(channel);
+ }
+}
+
+void Network::removeIrcUser(const QString &nick) {
IrcUser *ircuser;
if((ircuser = ircUser(nick)) != 0)
removeIrcUser(ircuser);
void Network::setConnected(bool connected) {
_connected = connected;
+ if(!connected)
+ removeChansAndUsers();
emit connectedSet(connected);
}
emit ircChannelInitDone(ircchannel);
}
+void Network::removeIrcChannel(IrcChannel *channel) {
+ QString chanName = _ircChannels.key(channel);
+ if(chanName.isNull())
+ return;
+
+ _ircChannels.remove(chanName);
+ disconnect(channel, 0, this, 0);
+ emit ircChannelRemoved(chanName);
+ emit ircChannelRemoved(channel);
+ channel->deleteLater();
+}
+
+void Network::removeIrcChannel(const QString &channel) {
+ IrcChannel *chan;
+ if((chan = ircChannel(channel)) != 0)
+ removeIrcChannel(chan);
+}
+
void Network::channelDestroyed() {
IrcChannel *channel = static_cast<IrcChannel *>(sender());
Q_ASSERT(channel);
void removeSupport(const QString ¶m);
inline void addIrcUser(const QString &hostmask) { newIrcUser(hostmask); }
- void removeIrcUser(QString nick);
+ void removeIrcUser(const QString &nick);
+ void removeIrcChannel(const QString &channel);
//init geters
QVariantMap initSupports() const;
private slots:
void channelDestroyed();
void removeIrcUser(IrcUser *ircuser);
+ void removeIrcChannel(IrcChannel *ircChannel);
+ void removeChansAndUsers();
void ircUserInitDone();
void ircChannelInitDone();
void ircChannelAdded(IrcChannel *);
void ircUserRemoved(const QString &nick);
+ void ircChannelRemoved(const QString &channel);
// needed for client sync progress
void ircUserRemoved(QObject *);
// it's possible to pack multiple privmsgs into one param using ctcp
// - > we let the ctcpHandler do the work
networkConnection->ctcpHandler()->parse(Message::Plain, prefix, target, userDecode(ircuser->nick(), params[1]));
-// QStringList messages =
-
-// foreach(QString message, messages) {
-// emit displayMsg(Message::Plain, target, message, prefix);
-// }
-
}
void IrcServerHandler::handleQuit(QString prefix, QList<QByteArray> params) {
quasselVersion = "0.2.0-pre";
quasselDate = "2008-02-05";
- quasselBuild = 459;
+ quasselBuild = 461;
//! Minimum client build number the core needs
- clientBuildNeeded = 459;
+ clientBuildNeeded = 461;
clientVersionNeeded = quasselVersion;
//! Minimum core build number the client needs
- coreBuildNeeded = 459;
+ coreBuildNeeded = 461;
coreVersionNeeded = quasselVersion;
}