feat(hot reloading): Add first version of hot reloading (#674)
Version for: https://github.com/status-im/status-desktop/issues/5690
This commit is contained in:
parent
9738890d9d
commit
40992f6718
|
@ -1,6 +0,0 @@
|
|||
#include "handler.h"
|
||||
|
||||
Handler::Handler(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
#ifndef HANDLER_H
|
||||
#define HANDLER_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class Handler : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Handler(QObject *parent = nullptr);
|
||||
|
||||
signals:
|
||||
void restartQml();
|
||||
};
|
||||
|
||||
#endif // HANDLER_H
|
|
@ -3,15 +3,20 @@
|
|||
#include <QQmlContext>
|
||||
#include <QWindow>
|
||||
#include <QDebug>
|
||||
#include <QDirIterator>
|
||||
|
||||
#include "statuswindow.h"
|
||||
#include "spellchecker.h"
|
||||
|
||||
SandboxApp::SandboxApp(int &argc, char **argv)
|
||||
: QGuiApplication(argc, argv),
|
||||
m_handler(new Handler(this))
|
||||
: QGuiApplication(argc, argv)
|
||||
{
|
||||
connect(m_handler, &Handler::restartQml, this, &SandboxApp::restartEngine, Qt::QueuedConnection);
|
||||
#ifdef QT_DEBUG
|
||||
connect(&m_watcher, &QFileSystemWatcher::directoryChanged, [this](const QString&) {
|
||||
restartEngine();
|
||||
});
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void SandboxApp::startEngine()
|
||||
|
@ -21,13 +26,18 @@ void SandboxApp::startEngine()
|
|||
|
||||
#ifdef QT_DEBUG
|
||||
const QUrl url = QUrl::fromLocalFile(SRC_DIR + QStringLiteral("/main.qml"));
|
||||
m_watcher.addPath(applicationDirPath() + "/../");
|
||||
QDirIterator it(applicationDirPath() + "/../", QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
|
||||
while (it.hasNext()) {
|
||||
if (!it.filePath().isEmpty()) {
|
||||
m_watcher.addPath(it.filePath());
|
||||
}
|
||||
it.next();
|
||||
}
|
||||
#else
|
||||
const QUrl url(QStringLiteral("qrc:/main.qml"));
|
||||
#endif
|
||||
|
||||
m_engine.rootContext()->setContextProperty("app", m_handler);
|
||||
|
||||
|
||||
#ifdef QT_DEBUG
|
||||
m_engine.addImportPath(SRC_DIR + QStringLiteral("/../src"));
|
||||
#else
|
||||
|
@ -44,7 +54,7 @@ void SandboxApp::startEngine()
|
|||
|
||||
void SandboxApp::restartEngine()
|
||||
{
|
||||
const QUrl url(applicationDirPath() + "/../main.qml");
|
||||
const QUrl url = QUrl::fromLocalFile(SRC_DIR + QStringLiteral("/main.qml"));
|
||||
QWindow *rootWindow = qobject_cast<QWindow*>(m_engine.rootObjects().at(0));
|
||||
if (rootWindow) {
|
||||
rootWindow->close();
|
||||
|
|
|
@ -4,6 +4,10 @@
|
|||
#include <QGuiApplication>
|
||||
#include <QQmlApplicationEngine>
|
||||
|
||||
#ifdef QT_DEBUG
|
||||
#include <QFileSystemWatcher>
|
||||
#endif
|
||||
|
||||
#include "handler.h"
|
||||
|
||||
class SandboxApp : public QGuiApplication
|
||||
|
@ -19,6 +23,10 @@ public slots:
|
|||
private:
|
||||
QQmlApplicationEngine m_engine;
|
||||
Handler *m_handler;
|
||||
|
||||
#ifdef QT_DEBUG
|
||||
QFileSystemWatcher m_watcher;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif // SANDBOXAPP_H
|
||||
|
|
Loading…
Reference in New Issue