seasonal builds

This commit is contained in:
2026-08-31 00:59:14 +03:00
parent 4689e59b5a
commit c25e071b29
17 changed files with 2312 additions and 18 deletions
+35 -1
View File
@@ -37,6 +37,26 @@ public:
int toBuildId,
const QString &toName,
const QString &gameDir);
// Докатывает пак сезонной сборки поверх содержимого .minecraft. Вызывается
// только для уже активной сборки: пак ложится на то, что сейчас разложено,
// а не внутрь чужого архива.
//
// note — непрозрачные данные вызывающей стороны: они переживают перезапуск
// вместе с отметкой о незавершённой операции и возвращаются через
// lastPackNote(), когда раскатка доиграна. Сам переключатель в них не
// заглядывает.
void applyPack(int buildId,
const QString &buildName,
const QString &packZipPath,
const QStringList &removeRelative,
const QJsonObject &note,
const QString &gameDir);
// Что принёс последний успешно раскатанный пак и с чем он пришёл.
QStringList lastPackEntries() const { return m_lastPackEntries; }
QJsonObject lastPackNote() const { return m_lastPackNote; }
void cancel();
// Сборку удалили: убираем её архив и запись о нём. Возвращает false, если
@@ -58,17 +78,23 @@ signals:
void failed(int toBuildId, const QString &message, bool gameDirIntact);
private:
enum State { Idle, Archiving, Clearing, Restoring };
enum State { Idle, Archiving, Clearing, Restoring, Applying };
// Сигналы к рабочему объекту в другом потоке.
void requestArchive(const QString &gameDir, const QString &tempZip, const QStringList &exclude);
void requestClear(const QString &gameDir, const QStringList &keep);
void requestRestore(const QString &zipPath, const QString &gameDir);
void requestApplyPack(const QString &zipPath,
const QString &gameDir,
const QStringList &remove);
void onWorkerFinished(bool ok, const QString &error);
void onWorkerProgress(int done, int total, const QString &currentPath);
void commitArchive();
void beginApplying();
void finishApplying();
void resumeApplying(const QJsonObject &index, const QString &gameDir);
void beginClearing();
void beginRestoring();
void finish();
@@ -97,4 +123,12 @@ private:
QString m_toName;
QString m_gameDir;
QString m_tempZip;
// Раскатка пака: путь к архиву, список уходящих файлов и данные вызывающей
// стороны, которые надо вернуть по завершении.
QString m_packPath;
QStringList m_packRemove;
QJsonObject m_packNote;
QStringList m_lastPackEntries;
QJsonObject m_lastPackNote;
};