From a801d1eab5fcb932c88f2e3953e5626083d4ec59 Mon Sep 17 00:00:00 2001 From: Alexander von Renteln Date: Wed, 12 Mar 2008 11:14:30 +0000 Subject: [PATCH 1/1] BR #117: idling time information will now only be available if it is not too old users "logged in" time is now available --- src/client/networkmodel.cpp | 3 +++ src/common/ircuser.cpp | 18 ++++++++++++++++-- src/common/ircuser.h | 8 +++++++- src/core/ircserverhandler.cpp | 8 +++++++- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 7b0ea946..1f794cd1 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -614,6 +614,9 @@ QString IrcUserItem::toolTip(int column) const { } toolTip.append(tr("idling since %1").arg(idleString)); } + if(_ircUser->loginTime().isValid()) { + toolTip.append(tr("login time: %1").arg(_ircUser->loginTime().toString())); + } if(!_ircUser->server().isEmpty()) toolTip.append(tr("server: %1").arg(_ircUser->server())); diff --git a/src/common/ircuser.cpp b/src/common/ircuser.cpp index ed875e03..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; diff --git a/src/common/ircuser.h b/src/common/ircuser.h index ea1eb3f6..6916f0eb 100644 --- a/src/common/ircuser.h +++ b/src/common/ircuser.h @@ -43,6 +43,7 @@ class IrcUser : public SyncableObject { Q_PROPERTY(bool away READ isAway WRITE setAway STORED false) Q_PROPERTY(QString awayMessage READ awayMessage WRITE setAwayMessage STORED false) Q_PROPERTY(QDateTime idleTime READ idleTime WRITE setIdleTime STORED false) + Q_PROPERTY(QDateTime loginTime READ loginTime WRITE setLoginTime STORED false) Q_PROPERTY(QString server READ server WRITE setServer STORED false) Q_PROPERTY(QString ircOperator READ ircOperator WRITE setIrcOperator STORED false) Q_PROPERTY(int lastAwayMessage READ lastAwayMessage WRITE setLastAwayMessage STORED false) @@ -61,7 +62,8 @@ public: QString hostmask() const; bool isAway() const; QString awayMessage() const; - QDateTime idleTime() const; + QDateTime idleTime(); + QDateTime loginTime() const; QString server() const; QString ircOperator() const; int lastAwayMessage() const; @@ -90,6 +92,7 @@ public slots: void setAway(const bool &away); void setAwayMessage(const QString &awayMessage); void setIdleTime(const QDateTime &idleTime); + void setLoginTime(const QDateTime &loginTime); void setServer(const QString &server); void setIrcOperator(const QString &ircOperator); void setLastAwayMessage(const int &lastAwayMessage); @@ -113,6 +116,7 @@ signals: void awaySet(bool away); void awayMessageSet(QString awayMessage); void idleTimeSet(QDateTime idleTime); + void loginTimeSet(QDateTime loginTime); void serverSet(QString server); void ircOperatorSet(QString ircOperator); void lastAwayMessageSet(int lastAwayMessage); @@ -149,6 +153,8 @@ private: bool _away; QString _server; QDateTime _idleTime; + QDateTime _idleTimeSet; + QDateTime _loginTime; QString _ircOperator; int _lastAwayMessage; diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index 31d5bec8..d7eb114c 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -505,7 +505,13 @@ void IrcServerHandler::handle317(const QString &prefix, const QList int idleSecs = serverDecode(params[1]).toInt(); idleSecs *= -1; ircuser->setIdleTime(now.addSecs(idleSecs)); - emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is idling for %2 seconds").arg(ircuser->nick()).arg(ircuser->idleTime().secsTo(now))); + if(params.size()>3) { + int loginTime = serverDecode(params[2]).toInt(); + ircuser->setLoginTime(QDateTime::fromTime_t(loginTime)); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is logged in since %2 seconds").arg(ircuser->nick()).arg(ircuser->loginTime().toString())); + } + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is idling for %2").arg(ircuser->nick()).arg(ircuser->idleTime().secsTo(now))); + } else { emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] idle message: %1").arg(userDecode(nick, params).join(" "))); } -- 2.20.1