X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommon%2Fircuser.cpp;h=e911d33441279fab998a8940de36968953562c7c;hb=52cba0963e0714f4d58296a20d02164b57f9f4ba;hp=f7fc9b0d449ec10abc604295fcb695d8a8874d93;hpb=99a590ef8b00aadfb3d6f77bc84df015158fc70b;p=quassel.git diff --git a/src/common/ircuser.cpp b/src/common/ircuser.cpp index f7fc9b0d..e911d334 100644 --- a/src/common/ircuser.cpp +++ b/src/common/ircuser.cpp @@ -28,22 +28,26 @@ #include #include -IrcUser::IrcUser(const QString &hostmask, Network *network) - : SyncableObject(network), +IrcUser::IrcUser(const QString &hostmask, Network *network) : SyncableObject(network), _initialized(false), _nick(nickFromMask(hostmask)), _user(userFromMask(hostmask)), _host(hostFromMask(hostmask)), + _realName(), + _awayMessage(), + _away(false), + _server(), + // _idleTime(QDateTime::currentDateTime()), + _ircOperator(), + _lastAwayMessage(0), _network(network), _codecForEncoding(0), _codecForDecoding(0) { updateObjectName(); - _away = false; } IrcUser::~IrcUser() { - //qDebug() << nick() << "destroyed."; } // ==================== @@ -78,6 +82,28 @@ QString IrcUser::awayMessage() const { return _awayMessage; } +QString IrcUser::server() const { + return _server; +} + +QDateTime IrcUser::idleTime() { + if(QDateTime::currentDateTime().toTime_t() - _idleTimeSet.toTime_t() > 1200) + _idleTime = QDateTime(); + return _idleTime; +} + +QDateTime IrcUser::loginTime() const { + return _loginTime; +} + +QString IrcUser::ircOperator() const { + return _ircOperator; +} + +int IrcUser::lastAwayMessage() const { + return _lastAwayMessage; +} + QString IrcUser::userModes() const { return _userModes; } @@ -124,7 +150,7 @@ QString IrcUser::decodeString(const QByteArray &text) const { return ::decodeString(text, codecForDecoding()); } -QByteArray IrcUser::encodeString(const QString string) const { +QByteArray IrcUser::encodeString(const QString &string) const { if(codecForEncoding()) { return codecForEncoding()->fromUnicode(string); } @@ -162,6 +188,41 @@ void IrcUser::setAwayMessage(const QString &awayMessage) { } } +void IrcUser::setIdleTime(const QDateTime &idleTime) { + if(idleTime.isValid() && _idleTime != idleTime) { + _idleTime = idleTime; + _idleTimeSet = QDateTime::currentDateTime(); + emit idleTimeSet(idleTime); + } +} + +void IrcUser::setLoginTime(const QDateTime &loginTime) { + if(loginTime.isValid() && _loginTime != loginTime) { + _loginTime = loginTime; + emit loginTimeSet(loginTime); + } +} + +void IrcUser::setServer(const QString &server) { + if(!server.isEmpty() && _server != server) { + _server = server; + emit serverSet(server); + } +} + +void IrcUser::setIrcOperator(const QString &ircOperator) { + if(!ircOperator.isEmpty() && _ircOperator != ircOperator) { + _ircOperator = ircOperator; + emit ircOperatorSet(ircOperator); + } +} + +void IrcUser::setLastAwayMessage(const int &lastAwayMessage) { + if(lastAwayMessage > _lastAwayMessage) { + _lastAwayMessage = lastAwayMessage; + emit lastAwayMessageSet(lastAwayMessage); + } +} void IrcUser::setHost(const QString &host) { if(!host.isEmpty() && _host != host) { @@ -179,12 +240,7 @@ void IrcUser::setNick(const QString &nick) { } void IrcUser::updateObjectName() { - QString newName = QString::number(network()->networkId().toInt()) + "/" + _nick; - QString oldName = objectName(); - if(oldName != newName) { - setObjectName(newName); - emit renameObject(oldName, newName); - } + renameObject(QString::number(network()->networkId().toInt()) + "/" + _nick); } void IrcUser::updateHostmask(const QString &mask) { @@ -201,9 +257,8 @@ void IrcUser::joinChannel(IrcChannel *channel) { Q_ASSERT(channel); if(!_channels.contains(channel)) { _channels.insert(channel); - channel->join(this); + channel->joinIrcUsers(this); connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed())); - emit channelJoined(channel->name()); } } @@ -217,6 +272,8 @@ void IrcUser::partChannel(IrcChannel *channel) { disconnect(channel, 0, this, 0); channel->part(this); emit channelParted(channel->name()); + if(_channels.isEmpty() && network()->isMe(this)) + deleteLater(); } } @@ -232,10 +289,10 @@ void IrcUser::partChannel(const QString &channelname) { void IrcUser::channelDestroyed() { // private slot! IrcChannel *channel = static_cast(sender()); - Q_ASSERT(channel); if(_channels.contains(channel)) { _channels.remove(channel); - disconnect(channel, 0, this, 0); + if(_channels.isEmpty()) + deleteLater(); } } @@ -244,23 +301,24 @@ void IrcUser::setUserModes(const QString &modes) { emit userModesSet(modes); } -void IrcUser::addUserMode(const QString &mode) { - if(!_userModes.contains(mode)) { - _userModes += mode; - emit userModeAdded(mode); - } -} +void IrcUser::addUserModes(const QString &modes) { + if(modes.isEmpty()) + return; -void IrcUser::removeUserMode(const QString &mode) { - if(_userModes.contains(mode)) { - _userModes.remove(mode); - emit userModeRemoved(mode); + for(int i = 0; i < modes.count(); i++) { + if(!_userModes.contains(modes[i])) + _userModes += modes[i]; } + + emit userModesAdded(modes); } -void IrcUser::initSetChannels(const QStringList channels) { - foreach(QString channel, channels) { - joinChannel(channel); +void IrcUser::removeUserModes(const QString &modes) { + if(modes.isEmpty()) + return; + + for(int i = 0; i < modes.count(); i++) { + _userModes.remove(modes[i]); } + emit userModesRemoved(modes); } -