Add generation of rcheevos hash to DolphinTool

Fixed coding standards issue

CalculateHash return string instead of using char array param
This commit is contained in:
retroNUC
2024-09-15 15:52:04 +01:00
parent f85c4413bd
commit a74b2a4dde
5 changed files with 37 additions and 3 deletions

View File

@ -12,6 +12,7 @@
#include <fmt/ostream.h>
#include "Common/StringUtil.h"
#include "Core/AchievementManager.h"
#include "DiscIO/Volume.h"
#include "DiscIO/VolumeVerifier.h"
#include "UICommon/UICommon.h"
@ -97,7 +98,7 @@ int VerifyCommand(const std::vector<std::string>& args)
.action("store")
.help("Optional. Compute and print the digest using the selected algorithm, then exit. "
"[%choices]")
.choices({"crc32", "md5", "sha1"});
.choices({"crc32", "md5", "sha1", "rchash"});
const optparse::Values& options = parser.parse_args(args);
@ -114,6 +115,9 @@ int VerifyCommand(const std::vector<std::string>& args)
}
const std::string& input_file_path = options["input"];
bool rc_hash_calculate = false;
std::string rc_hash_result = "0";
DiscIO::Hashes<bool> hashes_to_calculate{};
const bool algorithm_is_set = options.is_set("algorithm");
if (!algorithm_is_set)
@ -129,9 +133,12 @@ int VerifyCommand(const std::vector<std::string>& args)
hashes_to_calculate.md5 = true;
else if (algorithm == "sha1")
hashes_to_calculate.sha1 = true;
else if (algorithm == "rchash")
rc_hash_calculate = true;
}
if (!hashes_to_calculate.crc32 && !hashes_to_calculate.md5 && !hashes_to_calculate.sha1)
if (!hashes_to_calculate.crc32 && !hashes_to_calculate.md5 && !hashes_to_calculate.sha1 &&
!rc_hash_calculate)
{
// optparse should protect from this
fmt::print(std::cerr, "Error: No algorithms selected for the operation\n");
@ -156,6 +163,12 @@ int VerifyCommand(const std::vector<std::string>& args)
verifier.Finish();
const DiscIO::VolumeVerifier::Result& result = verifier.GetResult();
// Calculate rcheevos hash
if (rc_hash_calculate)
{
rc_hash_result = AchievementManager::CalculateHash(input_file_path);
}
// Print the report
if (!algorithm_is_set)
{
@ -169,6 +182,8 @@ int VerifyCommand(const std::vector<std::string>& args)
fmt::print(std::cout, "{}\n", HashToHexString(result.hashes.md5));
else if (hashes_to_calculate.sha1 && !result.hashes.sha1.empty())
fmt::print(std::cout, "{}\n", HashToHexString(result.hashes.sha1));
else if (rc_hash_calculate)
fmt::print(std::cout, "{}\n", rc_hash_result);
else
{
fmt::print(std::cerr, "Error: No hash computed\n");