diff --git a/launcher/config.kcfg b/launcher/config.kcfg
index 1198fb3..b7c2fd6 100644
--- a/launcher/config.kcfg
+++ b/launcher/config.kcfg
@@ -28,7 +28,7 @@ SPDX-License-Identifier: CC0-1.0
false
- goatcorp.github.io
+ kamori.goats.dev
ffxiv.com
diff --git a/launcher/include/assetupdater.h b/launcher/include/assetupdater.h
index 8c16012..d3601f8 100644
--- a/launcher/include/assetupdater.h
+++ b/launcher/include/assetupdater.h
@@ -30,9 +30,10 @@ private:
QCoro::Task<> installDalamud();
QCoro::Task<> installRuntime();
- [[nodiscard]] QUrl dalamudVersionManifestUrl(Profile::DalamudChannel channel) const;
- [[nodiscard]] QUrl dalamudLatestPackageUrl(Profile::DalamudChannel channel) const;
+ [[nodiscard]] QUrl dalamudVersionManifestUrl() const;
[[nodiscard]] QUrl dalamudAssetManifestUrl() const;
+ [[nodiscard]] QUrl dotnetRuntimePackageUrl(const QString &version) const;
+ [[nodiscard]] QUrl dotnetDesktopPackageUrl(const QString &version) const;
LauncherCore &launcher;
@@ -50,6 +51,7 @@ private:
int remoteDalamudAssetVersion = -1;
QJsonArray remoteDalamudAssetArray;
+ QString remoteDalamudDownloadUrl;
Profile &m_profile;
};
diff --git a/launcher/include/profile.h b/launcher/include/profile.h
index 8c9d767..e662643 100644
--- a/launcher/include/profile.h
+++ b/launcher/include/profile.h
@@ -53,7 +53,7 @@ public:
};
Q_ENUM(WineType)
- enum class DalamudChannel { Stable, Staging, Net5 };
+ enum class DalamudChannel { Stable, Staging };
Q_ENUM(DalamudChannel)
enum class DalamudInjectMethod { Entrypoint, DLLInject };
diff --git a/launcher/src/assetupdater.cpp b/launcher/src/assetupdater.cpp
index 89fd756..f83253b 100644
--- a/launcher/src/assetupdater.cpp
+++ b/launcher/src/assetupdater.cpp
@@ -2,6 +2,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
#include "assetupdater.h"
+#include "astra_log.h"
#include "utility.h"
#include
@@ -15,9 +16,6 @@
#include
#include
-const QString dotnetRuntimePackageURL = QStringLiteral("https://dotnetcli.azureedge.net/dotnet/Runtime/%1/dotnet-runtime-%1-win-x64.zip");
-const QString dotnetDesktopPackageURL = QStringLiteral("https://dotnetcli.azureedge.net/dotnet/WindowsDesktop/%1/windowsdesktop-runtime-%1-win-x64.zip");
-
AssetUpdater::AssetUpdater(Profile &profile, LauncherCore &launcher, QObject *parent)
: QObject(parent)
, launcher(launcher)
@@ -33,7 +31,7 @@ QCoro::Task<> AssetUpdater::update()
co_return;
}
- qInfo() << "Starting asset update sequence...";
+ qInfo(ASTRA_LOG) << "Checking for asset updates...";
dataDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
dalamudDir = dataDir.absoluteFilePath(QStringLiteral("dalamud"));
@@ -65,15 +63,15 @@ QCoro::Task<> AssetUpdater::checkRemoteDalamudAssetVersion()
// TODO: handle asset failure
const QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
- remoteDalamudAssetVersion = doc.object()[QLatin1String("Version")].toInt();
- remoteDalamudAssetArray = doc.object()[QLatin1String("Assets")].toArray();
+ remoteDalamudAssetVersion = doc.object()[QLatin1String("version")].toInt();
+ remoteDalamudAssetArray = doc.object()[QLatin1String("assets")].toArray();
- qInfo() << "Dalamud asset remote version" << remoteDalamudAssetVersion;
- qInfo() << "Dalamud asset local version" << m_profile.dalamudAssetVersion();
+ qInfo(ASTRA_LOG) << "Dalamud asset remote version" << remoteDalamudAssetVersion;
+ qInfo(ASTRA_LOG) << "Dalamud asset local version" << m_profile.dalamudAssetVersion();
// dalamud assets
if (remoteDalamudAssetVersion != m_profile.dalamudAssetVersion()) {
- qInfo() << "Dalamud assets out of date.";
+ qInfo(ASTRA_LOG) << "Dalamud assets out of date";
co_await installDalamudAssets();
}
@@ -81,7 +79,12 @@ QCoro::Task<> AssetUpdater::checkRemoteDalamudAssetVersion()
QCoro::Task<> AssetUpdater::checkRemoteDalamudVersion()
{
- const QNetworkRequest request(dalamudVersionManifestUrl(m_profile.dalamudChannel()));
+ QUrl url(dalamudVersionManifestUrl());
+
+ QUrlQuery query;
+ query.addQueryItem(QStringLiteral("track"), m_profile.dalamudChannelName());
+
+ const QNetworkRequest request(url);
Utility::printRequest(QStringLiteral("GET"), request);
remoteDalamudVersion.clear();
@@ -95,34 +98,19 @@ QCoro::Task<> AssetUpdater::checkRemoteDalamudVersion()
co_return;
}
- const QByteArray str = reply->readAll();
+ const QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
+ remoteDalamudVersion = doc[QLatin1String("assemblyVersion")].toString();
+ remoteRuntimeVersion = doc[QLatin1String("runtimeVersion")].toString();
+ remoteDalamudDownloadUrl = doc[QLatin1String("downloadUrl")].toString();
- // for some godforsaken reason, the version string comes back as raw
- // bytes, ex: \xFF\xFE{\x00\"\x00""A\x00s\x00s\x00""e\x00m\x00 so we
- // start at the first character of the json '{' and work our way up.
- QString reassmbled;
- for (int i = static_cast(str.indexOf('{')); i < str.size(); i++) {
- char t = str[i];
- if (QChar(t).isPrint())
- reassmbled += t;
- }
-
- const QJsonDocument doc = QJsonDocument::fromJson(reassmbled.toUtf8());
- remoteDalamudVersion = doc[QLatin1String("AssemblyVersion")].toString();
- remoteRuntimeVersion = doc[QLatin1String("RuntimeVersion")].toString();
-
- qInfo() << "Latest Dalamud version reported:" << remoteDalamudVersion << "local:" << m_profile.dalamudVersion();
- qInfo() << "Latest NET runtime reported:" << remoteRuntimeVersion;
+ qInfo(ASTRA_LOG) << "Latest available Dalamud version:" << remoteDalamudVersion << "local:" << m_profile.dalamudVersion();
+ qInfo(ASTRA_LOG) << "Latest available NET runtime:" << remoteRuntimeVersion;
if (remoteDalamudVersion != m_profile.dalamudVersion()) {
- qInfo() << "Downloading Dalamud...";
-
co_await installDalamud();
}
if (m_profile.runtimeVersion() != remoteRuntimeVersion) {
- qInfo() << "Downloading Runtime...";
-
co_await installRuntime();
}
}
@@ -134,13 +122,13 @@ QCoro::Task<> AssetUpdater::installDalamudAssets()
QFutureSynchronizer synchronizer;
for (const auto &assetObject : remoteDalamudAssetArray) {
- const QNetworkRequest assetRequest(assetObject.toObject()[QLatin1String("Url")].toString());
+ const QNetworkRequest assetRequest(assetObject.toObject()[QLatin1String("url")].toString());
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()[QLatin1String("FileName")].toString();
+ const QString fileName = assetObject.toObject()[QLatin1String("fileName")].toString();
const QString dirPath = fileName.left(fileName.lastIndexOf(QLatin1Char('/')));
const QString path = dalamudAssetDir.absoluteFilePath(dirPath);
@@ -148,7 +136,7 @@ QCoro::Task<> AssetUpdater::installDalamudAssets()
if (!QDir().exists(path))
QDir().mkpath(path);
- QFile file(dalamudAssetDir.absoluteFilePath(assetObject.toObject()[QLatin1String("FileName")].toString()));
+ QFile file(dalamudAssetDir.absoluteFilePath(assetObject.toObject()[QLatin1String("fileName")].toString()));
file.open(QIODevice::WriteOnly);
file.write(assetReply->readAll());
file.close();
@@ -161,7 +149,7 @@ QCoro::Task<> AssetUpdater::installDalamudAssets()
synchronizer.waitForFinished();
});
- qInfo() << "Finished downloading Dalamud assets.";
+ qInfo(ASTRA_LOG) << "Finished downloading Dalamud assets";
m_profile.setDalamudAssetVersion(remoteDalamudAssetVersion);
@@ -175,13 +163,13 @@ QCoro::Task<> AssetUpdater::installDalamud()
{
Q_EMIT launcher.stageChanged(i18n("Updating Dalamud..."));
- const QNetworkRequest request(dalamudLatestPackageUrl(chosenChannel));
+ const QNetworkRequest request(remoteDalamudDownloadUrl);
Utility::printRequest(QStringLiteral("GET"), request);
const auto reply = launcher.mgr->get(request);
co_await reply;
- qInfo() << "Dalamud finished downloading!";
+ qInfo(ASTRA_LOG) << "Finished downloading Dalamud";
QFile file(tempDir.path() + QStringLiteral("/latest.zip"));
file.open(QIODevice::WriteOnly);
@@ -193,7 +181,7 @@ QCoro::Task<> AssetUpdater::installDalamud()
if (!success) {
// TODO: handle failure here
- qInfo() << "Failed to install Dalamud!";
+ qCritical(ASTRA_LOG) << "Failed to install Dalamud!";
}
m_profile.setDalamudVersion(remoteDalamudVersion);
@@ -205,13 +193,13 @@ QCoro::Task<> AssetUpdater::installRuntime()
// core
{
- const QNetworkRequest request(dotnetRuntimePackageURL.arg(remoteRuntimeVersion));
+ const QNetworkRequest request(dotnetRuntimePackageUrl(remoteRuntimeVersion));
Utility::printRequest(QStringLiteral("GET"), request);
const auto reply = launcher.mgr->get(request);
co_await reply;
- qInfo() << "Dotnet-core finished downloading!";
+ qInfo(ASTRA_LOG) << "Finished downloading Dotnet-core";
QFile file(tempDir.path() + QStringLiteral("/dotnet-core.zip"));
file.open(QIODevice::WriteOnly);
@@ -221,13 +209,13 @@ QCoro::Task<> AssetUpdater::installRuntime()
// desktop
{
- const QNetworkRequest request(dotnetDesktopPackageURL.arg(remoteRuntimeVersion));
+ const QNetworkRequest request(dotnetDesktopPackageUrl(remoteRuntimeVersion));
Utility::printRequest(QStringLiteral("GET"), request);
const auto reply = launcher.mgr->get(request);
co_await reply;
- qInfo() << "Dotnet-desktop finished downloading!";
+ qInfo(ASTRA_LOG) << "Finished downloading Dotnet-desktop";
QFile file(tempDir.path() + QStringLiteral("/dotnet-desktop.zip"));
file.open(QIODevice::WriteOnly);
@@ -239,7 +227,7 @@ QCoro::Task<> AssetUpdater::installRuntime()
success |= !JlCompress::extractDir(tempDir.path() + QStringLiteral("/dotnet-desktop.zip"), dalamudRuntimeDir.absolutePath()).empty();
if (!success) {
- qInfo() << "Failed to install dotnet!";
+ qCritical(ASTRA_LOG) << "Failed to install dotnet!";
} else {
QFile file(dalamudRuntimeDir.absoluteFilePath(QStringLiteral("runtime.ver")));
file.open(QIODevice::WriteOnly | QIODevice::Text);
@@ -248,26 +236,12 @@ QCoro::Task<> AssetUpdater::installRuntime()
}
}
-static const QMap channelToDistribPrefix = {{Profile::DalamudChannel::Stable, QStringLiteral("/")},
- {Profile::DalamudChannel::Staging, QStringLiteral("stg/")},
- {Profile::DalamudChannel::Net5, QStringLiteral("net5/")}};
-
-QUrl AssetUpdater::dalamudVersionManifestUrl(const Profile::DalamudChannel channel) const
+QUrl AssetUpdater::dalamudVersionManifestUrl() const
{
QUrl url;
url.setScheme(launcher.preferredProtocol());
url.setHost(launcher.dalamudDistribServer());
- url.setPath(QStringLiteral("/dalamud-distrib/%1version").arg(channelToDistribPrefix[channel]));
-
- return url;
-}
-
-QUrl AssetUpdater::dalamudLatestPackageUrl(Profile::DalamudChannel channel) const
-{
- QUrl url;
- url.setScheme(launcher.preferredProtocol());
- url.setHost(launcher.dalamudDistribServer());
- url.setPath(QStringLiteral("/dalamud-distrib/%1latest.zip").arg(channelToDistribPrefix[channel]));
+ url.setPath(QStringLiteral("/Dalamud/Release/VersionInfo"));
return url;
}
@@ -277,7 +251,27 @@ QUrl AssetUpdater::dalamudAssetManifestUrl() const
QUrl url;
url.setScheme(launcher.preferredProtocol());
url.setHost(launcher.dalamudDistribServer());
- url.setPath(QStringLiteral("/DalamudAssets/asset.json"));
+ url.setPath(QStringLiteral("/Dalamud/Asset/Meta"));
+
+ return url;
+}
+
+QUrl AssetUpdater::dotnetRuntimePackageUrl(const QString &version) const
+{
+ QUrl url;
+ url.setScheme(launcher.preferredProtocol());
+ url.setHost(launcher.dalamudDistribServer());
+ url.setPath(QStringLiteral("/Dalamud/Release/Runtime/DotNet/%1").arg(version));
+
+ return url;
+}
+
+QUrl AssetUpdater::dotnetDesktopPackageUrl(const QString &version) const
+{
+ QUrl url;
+ url.setScheme(launcher.preferredProtocol());
+ url.setHost(launcher.dalamudDistribServer());
+ url.setPath(QStringLiteral("/Dalamud/Release/Runtime/WindowsDesktop/%1").arg(version));
return url;
}
diff --git a/launcher/src/profile.cpp b/launcher/src/profile.cpp
index f26f3da..1157d48 100644
--- a/launcher/src/profile.cpp
+++ b/launcher/src/profile.cpp
@@ -487,8 +487,6 @@ QString Profile::dalamudChannelName() const
return QStringLiteral("stable");
case DalamudChannel::Staging:
return QStringLiteral("staging");
- case DalamudChannel::Net5:
- return QStringLiteral("net5");
}
Q_UNREACHABLE();