Correct issue where messages were over-trimmed
authorDaniel Silverstone <daniel.silverstone@codethink.co.uk>
Wed, 7 Feb 2018 10:51:55 +0000 (10:51 +0000)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 5 Apr 2018 21:39:27 +0000 (23:39 +0200)
In an attempt to correct a problem with quasseldroid multiline
messages (97a9b1646bb0d6362cef14bac3a577481cc01e49) the core started
trimming leading whitespace from lines. This broke pasting of things
like formatted code.

This commit ensures that only the splitting is done, and that we skip
empty lines when handling /SAY since they sometimes cause issues on
networks and the clients which split client-side already skip empty
lines.

Closes GH-331.

src/core/coreuserinputhandler.cpp

index 755e64a..8d35fec 100644 (file)
@@ -460,8 +460,7 @@ void CoreUserInputHandler::handleMe(const BufferInfo &bufferInfo, const QString
     QStringList messages = msg.split(QCharLF);
 
     foreach (auto message, messages) {
     QStringList messages = msg.split(QCharLF);
 
     foreach (auto message, messages) {
-        // Handle each separated message independently, ignoring any carriage returns
-        message = message.trimmed();
+        // Handle each separated message independently
         coreNetwork()->coreSession()->ctcpParser()->query(coreNetwork(), bufferInfo.bufferName(),
                                                           "ACTION", message);
         emit displayMsg(Message::Action, bufferInfo.type(), bufferInfo.bufferName(), message,
         coreNetwork()->coreSession()->ctcpParser()->query(coreNetwork(), bufferInfo.bufferName(),
                                                           "ACTION", message);
         emit displayMsg(Message::Action, bufferInfo.type(), bufferInfo.bufferName(), message,
@@ -532,8 +531,7 @@ void CoreUserInputHandler::handleNotice(const BufferInfo &bufferInfo, const QStr
     QStringList messages = msg.section(' ', 1).split(QCharLF);
 
     foreach (auto message, messages) {
     QStringList messages = msg.section(' ', 1).split(QCharLF);
 
     foreach (auto message, messages) {
-        // Handle each separated message independently, ignoring any carriage returns
-        message = message.trimmed();
+        // Handle each separated message independently
         params.clear();
         params << serverEncode(bufferName) << channelEncode(bufferInfo.bufferName(), message);
         emit putCmd("NOTICE", params);
         params.clear();
         params << serverEncode(bufferName) << channelEncode(bufferInfo.bufferName(), message);
         emit putCmd("NOTICE", params);
@@ -607,8 +605,7 @@ void CoreUserInputHandler::handleQuery(const BufferInfo &bufferInfo, const QStri
     QStringList messages = msg.section(' ', 1).split(QCharLF);
 
     foreach (auto message, messages) {
     QStringList messages = msg.section(' ', 1).split(QCharLF);
 
     foreach (auto message, messages) {
-        // Handle each separated message independently, ignoring any carriage returns
-        message = message.trimmed();
+        // Handle each separated message independently
         if (message.isEmpty()) {
             emit displayMsg(Message::Server, BufferInfo::QueryBuffer, target,
                             tr("Starting query with %1").arg(target), network()->myNick(),
         if (message.isEmpty()) {
             emit displayMsg(Message::Server, BufferInfo::QueryBuffer, target,
                             tr("Starting query with %1").arg(target), network()->myNick(),
@@ -656,11 +653,10 @@ void CoreUserInputHandler::handleSay(const BufferInfo &bufferInfo, const QString
 
     // Split apart messages at line feeds.  The IRC protocol uses those to separate commands, so
     // they need to be split into multiple messages.
 
     // Split apart messages at line feeds.  The IRC protocol uses those to separate commands, so
     // they need to be split into multiple messages.
-    QStringList messages = msg.split(QCharLF);
+    QStringList messages = msg.split(QCharLF, QString::SkipEmptyParts);
 
     foreach (auto message, messages) {
 
     foreach (auto message, messages) {
-        // Handle each separated message independently, ignoring any carriage returns
-        message = message.trimmed();
+        // Handle each separated message independently
 #ifdef HAVE_QCA2
         putPrivmsg(bufferInfo.bufferName(), message, encodeFunc,
                    network()->cipher(bufferInfo.bufferName()));
 #ifdef HAVE_QCA2
         putPrivmsg(bufferInfo.bufferName(), message, encodeFunc,
                    network()->cipher(bufferInfo.bufferName()));