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