mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
WinUpdater: Check OS and VC++ Redist versions.
This commit is contained in:
@ -18,6 +18,7 @@
|
||||
#include "Common/HttpRequest.h"
|
||||
#include "Common/ScopeGuard.h"
|
||||
#include "Common/StringUtil.h"
|
||||
#include "UpdaterCommon/Platform.h"
|
||||
#include "UpdaterCommon/UI.h"
|
||||
|
||||
#ifndef _WIN32
|
||||
@ -278,6 +279,41 @@ bool DownloadContent(const std::vector<TodoList::DownloadOp>& to_download,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PlatformVersionCheck(const std::vector<TodoList::UpdateOp>& to_update,
|
||||
const std::string& install_base_path, const std::string& temp_dir)
|
||||
{
|
||||
UI::SetDescription("Checking platform...");
|
||||
|
||||
const auto op_it = std::find_if(to_update.cbegin(), to_update.cend(),
|
||||
[&](const auto& op) { return op.filename == "build_info.txt"; });
|
||||
if (op_it == to_update.cend())
|
||||
return true;
|
||||
|
||||
const auto op = *op_it;
|
||||
std::string build_info_path =
|
||||
temp_dir + DIR_SEP + HexEncode(op.new_hash.data(), op.new_hash.size());
|
||||
std::string build_info_content;
|
||||
if (!File::ReadFileToString(build_info_path, build_info_content) ||
|
||||
op.new_hash != ComputeHash(build_info_content))
|
||||
{
|
||||
fprintf(log_fp, "Failed to read %s\n.", build_info_path.c_str());
|
||||
return false;
|
||||
}
|
||||
auto next_build_info = Platform::BuildInfo(build_info_content);
|
||||
|
||||
build_info_path = install_base_path + DIR_SEP + "build_info.txt";
|
||||
auto this_build_info = Platform::BuildInfo();
|
||||
if (File::ReadFileToString(build_info_path, build_info_content))
|
||||
{
|
||||
if (op.old_hash != ComputeHash(build_info_content))
|
||||
fprintf(log_fp, "Using modified existing BuildInfo %s.\n", build_info_path.c_str());
|
||||
this_build_info = Platform::BuildInfo(build_info_content);
|
||||
}
|
||||
|
||||
// The existing BuildInfo may have been modified. Be careful not to overly trust its contents!
|
||||
return Platform::VersionCheck(this_build_info, next_build_info);
|
||||
}
|
||||
|
||||
TodoList ComputeActionsToDo(Manifest this_manifest, Manifest next_manifest)
|
||||
{
|
||||
TodoList todo;
|
||||
@ -474,6 +510,11 @@ bool PerformUpdate(const TodoList& todo, const std::string& install_base_path,
|
||||
return false;
|
||||
fprintf(log_fp, "Download step completed.\n");
|
||||
|
||||
fprintf(log_fp, "Starting platform version check step...\n");
|
||||
if (!PlatformVersionCheck(todo.to_update, install_base_path, temp_path))
|
||||
return false;
|
||||
fprintf(log_fp, "Platform version check step completed.\n");
|
||||
|
||||
fprintf(log_fp, "Starting update step...\n");
|
||||
if (!UpdateFiles(todo.to_update, install_base_path, temp_path))
|
||||
return false;
|
||||
|
Reference in New Issue
Block a user