From 0cba5eccbdfb50c2cf401f1268cd62ae6f3a93bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Cie=C5=9Blak?= Date: Fri, 18 Aug 2023 12:53:03 +0200 Subject: [PATCH] feat(StatusQ/Utils): Add StringUtils to expose string-related C++ routines So far methods like escapeHtml were available via backend, creating unnecessary dependency on backing in UI components. --- ui/StatusQ/CMakeLists.txt | 4 +++- .../include/StatusQ/stringutilsinternal.h | 19 ++++++++++++++++++ .../src/StatusQ/Core/Utils/StringUtils.qml | 11 ++++++++++ ui/StatusQ/src/StatusQ/Core/Utils/qmldir | 1 + ui/StatusQ/src/plugin.cpp | 3 +++ ui/StatusQ/src/statusq.qrc | 1 + ui/StatusQ/src/stringutilsinternal.cpp | 20 +++++++++++++++++++ 7 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 ui/StatusQ/include/StatusQ/stringutilsinternal.h create mode 100644 ui/StatusQ/src/StatusQ/Core/Utils/StringUtils.qml create mode 100644 ui/StatusQ/src/stringutilsinternal.cpp diff --git a/ui/StatusQ/CMakeLists.txt b/ui/StatusQ/CMakeLists.txt index d91d3b2473..c7194c26cf 100644 --- a/ui/StatusQ/CMakeLists.txt +++ b/ui/StatusQ/CMakeLists.txt @@ -88,19 +88,21 @@ endif() add_library(StatusQ SHARED ${STATUSQ_QRC_COMPILED} - src/plugin.cpp include/StatusQ/QClipboardProxy.h include/StatusQ/modelutilsinternal.h include/StatusQ/permissionutilsinternal.h include/StatusQ/rxvalidator.h include/StatusQ/statussyntaxhighlighter.h include/StatusQ/statuswindow.h + include/StatusQ/stringutilsinternal.h src/QClipboardProxy.cpp src/modelutilsinternal.cpp src/permissionutilsinternal.cpp + src/plugin.cpp src/rxvalidator.cpp src/statussyntaxhighlighter.cpp src/statuswindow.cpp + src/stringutilsinternal.cpp ) set_target_properties(StatusQ PROPERTIES diff --git a/ui/StatusQ/include/StatusQ/stringutilsinternal.h b/ui/StatusQ/include/StatusQ/stringutilsinternal.h new file mode 100644 index 0000000000..e1579bd665 --- /dev/null +++ b/ui/StatusQ/include/StatusQ/stringutilsinternal.h @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +class QJSEngine; +class QQmlEngine; + +class StringUtilsInternal : public QObject +{ + Q_OBJECT + +public: + explicit StringUtilsInternal(QObject* parent = nullptr); + + Q_INVOKABLE QString escapeHtml(const QString &unsafe) const; + + static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine); +}; diff --git a/ui/StatusQ/src/StatusQ/Core/Utils/StringUtils.qml b/ui/StatusQ/src/StatusQ/Core/Utils/StringUtils.qml new file mode 100644 index 0000000000..efbff0a41b --- /dev/null +++ b/ui/StatusQ/src/StatusQ/Core/Utils/StringUtils.qml @@ -0,0 +1,11 @@ +pragma Singleton + +import QtQuick 2.15 + +import StatusQ.Internal 0.1 as Internal + +QtObject { + function escapeHtml(unsafe) { + return Internal.StringUtils.escapeHtml(unsafe) + } +} diff --git a/ui/StatusQ/src/StatusQ/Core/Utils/qmldir b/ui/StatusQ/src/StatusQ/Core/Utils/qmldir index dd1c3e60cd..a20bf6089a 100644 --- a/ui/StatusQ/src/StatusQ/Core/Utils/qmldir +++ b/ui/StatusQ/src/StatusQ/Core/Utils/qmldir @@ -13,4 +13,5 @@ singleton AmountsArithmetic 0.1 AmountsArithmetic.qml singleton Emoji 0.1 Emoji.qml singleton ModelUtils 0.1 ModelUtils.qml singleton OperatorsUtils 0.1 OperatorsUtils.qml +singleton StringUtils 0.1 StringUtils.qml singleton Utils 0.1 Utils.qml diff --git a/ui/StatusQ/src/plugin.cpp b/ui/StatusQ/src/plugin.cpp index 2204640295..11840133fa 100644 --- a/ui/StatusQ/src/plugin.cpp +++ b/ui/StatusQ/src/plugin.cpp @@ -9,6 +9,7 @@ #include "StatusQ/rxvalidator.h" #include "StatusQ/statussyntaxhighlighter.h" #include "StatusQ/statuswindow.h" +#include "StatusQ/stringutilsinternal.h" class StatusQPlugin : public QQmlExtensionPlugin { Q_OBJECT @@ -26,6 +27,8 @@ public: qmlRegisterSingletonType( "StatusQ.Internal", 0, 1, "ModelUtils", &ModelUtilsInternal::qmlInstance); + qmlRegisterSingletonType( + "StatusQ.Internal", 0, 1, "StringUtils", &StringUtilsInternal::qmlInstance); qmlRegisterSingletonType("StatusQ.Internal", 0, 1, "PermissionUtils", [](QQmlEngine *, QJSEngine *) { return new PermissionUtilsInternal; diff --git a/ui/StatusQ/src/statusq.qrc b/ui/StatusQ/src/statusq.qrc index 53e93f4a4e..d8f066aa30 100644 --- a/ui/StatusQ/src/statusq.qrc +++ b/ui/StatusQ/src/statusq.qrc @@ -207,6 +207,7 @@ StatusQ/Core/Utils/ModelUtils.qml StatusQ/Core/Utils/ModelsComparator.qml StatusQ/Core/Utils/ModelChangeTracker.qml + StatusQ/Core/Utils/StringUtils.qml StatusQ/Components/StatusPageIndicator.qml StatusQ/Components/StatusQrCodeScanner.qml StatusQ/Components/StatusOnlineBadge.qml diff --git a/ui/StatusQ/src/stringutilsinternal.cpp b/ui/StatusQ/src/stringutilsinternal.cpp new file mode 100644 index 0000000000..5dccbee3b6 --- /dev/null +++ b/ui/StatusQ/src/stringutilsinternal.cpp @@ -0,0 +1,20 @@ +#include "StatusQ/stringutilsinternal.h" + +StringUtilsInternal::StringUtilsInternal(QObject* parent) + : QObject(parent) +{ +} + +QString StringUtilsInternal::escapeHtml(const QString &unsafe) const +{ + return unsafe.toHtmlEscaped(); +} + +QObject* StringUtilsInternal::qmlInstance(QQmlEngine *engine, + QJSEngine *scriptEngine) +{ + Q_UNUSED(engine); + Q_UNUSED(scriptEngine); + + return new StringUtilsInternal; +}