Skip to content

Commit

Permalink
Add Fallback to 32-bit Builds on 64-bit Launcher
Browse files Browse the repository at this point in the history
  • Loading branch information
LRFLEW committed Oct 19, 2016
1 parent e8c0b52 commit 99f1620
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 11 deletions.
2 changes: 2 additions & 0 deletions platform.h
Expand Up @@ -12,6 +12,7 @@

#ifdef Q_PROCESSOR_X86_64
#define OPENRCT2_FLAVOR "6"
#define OPENRCT2_FLAVOR_FALLBACK "1"
#else
#define OPENRCT2_FLAVOR "1"
#endif
Expand All @@ -32,6 +33,7 @@

#ifdef Q_PROCESSOR_X86_64
#define OPENRCT2_FLAVOR "9"
#define OPENRCT2_FLAVOR_FALLBACK "4"
#else
#define OPENRCT2_FLAVOR "4"
#endif
Expand Down
39 changes: 29 additions & 10 deletions updater.cpp
Expand Up @@ -22,39 +22,47 @@
#include <QTemporaryFile>
#include <QUrlQuery>

Updater::Updater(QObject *parent) : QObject(parent), url(QStringLiteral("https://openrct2.org/altapi/"))
Updater::Updater(QObject *parent) : QObject(parent)
{
connect(&net, &QNetworkAccessManager::sslErrors, [](QNetworkReply * reply, const QList<QSslError> & errors){Q_UNUSED(reply); qDebug() << errors;});
}

void Updater::download() {
if (update != nullptr) update->abort(), update = nullptr;
if (api != nullptr) api->abort(), api = nullptr;
if (bundle != nullptr) bundle->abort(), bundle = nullptr;
void Updater::queryDownloads(QString flavor) {
QUrl url(QStringLiteral("https://openrct2.org/altapi/"));

QUrlQuery query;
query.addQueryItem(QStringLiteral("command"), QStringLiteral("get-latest-download"));
query.addQueryItem(QStringLiteral("flavourId"), QStringLiteral(OPENRCT2_FLAVOR));
query.addQueryItem(QStringLiteral("flavourId"), flavor);
fallback = false;

QVariant stableVar = settings.value(QStringLiteral("stable"));
bool stable = stableVar.isValid() && stableVar.toBool();
query.addQueryItem(QStringLiteral("gitBranch"), stable ? QStringLiteral("master") : QStringLiteral("develop"));

url.setQuery(query.query());

QNetworkRequest urequest(QStringLiteral("https://api.github.com/repos/LRFLEW/OpenRCT2Launcher/releases/latest"));
update = net.get(urequest);
connect(update, &QNetworkReply::finished, this, &Updater::receivedUpdate);

QNetworkRequest request(url);
api = net.get(request);
connect(api, &QNetworkReply::finished, this, &Updater::receivedAPI);
}

void Updater::download() {
if (update != nullptr) update->abort(), update->deleteLater(), update = nullptr;
if (api != nullptr) api->abort(), api->deleteLater(), api = nullptr;
if (bundle != nullptr) bundle->abort(), bundle->deleteLater(), bundle = nullptr;

queryDownloads(QStringLiteral(OPENRCT2_FLAVOR));

QNetworkRequest urequest(QStringLiteral("https://api.github.com/repos/LRFLEW/OpenRCT2Launcher/releases/latest"));
update = net.get(urequest);
connect(update, &QNetworkReply::finished, this, &Updater::receivedUpdate);
}

void Updater::receivedUpdate() {
if (update->error() != QNetworkReply::NoError) {
// Don't emit, so the error is mostly silent
qDebug() << update->errorString();
update->deleteLater(), update = nullptr;
return;
}

Expand Down Expand Up @@ -98,6 +106,7 @@ void Updater::receivedUpdate() {
void Updater::receivedAPI() {
if (api->error() != QNetworkReply::NoError) {
emit error(api->errorString());
api->deleteLater(), api = nullptr;
return;
}

Expand All @@ -109,6 +118,15 @@ void Updater::receivedAPI() {
QJsonDocument response = QJsonDocument::fromJson(data);
QJsonObject robj = response.object();
if (robj[QStringLiteral("error")].toInt() != 0) {

#ifdef OPENRCT2_FLAVOR_FALLBACK
if (!fallback && robj[QStringLiteral("errorMessage")].toString() == "No download available.") {
// Try 32-bit on 64-bit
queryDownloads(QStringLiteral(OPENRCT2_FLAVOR_FALLBACK));
return;
}
#endif

emit error(robj[QStringLiteral("errorMessage")].toString());
return;
}
Expand All @@ -134,6 +152,7 @@ void Updater::receivedAPI() {
void Updater::receivedBundle() {
if (bundle->error() != QNetworkReply::NoError) {
emit error(bundle->errorString());
bundle->deleteLater(), bundle = nullptr;
return;
}

Expand Down
3 changes: 2 additions & 1 deletion updater.h
Expand Up @@ -30,13 +30,14 @@ private slots:

private:
bool extract(QByteArray &data, QDir &bin);
void queryDownloads(QString flavor);

QUrl url;
QNetworkAccessManager net;
int size;
QByteArray hash;
QByteArray githash;
QString version;
bool fallback;

QNetworkReply *update = nullptr;
QNetworkReply *api = nullptr;
Expand Down

0 comments on commit 99f1620

Please sign in to comment.