X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fircuser.cpp;h=8acb67826215bacba205c61001edc0a6fa1cd571;hp=af3cb3ebdfa53dae7b2ed9ae976a14caf29193f5;hb=f824db0e31b54969e0b7fa0b5405b1e9173d482c;hpb=09312db1a755642802ff15595900878fbe76b21a diff --git a/src/common/ircuser.cpp b/src/common/ircuser.cpp index af3cb3eb..8acb6782 100644 --- a/src/common/ircuser.cpp +++ b/src/common/ircuser.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * 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 * @@ -21,18 +21,18 @@ #include "ircuser.h" #include "util.h" +#include "network.h" #include "signalproxy.h" #include "ircchannel.h" #include #include -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), @@ -107,22 +107,16 @@ QByteArray IrcUser::encodeString(const QString &string) const { // 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); } } @@ -134,12 +128,9 @@ void IrcUser::setAway(const bool &away) { } 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); } } @@ -180,23 +171,17 @@ void IrcUser::setLastAwayMessage(const int &lastAwayMessage) { } 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); } } @@ -215,7 +200,7 @@ void IrcUser::setSuserHost(const QString &suserHost) { } void IrcUser::updateObjectName() { - renameObject(QString::number(network()->networkId().toInt()) + "/" + nick()); + renameObject(QString::number(network()->networkId().toInt()) + "/" + _nick); } void IrcUser::updateHostmask(const QString &mask) { @@ -233,7 +218,6 @@ void IrcUser::joinChannel(IrcChannel *channel) { if(!_channels.contains(channel)) { _channels.insert(channel); channel->joinIrcUsers(this); - connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed())); } } @@ -248,7 +232,7 @@ void IrcUser::partChannel(IrcChannel *channel) { channel->part(this); emit channelParted(channel->name()); if(_channels.isEmpty() && !network()->isMe(this)) - deleteLater(); + quit(); } } @@ -261,13 +245,24 @@ void IrcUser::partChannel(const QString &channelname) { } } +void IrcUser::quit() { + QList 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(sender()); if(_channels.contains(channel)) { _channels.remove(channel); - if(_channels.isEmpty()) - deleteLater(); + if(_channels.isEmpty() && !network()->isMe(this)) + quit(); } }