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 -11
View File
@@ -12,15 +12,11 @@
namespace {
// Пак большой, но идёт с нашего же сервера: минуты простоя без единого байта
// означают, что соединение умерло, а не что файл тяжёлый.
constexpr int kTransferTimeoutMs = 60000;
// Столько же, сколько у остальных установщиков: сигналы прогресса приходят
// пачками, а перерисовывать панель чаще десяти раз в секунду незачем.
constexpr int kProgressIntervalMs = 100;
} // namespace
}
SeasonalPackDownloader::SeasonalPackDownloader(QObject *parent)
: QObject(parent)
@@ -91,15 +87,12 @@ void SeasonalPackDownloader::download(const QUrl &url,
if (chunk.isEmpty())
return;
m_hash.addData(chunk);
// Диск кончился или файл забрали из-под нас: продолжать качать незачем,
// ошибку разберёт обработчик finished.
if (m_file->write(chunk) != chunk.size())
m_reply->abort();
});
connect(m_reply, &QNetworkReply::downloadProgress, this,
[this](qint64 received, qint64 total) {
m_bytesDone = received;
// Размер из каталога может разойтись с реальным — верим серверу.
if (total > 0)
m_bytesTotal = total;
scheduleProgress();
@@ -159,7 +152,6 @@ void SeasonalPackDownloader::cancel()
return;
}
// Запрос ещё не создан — обрывать нечего, отвечаем сразу.
if (m_file)
m_file->cancelWriting();
m_file.reset();
@@ -174,8 +166,6 @@ void SeasonalPackDownloader::fail(const QString &message)
if (m_file)
m_file->cancelWriting();
m_file.reset();
// Обрезанный пак нельзя ни распаковать, ни докачать: следующая попытка
// начнётся с чистого файла.
if (!m_targetPath.isEmpty())
QFile::remove(m_targetPath);
reset();