Show account information in nick tooltips 198/head
authorShane Synan <digitalcircuit36939@gmail.com>
Mon, 13 Jun 2016 22:27:58 +0000 (18:27 -0400)
committerShane Synan <digitalcircuit36939@gmail.com>
Mon, 13 Jun 2016 22:28:19 +0000 (18:28 -0400)
Add row for account in tooltip based on IrcUser->account().  If not
supported, it's ignored.  Otherwise, will either show the account
name if logged in, or "Not logged in" if known to be logged out.

When account() information is available, hide the Whois account reply
as it's redundant, and might be out-of-date.

src/client/networkmodel.cpp

index 6434969..aea48bf 100644 (file)
@@ -569,12 +569,33 @@ QString QueryBufferItem::toolTip(int column) const
                    NetworkItem::escapeHTML(_ircUser->suserHost()),
                    !_ircUser->suserHost().isEmpty());
         }
+
+        // Keep track of whether or not the account information's been added.  Don't show it twice.
+        bool accountAdded = false;
+        if(!_ircUser->account().isEmpty()) {
+            // IRCv3 account-notify is supported by the core and IRC server.
+            // Assume logged out (seems to be more common)
+            QString accountHTML = QString("<p class='italic'>%1</p>").arg(tr("Not logged in"));
+
+            // If account is logged in, replace with the escaped account name.
+            if (_ircUser->account() != "*") {
+                accountHTML = NetworkItem::escapeHTML(_ircUser->account());
+            }
+            addRow(NetworkItem::escapeHTML(tr("Account"), true),
+                   accountHTML,
+                   true);
+            // Mark the row as added
+            accountAdded = true;
+        }
         // whoisServiceReply may return "<nick> is identified for this nick", which should be translated.
         // See https://www.alien.net.au/irc/irc2numerics.html
         if(_ircUser->whoisServiceReply().endsWith("identified for this nick")) {
             addRow(NetworkItem::escapeHTML(tr("Account"), true),
                    NetworkItem::escapeHTML(tr("Identified for this nick")),
-                   true);
+                   !accountAdded);
+            // Don't add the account row again if information's already added via account-notify
+            // Mark the row as added
+            accountAdded = true;
         } else {
             addRow(NetworkItem::escapeHTML(tr("Service Reply"), true),
                    NetworkItem::escapeHTML(_ircUser->whoisServiceReply()),
@@ -1100,12 +1121,33 @@ QString IrcUserItem::toolTip(int column) const
                NetworkItem::escapeHTML(_ircUser->suserHost()),
                !_ircUser->suserHost().isEmpty());
     }
+
+    // Keep track of whether or not the account information's been added.  Don't show it twice.
+    bool accountAdded = false;
+    if(!_ircUser->account().isEmpty()) {
+        // IRCv3 account-notify is supported by the core and IRC server.
+        // Assume logged out (seems to be more common)
+        QString accountHTML = QString("<p class='italic'>%1</p>").arg(tr("Not logged in"));
+
+        // If account is logged in, replace with the escaped account name.
+        if (_ircUser->account() != "*") {
+            accountHTML = NetworkItem::escapeHTML(_ircUser->account());
+        }
+        addRow(NetworkItem::escapeHTML(tr("Account"), true),
+               accountHTML,
+               true);
+        // Mark the row as added
+        accountAdded = true;
+    }
     // whoisServiceReply may return "<nick> is identified for this nick", which should be translated.
     // See https://www.alien.net.au/irc/irc2numerics.html
     if(_ircUser->whoisServiceReply().endsWith("identified for this nick")) {
         addRow(NetworkItem::escapeHTML(tr("Account"), true),
                NetworkItem::escapeHTML(tr("Identified for this nick")),
-               true);
+               !accountAdded);
+        // Don't add the account row again if information's already added via account-notify
+        // Mark the row as added
+        accountAdded = true;
     } else {
         addRow(NetworkItem::escapeHTML(tr("Service Reply"), true),
                NetworkItem::escapeHTML(_ircUser->whoisServiceReply()),