BR#138: prettifyed the whois output of the core
authorAlexander von Renteln <phon@quassel-irc.org>
Tue, 8 Apr 2008 14:45:16 +0000 (14:45 +0000)
committerAlexander von Renteln <phon@quassel-irc.org>
Tue, 8 Apr 2008 14:45:16 +0000 (14:45 +0000)
src/client/networkmodel.cpp
src/common/util.cpp
src/common/util.h
src/core/ircserverhandler.cpp
src/core/ircserverhandler.h
version.inc

index 5b2f953..9d463f6 100644 (file)
@@ -596,23 +596,7 @@ QString IrcUserItem::toolTip(int column) const {
     QDateTime now = QDateTime::currentDateTime();
     QDateTime idle = _ircUser->idleTime();
     int idleTime = idle.secsTo(now);
-
-    QList< QPair<int, QString> > timeUnit;
-    timeUnit.append(qMakePair(365*60*60, tr("year")));
-    timeUnit.append(qMakePair(24*60*60, tr("day")));
-    timeUnit.append(qMakePair(60*60, tr("h")));
-    timeUnit.append(qMakePair(60, tr("min")));
-    timeUnit.append(qMakePair(1, tr("sec")));
-
-    QString idleString(' ');
-    for(int i=0; i < timeUnit.size(); i++) {
-      int n = idleTime / timeUnit[i].first;
-      if(n > 0) {
-        idleString += QString("%1 %2 ").arg(QString::number(n), timeUnit[i].second);
-      }
-      idleTime = idleTime % timeUnit[i].first;
-    }
-    toolTip.append(tr("idling since %1").arg(idleString));
+    toolTip.append(tr("idling since %1").arg(secondsToString(idleTime)));
   }
   if(_ircUser->loginTime().isValid()) {
     toolTip.append(tr("login time: %1").arg(_ircUser->loginTime().toString()));
index 76a3e0c..4c1a22f 100644 (file)
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
-#include "util.h"
+#include <QCoreApplication>
 #include <QDebug>
 #include <QTextCodec>
 
+#include "util.h"
+
 class QMetaMethod;
 
 QString nickFromMask(QString mask) {
@@ -156,3 +158,23 @@ QDir quasselDir() {
 
   return qDir;
 }
+
+
+QString secondsToString(int timeInSeconds) {
+    QList< QPair<int, QString> > timeUnit;
+    timeUnit.append(qMakePair(365*60*60, QCoreApplication::translate("Quassel::secondsToString()", "year")));
+    timeUnit.append(qMakePair(24*60*60, QCoreApplication::translate("Quassel::secondsToString()", "day")));
+    timeUnit.append(qMakePair(60*60, QCoreApplication::translate("Quassel::secondsToString()", "h")));
+    timeUnit.append(qMakePair(60, QCoreApplication::translate("Quassel::secondsToString()", "min")));
+    timeUnit.append(qMakePair(1, QCoreApplication::translate("Quassel::secondsToString()", "sec")));
+
+    QString returnString;
+    for(int i=0; i < timeUnit.size(); i++) {
+      int n = timeInSeconds / timeUnit[i].first;
+      if(n > 0) {
+        returnString += QString("%1 %2 ").arg(QString::number(n), timeUnit[i].second);
+      }
+      timeInSeconds = timeInSeconds % timeUnit[i].first;
+    }
+    return returnString;
+}
index 0b372b6..5c954b2 100644 (file)
@@ -35,6 +35,8 @@ QString hostFromMask(QString mask);
 bool isChannelName(QString str);
 
 
+QString secondsToString(int timeInSeconds);
+
 //! Take a string and decode it using the specified text codec, recognizing utf8.
 /** This function takes a string and first checks if it is encoded in utf8, in which case it is
  *  decoded appropriately. Otherwise, the specified text codec is used to transform the string.
index d7eb114..5af0c5a 100644 (file)
@@ -451,8 +451,10 @@ void IrcServerHandler::handle311(const QString &prefix, const QList<QByteArray>
     ircuser->setUser(serverDecode(params[1]));
     ircuser->setHost(serverDecode(params[2]));
     ircuser->setRealName(serverDecode(params.last()));
+    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is %2 (%3)") .arg(ircuser->nick()).arg(ircuser->hostmask()).arg(ircuser->realName()));
+  } else {
+    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is %2 (%3)") .arg(serverDecode(params[1])).arg(serverDecode(params[2])).arg(serverDecode(params.last())));
   }
-  emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1") .arg(serverDecode(params).join(" ")));
 }
  
 /*  RPL_WHOISSERVER -  "<nick> <server> :<server info>" */
@@ -462,10 +464,12 @@ void IrcServerHandler::handle312(const QString &prefix, const QList<QByteArray>
   if(ircuser) {
     ircuser->setServer(serverDecode(params[1]));
   }
+
+  QString returnString = tr("%1 is online via %2 (%3)").arg(serverDecode(params[0])).arg(serverDecode(params[1])).arg(serverDecode(params.last()));
   if(_whois) {
-    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" ")));
+    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(returnString));
   } else {
-    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1").arg(serverDecode(params).join(" ")));
+    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1").arg(returnString));
   }
 }
 
