[News] Remove broken updater
This commit is contained in:
parent
5f887a0364
commit
fcdfb563e6
@ -6,9 +6,6 @@ namespace Components
|
|||||||
{
|
{
|
||||||
bool News::Terminate;
|
bool News::Terminate;
|
||||||
std::thread News::Thread;
|
std::thread News::Thread;
|
||||||
std::string News::UpdaterArgs;
|
|
||||||
std::string News::UpdaterHash;
|
|
||||||
std::mutex News::UpdaterMutex;
|
|
||||||
|
|
||||||
bool News::unitTest()
|
bool News::unitTest()
|
||||||
{
|
{
|
||||||
@ -33,165 +30,18 @@ namespace Components
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void News::ExitProcessStub(unsigned int exitCode)
|
|
||||||
{
|
|
||||||
std::this_thread::sleep_for(10ms);
|
|
||||||
|
|
||||||
STARTUPINFOA sInfo;
|
|
||||||
PROCESS_INFORMATION pInfo;
|
|
||||||
|
|
||||||
ZeroMemory(&sInfo, sizeof(sInfo));
|
|
||||||
ZeroMemory(&pInfo, sizeof(pInfo));
|
|
||||||
sInfo.cb = sizeof(sInfo);
|
|
||||||
|
|
||||||
CreateProcessA("updater.exe", const_cast<char*>(Utils::String::VA("updater.exe %s", News::UpdaterArgs.data())), nullptr, nullptr, false, NULL, nullptr, nullptr, &sInfo, &pInfo);
|
|
||||||
|
|
||||||
if (pInfo.hThread && pInfo.hThread != INVALID_HANDLE_VALUE) CloseHandle(pInfo.hThread);
|
|
||||||
if (pInfo.hProcess && pInfo.hProcess != INVALID_HANDLE_VALUE) CloseHandle(pInfo.hProcess);
|
|
||||||
|
|
||||||
TerminateProcess(GetCurrentProcess(), exitCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool News::GetLatestUpdater()
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> _(News::UpdaterMutex);
|
|
||||||
|
|
||||||
if (Utils::IO::FileExists("updater.exe"))
|
|
||||||
{
|
|
||||||
// Generate hash of local updater.exe
|
|
||||||
std::string localUpdater = Utils::IO::ReadFile("updater.exe");
|
|
||||||
localUpdater = Utils::Cryptography::SHA1::Compute(localUpdater, true);
|
|
||||||
|
|
||||||
static Utils::Time::Interval updateInterval;
|
|
||||||
if (News::UpdaterHash.empty() || updateInterval.elapsed(15min)) // Check for updater Update every 15 mins max
|
|
||||||
{
|
|
||||||
updateInterval.update();
|
|
||||||
|
|
||||||
std::string data = Utils::Cache::GetFile("/json/updater"); // {"updater.exe":{"SHA1":"*HASH*"}}
|
|
||||||
|
|
||||||
std::string error;
|
|
||||||
json11::Json listData = json11::Json::parse(data, error);
|
|
||||||
|
|
||||||
if (error.empty() || listData.is_object())
|
|
||||||
{
|
|
||||||
News::UpdaterHash = listData["updater.exe"]["SHA1"].string_value();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!News::UpdaterHash.empty() && localUpdater != News::UpdaterHash)
|
|
||||||
{
|
|
||||||
remove("updater.exe");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Utils::IO::FileExists("updater.exe"))
|
|
||||||
{
|
|
||||||
return News::DownloadUpdater();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool News::DownloadUpdater()
|
|
||||||
{
|
|
||||||
std::string data = Utils::Cache::GetFile("/iw4/updater.exe");
|
|
||||||
|
|
||||||
if (!data.empty())
|
|
||||||
{
|
|
||||||
Utils::IO::WriteFile("updater.exe", data);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* News::GetNewsText()
|
const char* News::GetNewsText()
|
||||||
{
|
{
|
||||||
return Localization::Get("MPUI_MOTD_TEXT");
|
return Localization::Get("MPUI_MOTD_TEXT");
|
||||||
}
|
}
|
||||||
|
|
||||||
void News::CheckForUpdate()
|
|
||||||
{
|
|
||||||
std::string _client = Utils::Cache::GetFile("/json/client");
|
|
||||||
|
|
||||||
if (!_client.empty())
|
|
||||||
{
|
|
||||||
std::string error;
|
|
||||||
json11::Json client = json11::Json::parse(_client.data(), error);
|
|
||||||
|
|
||||||
int revisionNumber;
|
|
||||||
|
|
||||||
if (client["revision"].is_number())
|
|
||||||
{
|
|
||||||
revisionNumber = client["revision"].int_value();
|
|
||||||
}
|
|
||||||
else if (client["revision"].is_string())
|
|
||||||
{
|
|
||||||
revisionNumber = atoi(client["revision"].string_value().data());
|
|
||||||
}
|
|
||||||
else return;
|
|
||||||
|
|
||||||
Dvar::Var("cl_updateversion").get<Game::dvar_t*>()->current.integer = revisionNumber;
|
|
||||||
Dvar::Var("cl_updateavailable").get<Game::dvar_t*>()->current.enabled = (revisionNumber > REVISION);
|
|
||||||
|
|
||||||
// if there is an update then show the toast, but only once
|
|
||||||
static bool showToast = true;
|
|
||||||
if (revisionNumber > REVISION && showToast)
|
|
||||||
{
|
|
||||||
showToast = false;
|
|
||||||
Scheduler::OnReady([]()
|
|
||||||
{
|
|
||||||
Toast::Show("cardicon_gears", "^4Update Available", "There is an update available for your client!", 5000);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void News::LaunchUpdater(const std::string& params)
|
|
||||||
{
|
|
||||||
if (News::Updating()) return;
|
|
||||||
|
|
||||||
News::UpdaterArgs = params;
|
|
||||||
|
|
||||||
Localization::SetTemp("MENU_RECONNECTING_TO_PARTY", "Downloading updater");
|
|
||||||
Command::Execute("openmenu popup_reconnectingtoparty", true);
|
|
||||||
|
|
||||||
// Run the updater on shutdown
|
|
||||||
Utils::Hook::Set(0x6D72A0, News::ExitProcessStub);
|
|
||||||
|
|
||||||
std::thread([]()
|
|
||||||
{
|
|
||||||
if (News::GetLatestUpdater())
|
|
||||||
{
|
|
||||||
Console::SetSkipShutdown();
|
|
||||||
Command::Execute("wait 300; quit;", false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Localization::ClearTemp();
|
|
||||||
News::UpdaterArgs.clear();
|
|
||||||
Command::Execute("closemenu popup_reconnectingtoparty", false);
|
|
||||||
Game::ShowMessageBox("Failed to download the updater!", "Error");
|
|
||||||
}
|
|
||||||
}).detach();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool News::Updating()
|
|
||||||
{
|
|
||||||
return !News::UpdaterArgs.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
News::News()
|
News::News()
|
||||||
{
|
{
|
||||||
News::UpdaterArgs.clear();
|
|
||||||
News::UpdaterHash.clear();
|
|
||||||
if (ZoneBuilder::IsEnabled() || Dedicated::IsEnabled()) return; // Maybe also dedi?
|
if (ZoneBuilder::IsEnabled() || Dedicated::IsEnabled()) return; // Maybe also dedi?
|
||||||
|
|
||||||
Dvar::Register<bool>("g_firstLaunch", true, Game::DVAR_FLAG_SAVED, "");
|
Dvar::Register<bool>("g_firstLaunch", true, Game::DVAR_FLAG_SAVED, "");
|
||||||
|
|
||||||
Dvar::Register<int>("cl_updateoldversion", REVISION, REVISION, REVISION, Game::DVAR_FLAG_WRITEPROTECTED, "Current version number.");
|
Dvar::Register<int>("cl_updateoldversion", REVISION, REVISION, REVISION, Game::DVAR_FLAG_WRITEPROTECTED, "Current version number.");
|
||||||
Dvar::Register<int>("cl_updateversion", 0, 0, -1, Game::DVAR_FLAG_WRITEPROTECTED, "New version number.");
|
|
||||||
Dvar::Register<bool>("cl_updateavailable", false, Game::DVAR_FLAG_WRITEPROTECTED, "New update is available.");
|
|
||||||
|
|
||||||
UIScript::Add("checkFirstLaunch", [](UIScript::Token)
|
UIScript::Add("checkFirstLaunch", [](UIScript::Token)
|
||||||
{
|
{
|
||||||
@ -221,8 +71,6 @@ namespace Components
|
|||||||
Localization::Set("MPUI_CHANGELOG_TEXT", "Loading...");
|
Localization::Set("MPUI_CHANGELOG_TEXT", "Loading...");
|
||||||
Localization::Set("MPUI_MOTD_TEXT", NEWS_MOTD_DEFAULT);
|
Localization::Set("MPUI_MOTD_TEXT", NEWS_MOTD_DEFAULT);
|
||||||
|
|
||||||
//News::GetLatestUpdater();
|
|
||||||
|
|
||||||
// make newsfeed (ticker) menu items not cut off based on safe area
|
// make newsfeed (ticker) menu items not cut off based on safe area
|
||||||
Utils::Hook::Nop(0x63892D, 5);
|
Utils::Hook::Nop(0x63892D, 5);
|
||||||
|
|
||||||
@ -230,17 +78,6 @@ namespace Components
|
|||||||
Utils::Hook::Nop(0x6388BB, 2); // skip the "if (item->text[0] == '@')" localize check
|
Utils::Hook::Nop(0x6388BB, 2); // skip the "if (item->text[0] == '@')" localize check
|
||||||
Utils::Hook(0x6388C1, News::GetNewsText, HOOK_CALL).install()->quick();
|
Utils::Hook(0x6388C1, News::GetNewsText, HOOK_CALL).install()->quick();
|
||||||
|
|
||||||
Command::Add("checkforupdate", [](Command::Params*)
|
|
||||||
{
|
|
||||||
News::CheckForUpdate();
|
|
||||||
});
|
|
||||||
|
|
||||||
Command::Add("getautoupdate", [](Command::Params*)
|
|
||||||
{
|
|
||||||
if (!Dvar::Var("cl_updateavailable").get<Game::dvar_t*>()->current.enabled) return;
|
|
||||||
News::LaunchUpdater("-update -c");
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!Utils::IsWineEnvironment() && !Loader::IsPerformingUnitTests())
|
if (!Utils::IsWineEnvironment() && !Loader::IsPerformingUnitTests())
|
||||||
{
|
{
|
||||||
News::Terminate = false;
|
News::Terminate = false;
|
||||||
@ -257,12 +94,8 @@ namespace Components
|
|||||||
|
|
||||||
if (!Loader::IsPerformingUnitTests() && !News::Terminate)
|
if (!Loader::IsPerformingUnitTests() && !News::Terminate)
|
||||||
{
|
{
|
||||||
News::GetLatestUpdater();
|
|
||||||
|
|
||||||
while (!News::Terminate)
|
while (!News::Terminate)
|
||||||
{
|
{
|
||||||
News::CheckForUpdate();
|
|
||||||
|
|
||||||
// Sleep for 3 minutes
|
// Sleep for 3 minutes
|
||||||
for (int i = 0; i < 180 && !News::Terminate; ++i)
|
for (int i = 0; i < 180 && !News::Terminate; ++i)
|
||||||
{
|
{
|
||||||
@ -274,12 +107,6 @@ namespace Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
News::~News()
|
|
||||||
{
|
|
||||||
News::UpdaterArgs.clear();
|
|
||||||
News::UpdaterHash.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void News::preDestroy()
|
void News::preDestroy()
|
||||||
{
|
{
|
||||||
News::Terminate = true;
|
News::Terminate = true;
|
||||||
|
@ -6,27 +6,16 @@ namespace Components
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
News();
|
News();
|
||||||
~News();
|
|
||||||
|
|
||||||
void preDestroy() override;
|
void preDestroy() override;
|
||||||
bool unitTest() override;
|
bool unitTest() override;
|
||||||
|
|
||||||
static void LaunchUpdater(const std::string& params);
|
|
||||||
static bool Updating();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::string UpdaterArgs;
|
|
||||||
static std::string UpdaterHash;
|
|
||||||
static std::thread Thread;
|
static std::thread Thread;
|
||||||
static std::mutex UpdaterMutex;
|
|
||||||
|
|
||||||
static bool Terminate;
|
static bool Terminate;
|
||||||
static bool GetLatestUpdater();
|
|
||||||
static bool DownloadUpdater();
|
static bool DownloadUpdater();
|
||||||
|
|
||||||
static void CheckForUpdate();
|
|
||||||
static void ExitProcessStub(unsigned int exitCode);
|
|
||||||
|
|
||||||
static const char* GetNewsText();
|
static const char* GetNewsText();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user