summary refs log tree commit diff
path: root/src/Utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Utils.cpp')
-rw-r--r--src/Utils.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/Utils.cpp b/src/Utils.cpp

index 8f7e9992..40039179 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp
@@ -3,10 +3,13 @@ #include <QApplication> #include <QDesktopWidget> #include <QSettings> +#include <QXmlStreamReader> #include <cmath> #include <boost/variant.hpp> +#include "Config.h" + using TimelineEvent = mtx::events::collections::TimelineEvents; QString @@ -276,3 +279,51 @@ utils::humanReadableFingerprint(const QString &ed25519) } return fingerprintList.join(" "); } + +QString +utils::linkifyMessage(const QString &body) +{ + QXmlStreamReader xml{"<html>" + body + "</html>"}; + + QString textString; + while (!xml.atEnd() && !xml.hasError()) { + auto t = xml.readNext(); + + switch (t) { + case QXmlStreamReader::Characters: { + auto text = xml.text().toString(); + text.replace(conf::strings::url_regex, conf::strings::url_html); + + textString += text; + break; + } + case QXmlStreamReader::StartDocument: + case QXmlStreamReader::EndDocument: + break; + case QXmlStreamReader::StartElement: { + if (xml.name() == "html") + break; + + textString += "<" + xml.name() + ">"; + break; + } + case QXmlStreamReader::EndElement: { + if (xml.name() == "html") + break; + + textString += "</" + xml.name() + ">"; + break; + } + default: { + break; + } + } + } + + if (xml.hasError()) { + // qWarning() << "error while parsing xml"; + return body; + } + + return textString; +}