mirror of
https://github.com/redstrate/Astra.git
synced 2025-04-22 20:47:45 +00:00
Make Dalamud asset downloading more reliable
This uses the complete package which should prevent partial downloads. In the future it should check for the hashes they give us.
This commit is contained in:
parent
c346e848c5
commit
51715ca3be
2 changed files with 19 additions and 26 deletions
|
@ -61,6 +61,7 @@ private:
|
||||||
int m_remoteDalamudAssetVersion = -1;
|
int m_remoteDalamudAssetVersion = -1;
|
||||||
QJsonArray m_remoteDalamudAssetArray;
|
QJsonArray m_remoteDalamudAssetArray;
|
||||||
QString m_remoteDalamudDownloadUrl;
|
QString m_remoteDalamudDownloadUrl;
|
||||||
|
QString m_remoteDalamudAssetPackageUrl;
|
||||||
QString m_remoteCompatibilityToolVersion;
|
QString m_remoteCompatibilityToolVersion;
|
||||||
QString m_remoteDxvkToolVersion;
|
QString m_remoteDxvkToolVersion;
|
||||||
// TODO: hardcoded
|
// TODO: hardcoded
|
||||||
|
|
|
@ -130,6 +130,7 @@ QCoro::Task<bool> AssetUpdater::checkRemoteDalamudAssetVersion()
|
||||||
const QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
|
const QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
|
||||||
|
|
||||||
m_remoteDalamudAssetVersion = doc.object()["version"_L1].toInt();
|
m_remoteDalamudAssetVersion = doc.object()["version"_L1].toInt();
|
||||||
|
m_remoteDalamudAssetPackageUrl = doc.object()["packageUrl"_L1].toString();
|
||||||
m_remoteDalamudAssetArray = doc.object()["assets"_L1].toArray();
|
m_remoteDalamudAssetArray = doc.object()["assets"_L1].toArray();
|
||||||
|
|
||||||
qInfo(ASTRA_LOG) << "Dalamud asset remote version" << m_remoteDalamudAssetVersion;
|
qInfo(ASTRA_LOG) << "Dalamud asset remote version" << m_remoteDalamudAssetVersion;
|
||||||
|
@ -265,36 +266,27 @@ QCoro::Task<bool> AssetUpdater::installDalamudAssets()
|
||||||
{
|
{
|
||||||
Q_EMIT launcher.stageChanged(i18n("Updating Dalamud assets..."));
|
Q_EMIT launcher.stageChanged(i18n("Updating Dalamud assets..."));
|
||||||
|
|
||||||
QFutureSynchronizer<void> synchronizer;
|
const QNetworkRequest request = QNetworkRequest(QUrl(m_remoteDalamudAssetPackageUrl));
|
||||||
|
Utility::printRequest(QStringLiteral("GET"), request);
|
||||||
|
|
||||||
for (const auto &assetObject : m_remoteDalamudAssetArray) {
|
const auto reply = launcher.mgr()->get(request);
|
||||||
const QNetworkRequest assetRequest(QUrl(assetObject.toObject()["url"_L1].toString()));
|
co_await reply;
|
||||||
Utility::printRequest(QStringLiteral("GET"), assetRequest);
|
|
||||||
|
|
||||||
const auto assetReply = launcher.mgr()->get(assetRequest);
|
|
||||||
|
|
||||||
const auto future = QtFuture::connect(assetReply, &QNetworkReply::finished).then([this, assetReply, assetObject] {
|
|
||||||
const QString fileName = assetObject.toObject()["fileName"_L1].toString();
|
|
||||||
const QString dirPath = fileName.left(fileName.lastIndexOf('/'_L1));
|
|
||||||
|
|
||||||
const QString path = m_dalamudAssetDir.absoluteFilePath(dirPath);
|
|
||||||
Utility::createPathIfNeeded(path);
|
|
||||||
|
|
||||||
QFile file(m_dalamudAssetDir.absoluteFilePath(assetObject.toObject()["fileName"_L1].toString()));
|
|
||||||
file.open(QIODevice::WriteOnly);
|
|
||||||
file.write(assetReply->readAll());
|
|
||||||
file.close();
|
|
||||||
});
|
|
||||||
|
|
||||||
synchronizer.addFuture(future);
|
|
||||||
}
|
|
||||||
|
|
||||||
co_await QtConcurrent::run([&synchronizer] {
|
|
||||||
synchronizer.waitForFinished();
|
|
||||||
});
|
|
||||||
|
|
||||||
qInfo(ASTRA_LOG) << "Finished downloading Dalamud assets";
|
qInfo(ASTRA_LOG) << "Finished downloading Dalamud assets";
|
||||||
|
|
||||||
|
QFile file(m_tempDir.filePath(QStringLiteral("dalamud-assets.zip")));
|
||||||
|
file.open(QIODevice::WriteOnly);
|
||||||
|
file.write(reply->readAll());
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
if (!extractZip(m_tempDir.filePath(QStringLiteral("dalamud-assets.zip")), m_dalamudAssetDir.absolutePath())) {
|
||||||
|
qCritical(ASTRA_LOG) << "Failed to install Dalamud assets";
|
||||||
|
Q_EMIT launcher.dalamudError(i18n("Failed to install Dalamud assets."));
|
||||||
|
co_return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: check for file hashes
|
||||||
|
|
||||||
m_profile.setDalamudAssetVersion(m_remoteDalamudAssetVersion);
|
m_profile.setDalamudAssetVersion(m_remoteDalamudAssetVersion);
|
||||||
|
|
||||||
Utility::writeVersion(m_dalamudAssetDir.absoluteFilePath(QStringLiteral("asset.ver")), QString::number(m_remoteDalamudAssetVersion));
|
Utility::writeVersion(m_dalamudAssetDir.absoluteFilePath(QStringLiteral("asset.ver")), QString::number(m_remoteDalamudAssetVersion));
|
||||||
|
|
Loading…
Add table
Reference in a new issue