@@ -482,7 +486,10 @@ void IrcServerHandler::handle313(const QString &prefix, const QList<QByteArray>
 /*  RPL_WHOWASUSER - "<nick> <user> <host> * :<real name>" */
 void IrcServerHandler::handle314(const QString &prefix, const QList<QByteArray> &params) {
   Q_UNUSED(prefix)
-  emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1").arg(serverDecode(params).join(" ")));
+  QString nick = serverDecode(params[0]);
+  QString hostmask = QString("%1@%2").arg(serverDecode(params[1])).arg(serverDecode(params[2]));
+  QString realName = serverDecode(params.last());
+  emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1 was %2 (%3)").arg(nick).arg(hostmask).arg(realName));
 }
 
 /*  RPL_ENDOFWHO: "<name> :End of WHO list" */
@@ -495,7 +502,6 @@ void IrcServerHandler::handle315(const QString &prefix, const QList<QByteArray>
 
 /*  RPL_WHOISIDLE - "<nick> <integer> :seconds idle" 
    (real life: "<nick> <integer> <integer> :seconds idle, signon time) */
-   //TODO: parse real life message
 void IrcServerHandler::handle317(const QString &prefix, const QList<QByteArray> &params) {
   Q_UNUSED(prefix);
   QString nick = serverDecode(params[0]);
@@ -508,9 +514,9 @@ void IrcServerHandler::handle317(const QString &prefix, const QList<QByteArray>
     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 logged in since %2").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)));
+    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is idling for %2 (%3)").arg(ircuser->nick()).arg(secondsToString(ircuser->idleTime().secsTo(now))).arg(ircuser->idleTime().toString()));
     
   } else {
     emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] idle message: %1").arg(userDecode(nick, params).join(" ")));
@@ -521,12 +527,37 @@ void IrcServerHandler::handle317(const QString &prefix, const QList<QByteArray>
 void IrcServerHandler::handle318(const QString &prefix, const QList<QByteArray> &params) {
   Q_UNUSED(prefix)
   _whois = false;
-  emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" ")));
+  QStringList parameter = serverDecode(params);
+  parameter.removeFirst();
+  emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(parameter.join(" ")));
 }
 
 /*  RPL_WHOISCHANNELS - "<nick> :*( ( "@" / "+" ) <channel> " " )" */
 void IrcServerHandler::handle319(const QString &prefix, const QList<QByteArray> &params) {
   Q_UNUSED(prefix)
+  QString nick = serverDecode(params.first());
+  QStringList op;
+  QStringList voice;
+  QStringList user;
+  foreach (QString channel, serverDecode(params.last()).split(" ")) {
+    if(channel.startsWith("@"))
+       op.append(channel.remove(0,1));
+    else if(channel.startsWith("+"))
+      voice.append(channel.remove(0,1));
+    else
+      user.append(channel);
+  }
+  if(!user.isEmpty()) 
+    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is a user on channels: %2").arg(nick).arg(user.join(" ")));
+  if(!voice.isEmpty()) 
+    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 has voice on channels: %2").arg(nick).arg(voice.join(" ")));
+  if(!op.isEmpty()) 
+    emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is an operator on channels: %2").arg(nick).arg(op.join(" ")));
+}
+
+/*  RPL_WHOISVIRT - "<nick> is identified to services" */
+void IrcServerHandler::handle320(const QString &prefix, const QList<QByteArray> &params) {
+  Q_UNUSED(prefix);
   emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" ")));
 }
 
index 89289fc..562c422 100644 (file)
@@ -55,6 +55,7 @@ public slots:
   void handle317(const QString &prefix, const QList<QByteArray> &params);   // RPL_WHOISIDLE
   void handle318(const QString &prefix, const QList<QByteArray> &params);   // RPL_ENDOFWHOIS
   void handle319(const QString &prefix, const QList<QByteArray> &params);   // RPL_WHOISCHANNELS
+  void handle320(const QString &prefix, const QList<QByteArray> &params);   // RPL_WHOISVIRT (is identified to services)
   void handle331(const QString &prefix, const QList<QByteArray> &params);   // RPL_NOTOPIC
   void handle332(const QString &prefix, const QList<QByteArray> &params);   // RPL_TOPIC
   void handle333(const QString &prefix, const QList<QByteArray> &params);   // Topic set by...
index 6119edc..1dd2a51 100644 (file)
@@ -4,8 +4,8 @@
 { using namespace Global;
 
   quasselVersion = "0.2.0-alpha5-pre";
-  quasselDate = "2008-04-07";
-  quasselBuild = 707;
+  quasselDate = "2008-04-08";
+  quasselBuild = 711;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 642;