From dc78c8faa2f4832444268d12a1c5fc8638964a94 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Fri, 25 Aug 2023 12:20:13 +0200 Subject: [PATCH] QmlPreview: introduce RefreshTranslationWorker Change-Id: I327cdd5d869f6cfdd47a826fd42306b8de69aa14 Reviewed-by: Marco Bubke Reviewed-by: Qt CI Patch Build Bot --- .../qmlpreviewconnectionmanager.cpp | 4 +- .../qmlpreview/qmlpreviewconnectionmanager.h | 6 +-- .../qmlpreviewfileontargetfinder.cpp | 2 - .../qmlpreview/qmlpreviewfileontargetfinder.h | 2 - src/plugins/qmlpreview/qmlpreviewplugin.cpp | 11 ++++- src/plugins/qmlpreview/qmlpreviewplugin.h | 6 ++- .../qmlpreview/qmlpreviewruncontrol.cpp | 40 +++++++++++++++++-- src/plugins/qmlpreview/qmlpreviewruncontrol.h | 3 +- 8 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/plugins/qmlpreview/qmlpreviewconnectionmanager.cpp b/src/plugins/qmlpreview/qmlpreviewconnectionmanager.cpp index 358991f2ba0..9b270478597 100644 --- a/src/plugins/qmlpreview/qmlpreviewconnectionmanager.cpp +++ b/src/plugins/qmlpreview/qmlpreviewconnectionmanager.cpp @@ -12,7 +12,6 @@ #include namespace QmlPreview { -namespace Internal { QmlPreviewConnectionManager::QmlPreviewConnectionManager(QObject *parent) : QmlDebug::QmlDebugConnectionManager(parent) @@ -44,7 +43,7 @@ void QmlPreviewConnectionManager::setFpsHandler(QmlPreviewFpsHandler fpsHandler) m_fpsHandler = fpsHandler; } -void QmlPreviewConnectionManager::setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator) +void QmlPreviewConnectionManager::setQmlDebugTranslationClientCreator(QmlDebugTranslationClientFactoryFunction creator) { m_createDebugTranslationClientMethod = creator; } @@ -249,5 +248,4 @@ void QmlPreviewConnectionManager::destroyClients() m_fileSystemWatcher.clear(); } -} // namespace Internal } // namespace QmlPreview diff --git a/src/plugins/qmlpreview/qmlpreviewconnectionmanager.h b/src/plugins/qmlpreview/qmlpreviewconnectionmanager.h index d965d4216a2..6ce92f99ff3 100644 --- a/src/plugins/qmlpreview/qmlpreviewconnectionmanager.h +++ b/src/plugins/qmlpreview/qmlpreviewconnectionmanager.h @@ -17,7 +17,6 @@ class Target; } namespace QmlPreview { -namespace Internal { class QmlPreviewConnectionManager : public QmlDebug::QmlDebugConnectionManager { @@ -30,7 +29,7 @@ public: void setFileLoader(QmlPreviewFileLoader fileLoader); void setFileClassifier(QmlPreviewFileClassifier fileClassifier); void setFpsHandler(QmlPreviewFpsHandler fpsHandler); - void setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator); + void setQmlDebugTranslationClientCreator(QmlDebugTranslationClientFactoryFunction creator); signals: void loadFile(const QString &filename, const QString &changedFile, const QByteArray &contents); @@ -58,8 +57,7 @@ private: QmlPreviewFileLoader m_fileLoader = nullptr; QmlPreviewFileClassifier m_fileClassifier = nullptr; QmlPreviewFpsHandler m_fpsHandler = nullptr; - QmlDebugTranslationClientCreator m_createDebugTranslationClientMethod; + QmlDebugTranslationClientFactoryFunction m_createDebugTranslationClientMethod; }; -} // namespace Internal } // namespace QmlPreview diff --git a/src/plugins/qmlpreview/qmlpreviewfileontargetfinder.cpp b/src/plugins/qmlpreview/qmlpreviewfileontargetfinder.cpp index cf2ae2ef941..027541d77fb 100644 --- a/src/plugins/qmlpreview/qmlpreviewfileontargetfinder.cpp +++ b/src/plugins/qmlpreview/qmlpreviewfileontargetfinder.cpp @@ -14,7 +14,6 @@ #include namespace QmlPreview { -namespace Internal { void QmlPreviewFileOnTargetFinder::setTarget(ProjectExplorer::Target *target) { @@ -96,5 +95,4 @@ QUrl QmlPreviewFileOnTargetFinder::findUrl(const QString &filePath, bool *succes } } -} // namespace Internal } // namespace QmlPreview diff --git a/src/plugins/qmlpreview/qmlpreviewfileontargetfinder.h b/src/plugins/qmlpreview/qmlpreviewfileontargetfinder.h index 4ab4a5a4a82..c0873ebe714 100644 --- a/src/plugins/qmlpreview/qmlpreviewfileontargetfinder.h +++ b/src/plugins/qmlpreview/qmlpreviewfileontargetfinder.h @@ -12,7 +12,6 @@ class Target; } namespace QmlPreview { -namespace Internal { class QmlPreviewFileOnTargetFinder { @@ -27,5 +26,4 @@ private: QPointer m_target; }; -} // namespace Internal } // namespace QmlPreview diff --git a/src/plugins/qmlpreview/qmlpreviewplugin.cpp b/src/plugins/qmlpreview/qmlpreviewplugin.cpp index feec9317b74..2c8f16f53e5 100644 --- a/src/plugins/qmlpreview/qmlpreviewplugin.cpp +++ b/src/plugins/qmlpreview/qmlpreviewplugin.cpp @@ -96,6 +96,9 @@ static std::unique_ptr defaultCreateDebugTranslationC return client; } +static void defaultRefreshTranslationFunction() +{} + class QmlPreviewPluginPrivate : public QObject { public: @@ -146,6 +149,7 @@ QmlPreviewPluginPrivate::QmlPreviewPluginPrivate(QmlPreviewPlugin *parent) m_settings.fileClassifier = &defaultFileClassifier; m_settings.fpsHandler = &defaultFpsHandler; m_settings.createDebugTranslationClientMethod = &defaultCreateDebugTranslationClientMethod; + m_settings.refreshTranslationsFunction = &defaultRefreshTranslationFunction; Core::ActionContainer *menu = Core::ActionManager::actionContainer( Constants::M_BUILDPROJECT); @@ -306,11 +310,16 @@ void QmlPreviewPlugin::setLocaleIsoCode(const QString &localeIsoCode) emit localeIsoCodeChanged(d->m_localeIsoCode); } -void QmlPreviewPlugin::setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator) +void QmlPreviewPlugin::setQmlDebugTranslationClientCreator(QmlDebugTranslationClientFactoryFunction creator) { d->m_settings.createDebugTranslationClientMethod = creator; } +void QmlPreviewPlugin::setRefreshTranslationsFunction(QmlPreviewRefreshTranslationFunction refreshTranslationsFunction) +{ + d->m_settings.refreshTranslationsFunction = refreshTranslationsFunction; +} + void QmlPreviewPlugin::setFileLoader(QmlPreviewFileLoader fileLoader) { if (d->m_settings.fileLoader == fileLoader) diff --git a/src/plugins/qmlpreview/qmlpreviewplugin.h b/src/plugins/qmlpreview/qmlpreviewplugin.h index 4dba793c4e5..30f0eb54f40 100644 --- a/src/plugins/qmlpreview/qmlpreviewplugin.h +++ b/src/plugins/qmlpreview/qmlpreviewplugin.h @@ -25,8 +25,9 @@ using QmlPreviewFileClassifier = bool (*)(const QString &); using QmlPreviewFileLoader = QByteArray (*)(const QString &, bool *); using QmlPreviewFpsHandler = void (*)(quint16[8]); using QmlPreviewRunControlList = QList; -using QmlDebugTranslationClientCreator = +using QmlDebugTranslationClientFactoryFunction = std::function(QmlDebug::QmlDebugConnection *)>; +using QmlPreviewRefreshTranslationFunction = std::function; class QMLPREVIEW_EXPORT QmlPreviewPlugin : public ExtensionSystem::IPlugin { @@ -71,7 +72,8 @@ public: QString localeIsoCode() const; void setLocaleIsoCode(const QString &localeIsoCode); - void setQmlDebugTranslationClientCreator(QmlDebugTranslationClientCreator creator); + void setQmlDebugTranslationClientCreator(QmlDebugTranslationClientFactoryFunction creator); + void setRefreshTranslationsFunction(QmlPreviewRefreshTranslationFunction refreshTranslationsFunction); void previewCurrentFile(); void addPreview(ProjectExplorer::RunControl *preview); diff --git a/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp b/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp index ca43b07a42f..2969e2aa3f6 100644 --- a/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp +++ b/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp @@ -16,19 +16,50 @@ #include #include +#include #include #include #include #include +#include + using namespace ProjectExplorer; using namespace Utils; -using namespace QmlPreview::Internal; namespace QmlPreview { static const QString QmlServerUrl = "QmlServerUrl"; +class RefreshTranslationWorker final : public ProjectExplorer::RunWorker +{ +public: + explicit RefreshTranslationWorker(ProjectExplorer::RunControl *runControl, + const QmlPreviewRunnerSetting &runnerSettings) + : ProjectExplorer::RunWorker(runControl), m_runnerSettings(runnerSettings) + { + setId("RefreshTranslationWorker"); + connect(this, &RunWorker::started, this, &RefreshTranslationWorker::startRefreshTranslationsAsync); + connect(this, &RunWorker::stopped, &m_futureWatcher, &QFutureWatcher::cancel); + } + ~RefreshTranslationWorker() + { + m_futureWatcher.cancel(); + m_futureWatcher.waitForFinished(); + } + +private: + void startRefreshTranslationsAsync() + { + m_futureWatcher.setFuture(Utils::asyncRun([this] { + m_runnerSettings.refreshTranslationsFunction(); + stop(); + })); + } + QmlPreviewRunnerSetting m_runnerSettings; + QFutureWatcher m_futureWatcher; +}; + class QmlPreviewRunner : public ProjectExplorer::RunWorker { Q_OBJECT @@ -51,11 +82,12 @@ private: void start() override; void stop() override; - Internal::QmlPreviewConnectionManager m_connectionManager; + QmlPreviewConnectionManager m_connectionManager; + RefreshTranslationWorker m_refreshTranslationWorker; }; QmlPreviewRunner::QmlPreviewRunner(RunControl *runControl, const QmlPreviewRunnerSetting &settings) - : RunWorker(runControl) + : RunWorker(runControl), m_refreshTranslationWorker(runControl, settings) { setId("QmlPreviewRunner"); m_connectionManager.setFileLoader(settings.fileLoader); @@ -99,6 +131,8 @@ QmlPreviewRunner::QmlPreviewRunner(RunControl *runControl, const QmlPreviewRunne runControl->initiateStop(); }); + + addStartDependency(&m_refreshTranslationWorker); } void QmlPreviewRunner::start() diff --git a/src/plugins/qmlpreview/qmlpreviewruncontrol.h b/src/plugins/qmlpreview/qmlpreviewruncontrol.h index 371ac180f68..8512826280f 100644 --- a/src/plugins/qmlpreview/qmlpreviewruncontrol.h +++ b/src/plugins/qmlpreview/qmlpreviewruncontrol.h @@ -16,7 +16,8 @@ struct QmlPreviewRunnerSetting QmlPreviewFpsHandler fpsHandler; float zoomFactor = -1.0; QString language; - QmlDebugTranslationClientCreator createDebugTranslationClientMethod; + QmlDebugTranslationClientFactoryFunction createDebugTranslationClientMethod; + QmlPreviewRefreshTranslationFunction refreshTranslationsFunction; }; class QmlPreviewRunWorkerFactory final : public ProjectExplorer::RunWorkerFactory