#pragma once #include #include #include #include class BuildArchiveWorker : public QObject { Q_OBJECT public: explicit BuildArchiveWorker(QObject *parent = nullptr); void requestCancel() { m_cancel.storeRelaxed(1); } void clearCancel() { m_cancel.storeRelaxed(0); } public slots: void archive(const QString &gameDir, const QString &tempZipPath, const QStringList &excludeTop); void clear(const QString &gameDir, const QStringList &keepTop); void restore(const QString &zipPath, const QString &gameDir); void applyPack(const QString &zipPath, const QString &gameDir, const QStringList &removeRelative, const QStringList &forbiddenTop); signals: void progress(int done, int total, const QString ¤tPath); void finished(bool ok, const QString &error); void packEntries(const QStringList &entries); private: bool canceled() const { return m_cancel.loadRelaxed() != 0; } QAtomicInt m_cancel; };