From e41bf8186ac4ccb99647650d9e23ee8ddd136cbf Mon Sep 17 00:00:00 2001 From: Shane Synan Date: Mon, 13 Jun 2016 18:27:58 -0400 Subject: [PATCH] Show account information in nick tooltips 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 | 46 +++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 64349690..aea48bf8 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -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("

%1

").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 " 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("

%1

").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 " 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()), -- 2.20.1