BR #117:
authorAlexander von Renteln <phon@quassel-irc.org>
Wed, 12 Mar 2008 11:14:30 +0000 (11:14 +0000)
committerAlexander von Renteln <phon@quassel-irc.org>
Wed, 12 Mar 2008 11:14:30 +0000 (11:14 +0000)
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
src/common/ircuser.cpp
src/common/ircuser.h
src/core/ircserverhandler.cpp

index 7b0ea94..1f794cd 100644 (file)
@@ -614,6 +614,9 @@ QString IrcUserItem::toolTip(int column) const {
     }
     toolTip.append(tr("idling since %1").arg(idleString));
   }
     }
     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()));
 
 
   if(!_ircUser->server().isEmpty()) toolTip.append(tr("server: %1").arg(_ircUser->server()));
 
index ed875e0..e911d33 100644 (file)
@@ -37,7 +37,7 @@ IrcUser::IrcUser(const QString &hostmask, Network *network) : SyncableObject(net
     _awayMessage(),
     _away(false),
     _server(),
     _awayMessage(),
     _away(false),
     _server(),
-    _idleTime(QDateTime::currentDateTime()),
+    // _idleTime(QDateTime::currentDateTime()),
     _ircOperator(),
     _lastAwayMessage(0),
     _network(network),
     _ircOperator(),
     _lastAwayMessage(0),
     _network(network),
@@ -86,10 +86,16 @@ QString IrcUser::server() const {
   return _server;
 }
 
   return _server;
 }
 
-QDateTime IrcUser::idleTime() const {
+QDateTime IrcUser::idleTime() {
+  if(QDateTime::currentDateTime().toTime_t() - _idleTimeSet.toTime_t() > 1200)
+    _idleTime = QDateTime();
   return _idleTime;
 }
 
   return _idleTime;
 }
 
+QDateTime IrcUser::loginTime() const {
+  return _loginTime;
+}
+
 QString IrcUser::ircOperator() const {
   return _ircOperator;
 }
 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;
 void IrcUser::setIdleTime(const QDateTime &idleTime) {
   if(idleTime.isValid() && _idleTime != idleTime) {
     _idleTime = idleTime;
+    _idleTimeSet = QDateTime::currentDateTime();
     emit idleTimeSet(idleTime);
   }
 }
 
     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;
 void IrcUser::setServer(const QString &server) {
   if(!server.isEmpty() && _server != server) {
     _server = server;
index ea1eb3f..6916f0e 100644 (file)
@@ -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(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)
   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;
   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;
   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 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);
   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 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);
   void serverSet(QString server);
   void ircOperatorSet(QString ircOperator);
   void lastAwayMessageSet(int lastAwayMessage);
@@ -149,6 +153,8 @@ private:
   bool _away;
   QString _server;
   QDateTime _idleTime;
   bool _away;
   QString _server;
   QDateTime _idleTime;
+  QDateTime _idleTimeSet;
+  QDateTime _loginTime;
   QString _ircOperator;
   int _lastAwayMessage;
   
   QString _ircOperator;
   int _lastAwayMessage;
   
index 31d5bec..d7eb114 100644 (file)
@@ -505,7 +505,13 @@ void IrcServerHandler::handle317(const QString &prefix, const QList<QByteArray>
     int idleSecs = serverDecode(params[1]).toInt();
     idleSecs *= -1;
     ircuser->setIdleTime(now.addSecs(idleSecs));
     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(" ")));
   }
   } else {
     emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] idle message: %1").arg(userDecode(nick, params).join(" ")));
   }