From aedba5c650d5e626a9d71a5302e6f3198cb4a607 Mon Sep 17 00:00:00 2001 From: James Graham Date: Sat, 5 Oct 2024 17:05:36 +0000 Subject: [PATCH] Strip single

tags inside TextHandler rather than actions handler --- autotests/texthandlertest.cpp | 30 +++++++++++++++--------------- src/actionshandler.cpp | 5 ----- src/texthandler.cpp | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/autotests/texthandlertest.cpp b/autotests/texthandlertest.cpp index dbe0ee98b..4fd8f91f1 100644 --- a/autotests/texthandlertest.cpp +++ b/autotests/texthandlertest.cpp @@ -84,11 +84,11 @@ void TextHandlerTest::initTestCase() void TextHandlerTest::allowedAttributes() { - const QString testInputString1 = QStringLiteral("

Test

"); - const QString testOutputString1 = QStringLiteral("

Test

"); + const QString testInputString1 = QStringLiteral("Test"); + const QString testOutputString1 = QStringLiteral("Test"); // Handle urls where the href has either single (') or double (") quotes. - const QString testInputString2 = QStringLiteral("

linklink

"); - const QString testOutputString2 = QStringLiteral("

linklink

"); + const QString testInputString2 = QStringLiteral("linklink"); + const QString testOutputString2 = QStringLiteral("linklink"); TextHandler testTextHandler; testTextHandler.setData(testInputString1); @@ -116,7 +116,7 @@ void TextHandlerTest::stripDisallowedTags() void TextHandlerTest::stripDisallowedAttributes() { const QString testInputString = QStringLiteral("

Test

"); - const QString testOutputString = QStringLiteral("

Test

"); + const QString testOutputString = QStringLiteral("Test"); TextHandler testTextHandler; testTextHandler.setData(testInputString); @@ -143,8 +143,8 @@ void TextHandlerTest::emptyCodeTags() void TextHandlerTest::sendSimpleStringCase() { - const QString testInputString = QStringLiteral("This data should just be put in a paragraph."); - const QString testOutputString = QStringLiteral("

This data should just be put in a paragraph.

"); + const QString testInputString = QStringLiteral("This data should just be left alone."); + const QString testOutputString = QStringLiteral("This data should just be left alone."); TextHandler testTextHandler; testTextHandler.setData(testInputString); @@ -157,8 +157,8 @@ void TextHandlerTest::sendSingleParaMarkup() const QString testInputString = QStringLiteral( "Text para with **bold**, *italic*, [link](https://kde.org), ![image](mxc://kde.org/aebd3ffd40503e1ef0525bf8f0d60282fec6183e), `inline code`."); const QString testOutputString = QStringLiteral( - "

Text para with bold, italic, link, \"image\", inline code.

"); + "Text para with bold, italic, link, \"image\", inline code."); TextHandler testTextHandler; testTextHandler.setData(testInputString); @@ -184,7 +184,7 @@ void TextHandlerTest::sendMultipleSectionMarkup() void TextHandlerTest::sendBadLinks() { const QString testInputString = QStringLiteral("[link](kde.org), ![image](https://kde.org/aebd3ffd40503e1ef0525bf8f0d60282fec6183e)"); - const QString testOutputString = QStringLiteral("

link, \"image\"

"); + const QString testOutputString = QStringLiteral("link, \"image\""); TextHandler testTextHandler; testTextHandler.setData(testInputString); @@ -221,8 +221,8 @@ void TextHandlerTest::sendCodeClass() void TextHandlerTest::sendCustomEmoji() { const QString testInputString = QStringLiteral(":test:"); - const QString testOutputString = QStringLiteral( - "

\":test:\"

"); + const QString testOutputString = + QStringLiteral("\":test:\""); TextHandler testTextHandler; testTextHandler.setData(testInputString); @@ -235,7 +235,7 @@ void TextHandlerTest::sendCustomEmojiCode_data() QTest::addColumn("testInputString"); QTest::addColumn("testOutputString"); - QTest::newRow("inline") << QStringLiteral("`:test:`") << QStringLiteral("

:test:

"); + QTest::newRow("inline") << QStringLiteral("`:test:`") << QStringLiteral(":test:"); QTest::newRow("block") << QStringLiteral("```\n:test:\n```") << QStringLiteral("
:test:\n
"); } @@ -373,7 +373,7 @@ void TextHandlerTest::receivePlainStripMarkup() void TextHandlerTest::receiveRichUserPill() { const QString testInputString = QStringLiteral("

@alice:example.org

"); - const QString testOutputString = QStringLiteral("

@alice:example.org

"); + const QString testOutputString = QStringLiteral("@alice:example.org"); TextHandler testTextHandler; testTextHandler.setData(testInputString); @@ -384,7 +384,7 @@ void TextHandlerTest::receiveRichUserPill() void TextHandlerTest::receiveRichStrikethrough() { const QString testInputString = QStringLiteral("

Test

"); - const QString testOutputString = QStringLiteral("

Test

"); + const QString testOutputString = QStringLiteral("Test"); TextHandler testTextHandler; testTextHandler.setData(testInputString); diff --git a/src/actionshandler.cpp b/src/actionshandler.cpp index d3d634da4..ae7925166 100644 --- a/src/actionshandler.cpp +++ b/src/actionshandler.cpp @@ -126,11 +126,6 @@ void ActionsHandler::handleMessage(NeoChatRoom *room, QString handledText, ChatB textHandler.setData(handledText); handledText = textHandler.handleSendText(); - if (handledText.count("

"_ls) == 1 && handledText.count("

"_ls) == 1) { - handledText.remove("

"_ls); - handledText.remove("

"_ls); - } - if (handledText.length() == 0) { return; } diff --git a/src/texthandler.cpp b/src/texthandler.cpp index 4fc6004d1..dcfbfc02f 100644 --- a/src/texthandler.cpp +++ b/src/texthandler.cpp @@ -20,6 +20,8 @@ #include "models/customemojimodel.h" #include "utils.h" +using namespace Qt::StringLiterals; + static const QStringList allowedTags = { QStringLiteral("font"), QStringLiteral("del"), QStringLiteral("h1"), QStringLiteral("h2"), QStringLiteral("h3"), QStringLiteral("h4"), QStringLiteral("h5"), QStringLiteral("h6"), QStringLiteral("blockquote"), QStringLiteral("p"), QStringLiteral("a"), QStringLiteral("ul"), @@ -93,6 +95,12 @@ QString TextHandler::handleSendText() m_nextTokenType = nextTokenType(m_dataBuffer, m_pos, m_nextToken, m_nextTokenType); } + + if (outputString.count("

"_L1) == 1 && outputString.count("

"_L1) == 1 && outputString.startsWith("

"_L1) && outputString.endsWith("

"_L1)) { + outputString.remove("

"_L1); + outputString.remove("

"_L1); + } + return outputString; } @@ -170,6 +178,12 @@ TextHandler::handleRecieveRichText(Qt::TextFormat inputFormat, const NeoChatRoom * convert as that is what is needed for Qt::RichText. */ outputString.replace(TextRegex::strikethrough, QStringLiteral("\\1")); + + if (outputString.count("

"_L1) == 1 && outputString.count("

"_L1) == 1 && outputString.startsWith("

"_L1) && outputString.endsWith("

"_L1)) { + outputString.remove("

"_L1); + outputString.remove("

"_L1); + } + return outputString; }