X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fircuser.cpp;h=fb257495990b029753216d9d009a775d4498ce43;hp=dd60aa9097b3a3b5f2c9d6af04b61bcdbdcaa6e6;hb=a7f5d6a23f7214b11f6db85346a67fd7d02767da;hpb=cfbd7e0ec3624307cfb612fe4804d58c34b7eec9 diff --git a/src/common/ircuser.cpp b/src/common/ircuser.cpp index dd60aa90..fb257495 100644 --- a/src/common/ircuser.cpp +++ b/src/common/ircuser.cpp @@ -21,93 +21,148 @@ #include "ircuser.h" #include "util.h" -IrcUser::IrcUser(QObject *parent) - : QObject(parent) { -} +#include "networkinfo.h" +#include "signalproxy.h" +#include "ircchannel.h" + +#include -IrcUser::IrcUser(const QString &hostmask, QObject *parent) - : QObject(parent), - nick_(nickFromMask(hostmask)), - user_(userFromMask(hostmask)), - host_(hostFromMask(hostmask)) { +IrcUser::IrcUser(const QString &hostmask, NetworkInfo *networkinfo) + : QObject(networkinfo), + _initialized(false), + _nick(nickFromMask(hostmask)), + _user(userFromMask(hostmask)), + _host(hostFromMask(hostmask)), + networkInfo(networkinfo) +{ + updateObjectName(); } IrcUser::~IrcUser() { } -void IrcUser::setUser(const QString &user) { - user_ = user; +// ==================== +// PUBLIC: +// ==================== +bool IrcUser::initialized() const { + return _initialized; } QString IrcUser::user() const { - return user_; -} - -void IrcUser::setHost(const QString &host) { - host_ = host; + return _user; } QString IrcUser::host() const { - return host_; -} - -void IrcUser::setNick(const QString &nick) { - nick_ = nick; + return _host; } QString IrcUser::nick() const { - return nick_; + return _nick; } -void IrcUser::setUsermodes(const QSet &usermodes) { - usermodes_ = usermodes; +QString IrcUser::hostmask() const { + return QString("%1!%2@%3").arg(nick()).arg(user()).arg(host()); } -QSet IrcUser::usermodes() const { - return usermodes_; +QString IrcUser::userModes() const { + return _userModes; } -void IrcUser::setChannelmode(const QString &channel, const QSet &channelmode) { - if(channelmodes_.contains(channel)) - channelmodes_[channel] |= channelmode; - else - channelmodes_[channel] = channelmode; +QStringList IrcUser::channels() const { + return _channels.toList(); } -QSet IrcUser::channelmode(const QString &channel) const { - if(channelmodes_.contains(channel)) - throw NoSuchChannelException(); - else - return QSet(); +// ==================== +// PUBLIC SLOTS: +// ==================== +void IrcUser::setUser(const QString &user) { + if(!user.isEmpty() && _user != user) { + _user = user; + emit userSet(user); + } } -void IrcUser::updateChannelmode(const QString &channel, const QString &channelmode, bool add) { - if(add) - addChannelmode(channel, channelmode); - else - removeChannelmode(channel, channelmode); +void IrcUser::setHost(const QString &host) { + if(!host.isEmpty() && _host != host) { + _host = host; + emit hostSet(host); + } } -void IrcUser::addChannelmode(const QString &channel, const QString &channelmode) { - if(!channelmodes_.contains(channel)) - channelmodes_[channel] = QSet(); - channelmodes_[channel] << channelmode; +void IrcUser::setNick(const QString &nick) { + if(!nick.isEmpty() && nick != _nick) { + QString oldnick(_nick); + _nick = nick; + updateObjectName(); + emit nickSet(nick); + } } -void IrcUser::removeChannelmode(const QString &channel, const QString &channelmode) { - if(channelmodes_.contains(channel)) - channelmodes_[channel].remove(channelmode); +void IrcUser::updateObjectName() { + QString oldName(objectName()); + setObjectName(QString::number(networkInfo->networkId()) + "/" + _nick); + if(!oldName.isEmpty()) { + emit renameObject(oldName, objectName()); + } } -QStringList IrcUser::channels() const { - return channelmodes_.keys(); + +void IrcUser::updateHostmask(const QString &mask) { + if(mask == hostmask()) + return; + + QString user = userFromMask(mask); + QString host = hostFromMask(mask); + setUser(user); + setHost(host); } void IrcUser::joinChannel(const QString &channel) { - if(!channelmodes_.contains(channel)) - channelmodes_[channel] = QSet(); + if(!_channels.contains(channel)) { + _channels.insert(channel); + networkInfo->newIrcChannel(channel)->join(this); + emit channelJoined(channel); + } } void IrcUser::partChannel(const QString &channel) { - channelmodes_.remove(channel); + if(_channels.contains(channel)) { + _channels.remove(channel); + + Q_ASSERT(networkInfo->ircChannel(channel)); + networkInfo->ircChannel(channel)->part(this); + + emit channelParted(channel); + } +} + +void IrcUser::setUserModes(const QString &modes) { + _userModes = modes; + emit userModesSet(modes); +} + +void IrcUser::addUserMode(const QString &mode) { + if(!_userModes.contains(mode)) { + _userModes += mode; + emit userModeAdded(mode); + } } + +void IrcUser::removeUserMode(const QString &mode) { + if(_userModes.contains(mode)) { + _userModes.remove(mode); + emit userModeRemoved(mode); + } +} + +void IrcUser::initSetChannels(const QStringList channels) { + foreach(QString channel, channels) { + joinChannel(channel); + } +} + +void IrcUser::setInitialized() { + _initialized = true; + emit initDone(); +} +