X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fircuser.cpp;h=e911d33441279fab998a8940de36968953562c7c;hp=efa7541557dc327024e8653e9be1c02a68c9631c;hb=a801d1eab5fcb932c88f2e3953e5626083d4ec59;hpb=1ed8c48b0e7d309e1a92c905a19fcb7128b73d3d diff --git a/src/common/ircuser.cpp b/src/common/ircuser.cpp index efa75415..e911d334 100644 --- a/src/common/ircuser.cpp +++ b/src/common/ircuser.cpp @@ -37,7 +37,7 @@ IrcUser::IrcUser(const QString &hostmask, Network *network) : SyncableObject(net _awayMessage(), _away(false), _server(), - _idleTime(QDateTime::currentDateTime()), + // _idleTime(QDateTime::currentDateTime()), _ircOperator(), _lastAwayMessage(0), _network(network), @@ -86,10 +86,16 @@ QString IrcUser::server() const { return _server; } -QDateTime IrcUser::idleTime() const { +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; } @@ -185,10 +191,18 @@ 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; @@ -243,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()); } } @@ -259,7 +272,7 @@ void IrcUser::partChannel(IrcChannel *channel) { disconnect(channel, 0, this, 0); channel->part(this); emit channelParted(channel->name()); - if(_channels.isEmpty()) + if(_channels.isEmpty() && network()->isMe(this)) deleteLater(); } } @@ -278,6 +291,8 @@ void IrcUser::channelDestroyed() { IrcChannel *channel = static_cast(sender()); if(_channels.contains(channel)) { _channels.remove(channel); + if(_channels.isEmpty()) + deleteLater(); } } @@ -286,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); } -