From 1f2c3d43a6b203a61236f24a250069a3193b7c32 Mon Sep 17 00:00:00 2001 From: ge0rdi Date: Sun, 21 Aug 2022 20:32:43 +0200 Subject: [PATCH] Update: Get nightly (prerelease) builds from Github We are now deploying official builds from master to Github releases page (as Prerelease). So we should get these build from there. This is also related to AppVeyor's rather tight download limits that make it quite challenge to obtain nightly builds. --- Src/Lib/DownloadHelper.cpp | 30 ++++++++++++++++++++++++------ Src/Lib/DownloadHelper.h | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/Src/Lib/DownloadHelper.cpp b/Src/Lib/DownloadHelper.cpp index cecabda..ed49ac1 100644 --- a/Src/Lib/DownloadHelper.cpp +++ b/Src/Lib/DownloadHelper.cpp @@ -344,7 +344,7 @@ static DWORD WINAPI ThreadVersionCheck( void *param ) VersionData data; { - auto load = params.nightly ? data.LoadNightly() : data.Load(); + auto load = data.Load(!params.nightly); #ifdef UPDATE_LOG LogToFile(UPDATE_LOG, L"Load result: %d", load); @@ -765,20 +765,38 @@ std::vector DownloadUrl(const wchar_t* url) using namespace nlohmann; -VersionData::TLoadResult VersionData::Load() +VersionData::TLoadResult VersionData::Load(bool official) { Clear(); - auto buf = DownloadUrl(L"https://api.github.com/repos/Open-Shell/Open-Shell-Menu/releases/latest"); + std::wstring baseUrl = L"https://api.github.com/repos/Open-Shell/Open-Shell-Menu/releases"; + if (official) + baseUrl += L"/latest"; + + auto buf = DownloadUrl(baseUrl.c_str()); if (buf.empty()) return LOAD_ERROR; try { - auto data = json::parse(buf.begin(), buf.end()); + auto jsonData = json::parse(buf.begin(), buf.end()); + auto& data = jsonData; - // skip prerelease versions - if (data["prerelease"].get()) + if (official) + { + // skip prerelease versions (just in case) + if (data["prerelease"].get()) + return LOAD_BAD_VERSION; + } + else + { + // we've got list of versions (release and pre-release) + // lets pick first one (that should be the latest one) + data = jsonData[0]; + } + + // make sure we didn't get draft release (for whatever reason) + if (data["draft"].get()) return LOAD_BAD_VERSION; // get version from tag name diff --git a/Src/Lib/DownloadHelper.h b/Src/Lib/DownloadHelper.h index 32d536e..4b340b1 100644 --- a/Src/Lib/DownloadHelper.h +++ b/Src/Lib/DownloadHelper.h @@ -59,7 +59,7 @@ struct VersionData LOAD_BAD_FILE, // the file is corrupted }; - TLoadResult Load(); + TLoadResult Load(bool official); TLoadResult LoadNightly(); TLoadResult Load( const wchar_t *fname, bool bLoadFlags ); private: