2026-09-03 09:16:56 +03:00
|
|
|
# SeasonalPackDownloader
|
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
`seasonalpackdownloader.h`, `seasonalpackdownloader.cpp`
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
Качает один архив сезонной сборки в файл и проверяет sha256. Пак весит сотни мегабайт, поэтому
|
|
|
|
|
пишется потоком через `QSaveFile`, а не собирается в памяти. Битый архив распаковывать поверх
|
|
|
|
|
рабочей `.minecraft` нельзя, поэтому файл появляется на диске только после совпадения хеша.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
Распаковывает пак [BuildSwitcher](BuildSwitcher.md). Экземпляр держит
|
|
|
|
|
[LauncherBackend](LauncherBackend.md), который и вызывает загрузку на шаге Downloading установки
|
|
|
|
|
сезонной сборки.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
## download(url, targetPath, sha256, expectedSize, label)
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
- `targetPath` — `<root>/builds/<id>/.pack-r<ревизия>.zip`. Если файл уже есть, он будет
|
|
|
|
|
перезаписан: недокачанный пак с прошлой попытки не должен дожить до новой.
|
|
|
|
|
- `expectedSize` из каталога используется для прогресса, пока сервер не сообщил настоящий размер.
|
|
|
|
|
- Таймаут — 60 секунд без данных. Повторных попыток нет: если загрузка оборвалась, установку
|
|
|
|
|
нужно начать заново.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
Если загрузка уже идёт, сразу приходит `failed`.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
Сигналы: `started(label)`, `progressChanged()` (не чаще раза в 100 мс), `finished(path)`,
|
|
|
|
|
`failed(label, message)`, `canceled(label)`. Геттеры прогресса такие же, как у других
|
|
|
|
|
установщиков.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
При ошибке и несовпадении хеша файл удаляется. `cancel()` обрывает запрос, и `canceled` приходит
|
|
|
|
|
после его завершения.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
При создании этого документа использовался ИИ.
|