diff options
| author | 2010-12-17 01:03:19 +0000 | |
|---|---|---|
| committer | 2010-12-17 01:03:19 +0000 | |
| commit | a4ca06f453b32175d9de97e25c280e692ae3cb55 (patch) | |
| tree | e3438576bb742315ba71211a7056339c0fbe186d | |
| parent | better support for raw 307 (diff) | |
| download | KVIrc-a4ca06f453b32175d9de97e25c280e692ae3cb55.tar.gz KVIrc-a4ca06f453b32175d9de97e25c280e692ae3cb55.tar.bz2 KVIrc-a4ca06f453b32175d9de97e25c280e692ae3cb55.zip | |
Don't allow KviWindow::preprocessMessage to break output
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5201 17fca916-40b9-46aa-a4ea-0a15b648b75c
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp | 1 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_channel.cpp | 34 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_window.cpp | 52 |
3 files changed, 50 insertions, 37 deletions
diff --git a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp index cacc3095b..194ed3c4a 100644 --- a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp +++ b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp @@ -1520,6 +1520,7 @@ namespace KviKvsCoreFunctions if(!szToolTip.isEmpty())KviQString::appendFormatted(szPart,"[!txt]%Q",&szToolTip); QString szLink; KviQString::sprintf(szLink,"\r!%Q\r%Q\r",&szPart,&szLinkText); + KVSCF_pRetBuffer->setString(szLink); return true; } diff --git a/src/kvirc/ui/kvi_channel.cpp b/src/kvirc/ui/kvi_channel.cpp index abd126e78..a582a3035 100644 --- a/src/kvirc/ui/kvi_channel.cpp +++ b/src/kvirc/ui/kvi_channel.cpp @@ -1829,25 +1829,37 @@ bool KviChannel::eventFilter(QObject * o, QEvent * e) void KviChannel::preprocessMessage(QString & szMessage) { + // FIXME: slow + + KviIrcConnectionServerInfo * pServerInfo = serverInfo(); + if(!pServerInfo) + return; + + static QString szNonStandardLinkPrefix = QString::fromAscii("\r!["); + + if(szMessage.contains(szNonStandardLinkPrefix)) + return; // contains a non standard link that may contain spaces, do not break it. + QStringList strings = szMessage.split(" ",QString::KeepEmptyParts); for(QStringList::Iterator it = strings.begin(); it != strings.end(); ++it) { - if((*it).contains('\r')) + QString szTmp = KviMircCntrl::stripControlBytes(*it).trimmed(); + if(szTmp.length() < 1) continue; - QString szTmp = KviMircCntrl::stripControlBytes(*it); + if(szTmp.contains('\r')) + continue; + + // FIXME: Do we REALLY need this ? if(findEntry(*it)) *it = QString("\r!n\r%1\r").arg(*it); - KviIrcConnectionServerInfo * pServerInfo = serverInfo(); - if(pServerInfo) + + if(pServerInfo->supportedChannelTypes().contains(szTmp[0])) { - if(pServerInfo->supportedChannelTypes().contains(szTmp[0])) - { - if((*it) == szTmp) - *it = QString("\r!c\r%1\r").arg(*it); - else - *it = QString("\r!c%1\r%2\r").arg(szTmp, *it); - } + if((*it) == szTmp) + *it = QString("\r!c\r%1\r").arg(*it); + else + *it = QString("\r!c%1\r%2\r").arg(szTmp, *it); } } szMessage = strings.join(" "); diff --git a/src/kvirc/ui/kvi_window.cpp b/src/kvirc/ui/kvi_window.cpp index ec19c0946..7ada04eb8 100644 --- a/src/kvirc/ui/kvi_window.cpp +++ b/src/kvirc/ui/kvi_window.cpp @@ -1276,37 +1276,37 @@ void KviWindow::unhighlight() m_pWindowListItem->unhighlight(); } -/* This messes up a bit: for example it breaks the WHOIS output where - escapes are already present (checking for them here would be an overkill). - This should be eventually done ONLY for remote user message texts - in the server parser. - - Fixed -*/ - void KviWindow::preprocessMessage(QString & szMessage) { - // slow + // FIXME: slow + + if(!m_pConsole) + return; + if(!m_pConsole->connection()) + return; + + static QString szNonStandardLinkPrefix = QString::fromAscii("\r!["); + + if(szMessage.contains(szNonStandardLinkPrefix)) + return; // contains a non standard link that may contain spaces, do not break it. + + // FIXME: This STILL breaks $fmtlink() in certain configurations + QStringList strings = szMessage.split(" "); - for ( QStringList::Iterator it = strings.begin(); it != strings.end(); ++it ) { + for ( QStringList::Iterator it = strings.begin(); it != strings.end(); ++it ) + { QString tmp(*it); - if(tmp.contains('\r')) continue; - tmp = KviMircCntrl::stripControlBytes(tmp); - tmp.trimmed(); - if(m_pConsole) + tmp = KviMircCntrl::stripControlBytes(tmp).trimmed(); + if(tmp.length() < 1) + continue; + if(tmp.contains('\r')) + return; + if(m_pConsole->connection()->serverInfo()->supportedChannelTypes().contains(tmp[0])) { - if(m_pConsole->connection()) - { - if(m_pConsole->connection()->serverInfo()->supportedChannelTypes().contains(tmp[0])) - { - if((*it)==tmp) - { - *it=QString("\r!c\r%1\r").arg(*it); - } else { - *it=QString("\r!c%1\r%2\r").arg(tmp, *it); - } - } - } + if((*it)==tmp) + *it=QString("\r!c\r%1\r").arg(*it); + else + *it=QString("\r!c%1\r%2\r").arg(tmp, *it); } } szMessage=strings.join(" "); |
