/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel Project *
+ * Copyright (C) 2005-09 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "ircuser.h"
#include "util.h"
+#include "network.h"
#include "signalproxy.h"
#include "ircchannel.h"
#include <QTextCodec>
#include <QDebug>
-IrcUser::IrcUser(const QString &hostmask, Network *network)
- : SyncableObject(network),
+IrcUser::IrcUser(const QString &hostmask, Network *network) : SyncableObject(network),
_initialized(false),
- _nick(network->encodeServerString(nickFromMask(hostmask))),
- _user(network->encodeServerString(userFromMask(hostmask))),
- _host(network->encodeServerString(hostFromMask(hostmask))),
+ _nick(nickFromMask(hostmask)),
+ _user(userFromMask(hostmask)),
+ _host(hostFromMask(hostmask)),
_realName(),
_awayMessage(),
_away(false),
// PUBLIC SLOTS:
// ====================
void IrcUser::setUser(const QString &user) {
- if(!user.isEmpty()) {
- QByteArray newUser = network()->encodeServerString(user);
- if(newUser != _user) {
- _user = newUser;
- emit userSet(user);
- }
+ if(!user.isEmpty() && _user != user) {
+ _user = user;
+ emit userSet(user);
}
}
void IrcUser::setRealName(const QString &realName) {
- if(!realName.isEmpty()) {
- QByteArray newRealName = network()->encodeServerString(realName);
- if(newRealName != _realName) {
- _realName = newRealName;
- emit realNameSet(realName);
- }
+ if (!realName.isEmpty() && _realName != realName) {
+ _realName = realName;
+ emit realNameSet(realName);
}
}
}
void IrcUser::setAwayMessage(const QString &awayMessage) {
- if(!awayMessage.isEmpty()) {
- QByteArray newAwayMessage = network()->encodeServerString(awayMessage);
- if(newAwayMessage != _awayMessage) {
- _awayMessage = newAwayMessage;
- emit awayMessageSet(awayMessage);
- }
+ if(!awayMessage.isEmpty() && _awayMessage != awayMessage) {
+ _awayMessage = awayMessage;
+ emit awayMessageSet(awayMessage);
}
}
}
void IrcUser::setHost(const QString &host) {
- if(!host.isEmpty()) {
- QByteArray newHost = network()->encodeServerString(host);
- if(newHost != _host) {
- _host = newHost;
- emit hostSet(host);
- }
+ if(!host.isEmpty() && _host != host) {
+ _host = host;
+ emit hostSet(host);
}
}
void IrcUser::setNick(const QString &nick) {
- if(!nick.isEmpty()) {
- QByteArray newNick = network()->encodeServerString(nick);
- if(newNick != _nick) {
- _nick = newNick;
- updateObjectName();
- emit nickSet(nick);
- }
+ if(!nick.isEmpty() && nick != _nick) {
+ _nick = nick;
+ updateObjectName();
+ emit nickSet(nick);
}
}
}
void IrcUser::updateObjectName() {
- renameObject(QString::number(network()->networkId().toInt()) + "/" + nick());
+ renameObject(QString::number(network()->networkId().toInt()) + "/" + _nick);
}
void IrcUser::updateHostmask(const QString &mask) {
if(!_channels.contains(channel)) {
_channels.insert(channel);
channel->joinIrcUsers(this);
- connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed()));
}
}
channel->part(this);
emit channelParted(channel->name());
if(_channels.isEmpty() && !network()->isMe(this))
- deleteLater();
+ quit();
}
}
}
}
+void IrcUser::quit() {
+ QList<IrcChannel *> channels = _channels.toList();
+ _channels.clear();
+ foreach(IrcChannel *channel, channels) {
+ disconnect(channel, 0, this, 0);
+ channel->part(this);
+ }
+ network()->removeIrcUser(this);
+ emit quited();
+}
+
void IrcUser::channelDestroyed() {
// private slot!
IrcChannel *channel = static_cast<IrcChannel*>(sender());
if(_channels.contains(channel)) {
_channels.remove(channel);
- if(_channels.isEmpty())
- deleteLater();
+ if(_channels.isEmpty() && !network()->isMe(this))
+ quit();
}
}