download latest loader resource if folder doesnt exist and the version doesnt exist

This commit is contained in:
altalk23 2023-09-16 15:38:14 +03:00
parent 4b9b72f541
commit 28480a6dc4

View file

@ -740,14 +740,12 @@ void Loader::Impl::tryDownloadLoaderResources(
.expect([this, tryLatestOnError](std::string const& info, int code) { .expect([this, tryLatestOnError](std::string const& info, int code) {
// if the url was not found, try downloading latest release instead // if the url was not found, try downloading latest release instead
// (for development versions) // (for development versions)
if (code == 404 && tryLatestOnError) { if (code == 404) {
this->downloadLoaderResources(true); log::warn("Unable to download resources: {}", info);
}
else {
ResourceDownloadEvent(
UpdateFailed("Unable to download resources: " + info)
).post();
} }
ResourceDownloadEvent(
UpdateFailed("Unable to download resources: " + info)
).post();
}) })
.progress([](auto&, double now, double total) { .progress([](auto&, double now, double total) {
ResourceDownloadEvent( ResourceDownloadEvent(
@ -768,65 +766,66 @@ void Loader::Impl::updateSpecialFiles() {
} }
void Loader::Impl::downloadLoaderResources(bool useLatestRelease) { void Loader::Impl::downloadLoaderResources(bool useLatestRelease) {
if (!useLatestRelease) { web::AsyncWebRequest()
web::AsyncWebRequest() .join("loader-tag-exists-check")
.join("loader-tag-exists-check") .userAgent("github_api/1.0")
.userAgent("github_api/1.0") .fetch(fmt::format(
.fetch(fmt::format( "https://api.github.com/repos/geode-sdk/geode/git/ref/tags/{}",
"https://api.github.com/repos/geode-sdk/geode/git/ref/tags/{}", this->getVersion().toString()
))
.json()
.then([this](json::Value const& json) {
this->tryDownloadLoaderResources(fmt::format(
"https://github.com/geode-sdk/geode/releases/download/{}/resources.zip",
this->getVersion().toString() this->getVersion().toString()
)) ), true);
.json() })
.then([this](json::Value const& json) { .expect([=](std::string const& info, int code) {
this->tryDownloadLoaderResources(fmt::format( if (code == 404) {
"https://github.com/geode-sdk/geode/releases/download/{}/resources.zip", if (useLatestRelease) {
this->getVersion().toString() log::debug("Loader version {} does not exist on Github, downloading latest resources", this->getVersion().toString());
), true); fetchLatestGithubRelease(
}) [this](json::Value const& raw) {
.expect([this](std::string const& info, int code) { auto json = raw;
if (code == 404) { JsonChecker checker(json);
log::debug("Loader version {} does not exist on Github, not downloading the resources", this->getVersion().toString()); auto root = checker.root("[]").obj();
ResourceDownloadEvent(
UpdateFinished() // find release asset
).post(); for (auto asset : root.needs("assets").iterate()) {
auto obj = asset.obj();
if (obj.needs("name").template get<std::string>() == "resources.zip") {
this->tryDownloadLoaderResources(
obj.needs("browser_download_url").template get<std::string>(),
false
);
return;
}
}
ResourceDownloadEvent(
UpdateFailed("Unable to find resources in latest GitHub release")
).post();
},
[this](std::string const& info) {
ResourceDownloadEvent(
UpdateFailed("Unable to download resources: " + info)
).post();
}
);
} }
else { else {
ResourceDownloadEvent( log::debug("Loader version {} does not exist on Github, not downloading the resources", this->getVersion().toString());
UpdateFailed("Unable to check if tag exists: " + info)
).post();
} }
});
}
else {
fetchLatestGithubRelease(
[this](json::Value const& raw) {
auto json = raw;
JsonChecker checker(json);
auto root = checker.root("[]").obj();
// find release asset
for (auto asset : root.needs("assets").iterate()) {
auto obj = asset.obj();
if (obj.needs("name").template get<std::string>() == "resources.zip") {
this->tryDownloadLoaderResources(
obj.needs("browser_download_url").template get<std::string>(),
false
);
return;
}
}
ResourceDownloadEvent( ResourceDownloadEvent(
UpdateFailed("Unable to find resources in latest GitHub release") UpdateFinished()
).post();
},
[this](std::string const& info) {
ResourceDownloadEvent(
UpdateFailed("Unable to download resources: " + info)
).post(); ).post();
} }
); else {
} ResourceDownloadEvent(
UpdateFailed("Unable to check if tag exists: " + info)
).post();
}
});
} }
bool Loader::Impl::verifyLoaderResources() { bool Loader::Impl::verifyLoaderResources() {
@ -844,7 +843,7 @@ bool Loader::Impl::verifyLoaderResources() {
ghc::filesystem::is_directory(resourcesDir) ghc::filesystem::is_directory(resourcesDir)
)) { )) {
log::debug("Resources directory does not exist"); log::debug("Resources directory does not exist");
this->downloadLoaderResources(); this->downloadLoaderResources(true);
return false; return false;
} }