This commit is contained in:
2026-09-29 09:40:37 +03:00
parent 441021b9a6
commit 6567e731d1
34 changed files with 57 additions and 709 deletions
+1 -20
View File
@@ -18,12 +18,8 @@ class QNetworkReply;
class QProcess;
class QSaveFile;
class QTimer;
// Состояние распаковки zip. Спрятано в .cpp, чтобы приватный заголовок
// QZipReader не расходился по проекту вместе с этим.
struct ZipExtraction;
// Один файл рантайма Mojang.
struct JavaFileTask
{
QUrl url;
@@ -34,7 +30,6 @@ struct JavaFileTask
int attempts = 0;
};
// Файл в процессе скачивания. Пишем потоком: рантайм — это две сотни мегабайт.
struct JavaActiveDownload
{
JavaFileTask task;
@@ -44,15 +39,6 @@ struct JavaActiveDownload
qint64 received = 0;
};
// Установка сборки Java в <root>/java/<id>. Два разных пути под одним фасадом:
//
// * Temurin отдаёт один архив — качаем, сверяем sha256 и распаковываем;
//
// * Mojang отдаёт манифест с деревом файлов — качаем файлы по отдельности,
// как это делает официальный лаунчер.
//
// Набор геттеров повторяет VersionInstaller: панель загрузки в интерфейсе
// читает их одинаково, независимо от того, кто сейчас работает.
class JavaInstaller : public QObject
{
Q_OBJECT
@@ -67,8 +53,6 @@ public:
QString stage() const { return m_stage; }
QString currentFile() const { return m_currentFile; }
// Байты считаются только на загрузке: на распаковке считать нечего, и панель
// по нулевому итогу сама прячет мегабайты.
qint64 bytesDone() const;
qint64 bytesTotal() const { return m_bytesTotal; }
double fraction() const; // 0..1, либо -1 пока итог неизвестен
@@ -122,7 +106,6 @@ private:
qint64 m_bytesSettled = 0;
qint64 m_bytesTotal = 0;
// Шаги распаковки: у архива — записи внутри него, у Mojang — файлы дерева.
int m_stepsDone = 0;
int m_stepsTotal = 0;
@@ -135,13 +118,11 @@ private:
QTimer *m_progressTimer;
bool m_progressDirty = false;
// Распаковка zip по кускам: держать GUI-поток занятым на всю сотню
// мегабайт нельзя, а поток ради одной операции заводить незачем.
std::unique_ptr<ZipExtraction> m_zip;
QQueue<JavaFileTask> m_queue;
QList<std::shared_ptr<JavaActiveDownload>> m_active;
QList<QPair<QString, QString>> m_links; // {абсолютный путь ссылки, цель}
QList<QPair<QString, QString>> m_links;
bool m_running = false;
bool m_canceling = false;