Summary: | display name bugs in chat windows when using msn | ||
---|---|---|---|
Product: | [Unmaintained] kopete | Reporter: | lancelot <lancelot_pro> |
Component: | Chat Window | Assignee: | Kopete Developers <kopete-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | NOR | ||
Version First Reported In: | unspecified | ||
Target Milestone: | --- | ||
Platform: | unspecified | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
lancelot
2006-05-09 15:32:32 UTC
bug in includenickslink SVN commit 553398 by ogoffart: Remove the addNickLinks function, it was completelly wrong and bugged (i don't want to insult his author of course) add the link at the source instead. BUG: 127780 BUG: 127016 M +22 -48 chatmessagepart.cpp M +1 -3 chatmessagepart.h --- branches/kopete/0.12/kopete/kopete/chatwindow/chatmessagepart.cpp #553397:553398 @@ -34,6 +34,7 @@ #include <qregexp.h> #include <qvaluelist.h> #include <qtimer.h> +#include <qstylesheet.h> // KHTML::DOM includes #include <dom/dom_doc.h> @@ -547,40 +548,6 @@ #endif } -const QString ChatMessagePart::addNickLinks( const QString &html ) const -{ - QString retVal = html; - - Kopete::ContactPtrList members = d->manager->members(); - for ( QPtrListIterator<Kopete::Contact> it( members ); it.current(); ++it ) - { - QString nick = (*it)->property( Kopete::Global::Properties::self()->nickName().key() ).value().toString(); - //FIXME: this is really slow in channels with lots of contacts - QString parsed_nick = Kopete::Emoticons::parseEmoticons( nick ); - - if ( nick != parsed_nick ) - { - retVal.replace( QRegExp( QString::fromLatin1("([\\s&;>])%1([\\s&;<:])") - .arg( QRegExp::escape( parsed_nick ) ) ), QString::fromLatin1("\\1%1\\2").arg( nick ) ); - } - if ( nick.length() > 0 && ( retVal.find( nick ) > -1 ) && d->manager->protocol() ) - { - retVal.replace( - QRegExp( QString::fromLatin1("([\\s&;>])(%1)([\\s&;<:])") - .arg( QRegExp::escape( nick ) ) ), - QString::fromLatin1("\\1<a href=\"kopetemessage://%1/?protocolId=%2&accountId=%3\" class=\"KopeteDisplayName\">\\2</a>\\3") - .arg( (*it)->contactId(), d->manager->protocol()->pluginId(), d->manager->account()->accountId() ) - ); - } - } -#if 0 //disabled because it causes crash on exit - Olivier 2006-03-31 - QString nick = d->manager->myself()->property( Kopete::Global::Properties::self()->nickName().key() ).value().toString(); - retVal.replace( QRegExp( QString::fromLatin1("([\\s&;>])%1([\\s&;<:])") - .arg( QRegExp::escape( Kopete::Emoticons::parseEmoticons( nick ) ) ) ), QString::fromLatin1("\\1%1\\2").arg( nick ) ); -#endif - return retVal; -} - void ChatMessagePart::slotRefreshView() { DOM::HTMLElement kopeteNode = document().getElementById( QString::fromUtf8("KopeteStyle") ); @@ -954,10 +921,11 @@ } // Style formatting for messages(incoming, outgoing, status) -QString ChatMessagePart::formatStyleKeywords( const QString &sourceHTML, Kopete::Message &message ) +QString ChatMessagePart::formatStyleKeywords( const QString &sourceHTML, const Kopete::Message &_message ) { + Kopete::Message message=_message; //we will eventually need to modify it before showing it. QString resultHTML = sourceHTML; - QString nick, contactId, service, protocolIcon; + QString nick, contactId, service, protocolIcon, nickLink; if( message.from() ) { @@ -988,18 +956,28 @@ } protocolIcon = KGlobal::iconLoader()->iconPath( iconName, KIcon::Small ); + + nickLink=QString::fromLatin1("<a href=\"kopetemessage://%1/?protocolId=%2&accountId=%3\" class=\"KopeteDisplayName\">") + .arg( QStyleSheet::escape(message.from()->contactId()).replace('"',"""), + QStyleSheet::escape(message.from()->protocol()->pluginId()).replace('"',"""), + QStyleSheet::escape(message.from()->account()->accountId() ).replace('"',""")); } + else + { + nickLink="<a>"; + } + // Replace sender (contact nick) - resultHTML = resultHTML.replace( QString::fromUtf8("%sender%"), nick ); + resultHTML = resultHTML.replace( QString::fromUtf8("%sender%"), nickLink+nick+"</a>" ); // Replace time, by default display only time and display seconds(that was true means). resultHTML = resultHTML.replace( QString::fromUtf8("%time%"), KGlobal::locale()->formatTime(message.timestamp().time(), true) ); // Replace %screenName% (contact ID) - resultHTML = resultHTML.replace( QString::fromUtf8("%senderScreenName%"), contactId ); + resultHTML = resultHTML.replace( QString::fromUtf8("%senderScreenName%"), nickLink+QStyleSheet::escape(contactId)+"</a>" ); // Replace service name (protocol name) - resultHTML = resultHTML.replace( QString::fromUtf8("%service%"), service ); + resultHTML = resultHTML.replace( QString::fromUtf8("%service%"), QStyleSheet::escape(service) ); // Replace protocolIcon (sender statusIcon) - resultHTML = resultHTML.replace( QString::fromUtf8("%senderStatusIcon%"), protocolIcon ); + resultHTML = resultHTML.replace( QString::fromUtf8("%senderStatusIcon%"), QStyleSheet::escape(protocolIcon).replace('"',""") ); // Look for %time{X}% QRegExp timeRegExp("%time\\{([^}]*)\\}%"); @@ -1062,13 +1040,9 @@ { kdDebug(14000) << k_funcinfo << "Map Action message to Status template. " << endl; - QString boldNick = QString::fromUtf8("<b>%1</b> ").arg(nick); - // Don't set the body twice. - if( !message.parsedBody().contains(boldNick) ) - { - QString newBody = boldNick + message.parsedBody(); - message.setBody(newBody, Kopete::Message::ParsedHTML ); - } + QString boldNick = QString::fromUtf8("%1<b>%2</b></a> ").arg(nickLink,nick); + QString newBody = boldNick + message.parsedBody(); + message.setBody(newBody, Kopete::Message::ParsedHTML ); } // Set message direction("rtl"(Right-To-Left) or "ltr"(Left-to-right)) @@ -1109,7 +1083,7 @@ resultHTML = resultHTML.replace( QString::fromUtf8("%message%"), formatMessageBody(message) ); // TODO: %status - resultHTML = addNickLinks( resultHTML ); +// resultHTML = addNickLinks( resultHTML ); return resultHTML; } --- branches/kopete/0.12/kopete/kopete/chatwindow/chatmessagepart.h #553397:553398 @@ -171,8 +171,6 @@ const QString styleHTML() const; - const QString addNickLinks( const QString &html ) const; - Kopete::Contact *contactFromNode( const DOM::Node &n ) const; /** @@ -194,7 +192,7 @@ * * @return the resulting HTML with replaced keywords. */ - QString formatStyleKeywords( const QString &sourceHTML, Kopete::Message &message ); + QString formatStyleKeywords( const QString &sourceHTML, const Kopete::Message &message ); /** * Format(replace) style keywords for header and footers. * For messages, use formatStyleKeywords(const QString &sourceHTML, Kopete::Message &message) instead. |