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