1
Fork 0
mirror of https://github.com/redstrate/Astra.git synced 2025-04-20 19:57:45 +00:00

Simplify patcher strings

This commit is contained in:
Joshua Goins 2023-09-16 20:30:34 -04:00
parent b7f278331a
commit 72f3cf2052
2 changed files with 43 additions and 35 deletions

View file

@ -24,6 +24,7 @@ public:
private: private:
void setupDirectories(); void setupDirectories();
QString getBaseString() const;
[[nodiscard]] bool isBoot() const [[nodiscard]] bool isBoot() const
{ {
@ -35,6 +36,16 @@ private:
QStringList hashes; QStringList hashes;
long hashBlockSize; long hashBlockSize;
long length; long length;
bool isBoot;
QString getVersion() const
{
if (isBoot) {
return QStringLiteral("ffxivboot - %1").arg(name);
} else {
return QStringLiteral("%1 - %2").arg(repository, name);
}
}
}; };
void processPatch(const QueuedPatch &patch); void processPatch(const QueuedPatch &patch);
@ -49,4 +60,4 @@ private:
int remainingPatches = -1; int remainingPatches = -1;
LauncherCore &m_launcher; LauncherCore &m_launcher;
}; };

View file

@ -44,13 +44,8 @@ QCoro::Task<> Patcher::patch(QNetworkAccessManager &mgr, const QString &patchLis
co_return; co_return;
} }
if (isBoot()) { Q_EMIT m_launcher.stageIndeterminate();
Q_EMIT m_launcher.stageIndeterminate(); Q_EMIT m_launcher.stageChanged(i18n("Checking the %1 version.", getBaseString()));
Q_EMIT m_launcher.stageChanged(i18n("Checking the FINAL FANTASY XIV Update/Launcher version."));
} else {
Q_EMIT m_launcher.stageIndeterminate();
Q_EMIT m_launcher.stageChanged(i18n("Checking the FINAL FANTASY XIV Game version."));
}
const QStringList parts = patchList.split("\r\n"); const QStringList parts = patchList.split("\r\n");
@ -65,14 +60,14 @@ QCoro::Task<> Patcher::patch(QNetworkAccessManager &mgr, const QString &patchLis
const QStringList patchParts = parts[i].split(QLatin1Char('\t')); const QStringList patchParts = parts[i].split(QLatin1Char('\t'));
const int length = patchParts[0].toInt(); const int length = patchParts[0].toInt();
int ourIndex = patchIndex++; const int ourIndex = patchIndex++;
const QString version = patchParts[4]; const QString &version = patchParts[4];
const long hashBlockSize = patchParts.size() == 9 ? patchParts[6].toLong() : 0; const long hashBlockSize = patchParts.size() == 9 ? patchParts[6].toLong() : 0;
const QString name = version; const QString &name = version;
const QStringList hashes = patchParts.size() == 9 ? (patchParts[7].split(QLatin1Char(','))) : QStringList(); const QStringList hashes = patchParts.size() == 9 ? (patchParts[7].split(QLatin1Char(','))) : QStringList();
const QString url = patchParts[patchParts.size() == 9 ? 8 : 5]; const QString &url = patchParts[patchParts.size() == 9 ? 8 : 5];
const QString filename = QStringLiteral("%1.patch").arg(name); const QString filename = QStringLiteral("%1.patch").arg(name);
auto url_parts = url.split(QLatin1Char('/')); auto url_parts = url.split(QLatin1Char('/'));
@ -84,36 +79,27 @@ QCoro::Task<> Patcher::patch(QNetworkAccessManager &mgr, const QString &patchLis
QDir().mkpath(repositoryDir.absolutePath()); QDir().mkpath(repositoryDir.absolutePath());
const QString patchPath = repositoryDir.absoluteFilePath(filename); const QString patchPath = repositoryDir.absoluteFilePath(filename);
const QueuedPatch patch{name, repository, version, patchPath, hashes, hashBlockSize, length, isBoot()};
patchQueue[ourIndex] = patch;
if (!QFile::exists(patchPath)) { if (!QFile::exists(patchPath)) {
auto patchReply = mgr.get(QNetworkRequest(url)); auto patchReply = mgr.get(QNetworkRequest(url));
connect(patchReply, &QNetworkReply::downloadProgress, [this, repository, version, length](int received, int total) { connect(patchReply, &QNetworkReply::downloadProgress, [this, patch](int received, int total) {
Q_UNUSED(total) Q_EMIT m_launcher.stageChanged(i18n("Updating %1.\nDownloading %2", getBaseString(), patch.getVersion()));
Q_EMIT m_launcher.stageDeterminate(0, total, received);
if (isBoot()) {
Q_EMIT m_launcher.stageChanged(i18n("Updating the FINAL FANTASY XIV Updater/Launcher version.\nDownloading ffxivboot - %1", version));
} else {
Q_EMIT m_launcher.stageChanged(i18n("Updating the FINAL FANTASY XIV Game version.\nDownloading %1 - %2", repository, version));
}
Q_EMIT m_launcher.stageDeterminate(0, length, received);
}); });
synchronizer.addFuture(QtFuture::connect(patchReply, &QNetworkReply::finished) synchronizer.addFuture(QtFuture::connect(patchReply, &QNetworkReply::finished).then([patchPath, patchReply] {
.then([this, patchPath, patchReply, ourIndex, name, repository, version, hashes, hashBlockSize, length] { QFile file(patchPath);
QFile file(patchPath); file.open(QIODevice::WriteOnly);
file.open(QIODevice::WriteOnly); file.write(patchReply->readAll());
file.write(patchReply->readAll()); file.close();
file.close(); }));
patchQueue[ourIndex] = {name, repository, version, patchPath, hashes, hashBlockSize, length};
}));
} else { } else {
qDebug() << "Found existing patch: " << name; qDebug() << "Found existing patch: " << name;
patchQueue[ourIndex] = {name, repository, version, patchPath, hashes, hashBlockSize, length};
synchronizer.addFuture({});
} }
} }
@ -124,7 +110,9 @@ QCoro::Task<> Patcher::patch(QNetworkAccessManager &mgr, const QString &patchLis
// This must happen synchronously // This must happen synchronously
size_t i = 0; size_t i = 0;
for (const auto &patch : patchQueue) { for (const auto &patch : patchQueue) {
Q_EMIT m_launcher.stageChanged(i18n("Updating %1.\nInstalling %2", getBaseString(), patch.getVersion()));
Q_EMIT m_launcher.stageDeterminate(0, patchQueue.size(), i++); Q_EMIT m_launcher.stageDeterminate(0, patchQueue.size(), i++);
processPatch(patch); processPatch(patch);
} }
@ -192,3 +180,12 @@ void Patcher::setupDirectories()
patchesDir.setPath(dataDir.absoluteFilePath(QStringLiteral("patches"))); patchesDir.setPath(dataDir.absoluteFilePath(QStringLiteral("patches")));
} }
QString Patcher::getBaseString() const
{
if (isBoot()) {
return i18n("FINAL FANTASY XIV Update/Launcher");
} else {
return i18n("FINAL FANTASY XIV Game");
}
}