55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
#pragma once
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include <QJsonObject>
|
|
|
|
class UpdateTransaction
|
|
{
|
|
public:
|
|
UpdateTransaction(const QString& installDir, const QString& updateDir, const QString& fromVersion,
|
|
const QString& toVersion, int manifestId);
|
|
|
|
bool initialize();
|
|
bool resumeExisting(QString* errorMessage = nullptr);
|
|
bool recordVerifiedFiles(const QStringList& changedPaths, const QStringList& obsoletePaths);
|
|
bool backupCurrentFiles();
|
|
bool installStagedFiles(QString* failedPath = nullptr);
|
|
bool markAwaitingBootstrap();
|
|
bool markRollbackRequired(const QString& reason);
|
|
bool markRolledBack();
|
|
bool markPostVerify();
|
|
bool rollback(QString* failedPath = nullptr);
|
|
bool commit();
|
|
bool markFailed(const QString& errorCode, const QString& message);
|
|
|
|
QString transactionId() const;
|
|
QString fromVersion() const;
|
|
QString stagingDir() const;
|
|
QString backupDir() const;
|
|
QStringList obsoletePaths() const;
|
|
QString healthFile() const;
|
|
|
|
static bool recoverInterrupted(const QString& installDir, const QString& updateDir,
|
|
QString* restoredVersion = nullptr,
|
|
QString* errorMessage = nullptr);
|
|
|
|
private:
|
|
bool writeState(const QString& status, const QString& errorCode = QString(),
|
|
const QString& message = QString());
|
|
bool copyOverwrite(const QString& source, const QString& destination) const;
|
|
static bool safeRelativePath(const QString& path);
|
|
|
|
QString m_installDir;
|
|
QString m_updateDir;
|
|
QString m_stateFile;
|
|
QString m_transactionId;
|
|
QString m_fromVersion;
|
|
QString m_toVersion;
|
|
int m_manifestId = 0;
|
|
QString m_stagingDir;
|
|
QString m_backupDir;
|
|
QStringList m_changedPaths;
|
|
QStringList m_obsoletePaths;
|
|
QJsonObject m_state;
|
|
};
|