add file+dir watcher & gatekeep reloads
C++ / fmt (pull_request) Successful in 5s
JS/TS / lint (pull_request) Successful in 21s
JS/TS / fmt (pull_request) Successful in 20s
Python / lint (pull_request) Successful in 32s
Python / fmt (pull_request) Successful in 34s
Python / test (pull_request) Successful in 58s
Python / typecheck (pull_request) Failing after 58s
Rust / fmt (pull_request) Successful in 43s
Rust / build (pull_request) Successful in 1m48s
C++ / build (pull_request) Successful in 2m36s
Rust / clippy (pull_request) Successful in 1m18s
Python / buildcheck (pull_request) Successful in 2m21s
C++ / clang-tidy (pull_request) Successful in 3m54s

This commit is contained in:
2026-08-14 18:40:50 +02:00
parent bda2c3821e
commit 97ecf68b46
2 changed files with 130 additions and 15 deletions
+17 -5
View File
@@ -1,11 +1,14 @@
#pragma once
#include "configobject.hpp"
#include <qqmlregistration.h>
#include <QTimer>
#include <QtConcurrent/QtConcurrent>
#include <QByteArray>
#include <QFileSystemWatcher>
#include <QFuture>
#include <qtmetamacros.h>
#include <QMutex>
#include <QTimer>
#include <qqmlregistration.h>
#include <QtConcurrent/QtConcurrent>
class QQmlEngine;
class QJSEngine;
@@ -79,14 +82,23 @@ class Config : public ConfigObject {
private Q_SLOTS:
void scheduleSave();
void flushAsync();
void onWatcherEvent(const QString& path);
private:
QString filePath() const;
void writeAtomically(const QByteArray& data);
bool writeAtomically(const QByteArray& data);
void updateWatch();
void loadSync();
void loadAsync();
QTimer m_saveTimer;
QTimer m_reloadTimer;
QFileSystemWatcher m_watcher;
QMutex m_writeMutex;
QByteArray m_lastWriteHash;
bool m_reloadPending = false;
bool m_loading = false;
bool m_firstLoadDone = false;
QFuture<void> m_loadFuture;