diff --git a/Source/Core/DolphinTool/CMakeLists.txt b/Source/Core/DolphinTool/CMakeLists.txt index fdca81a148..4bb60d22ce 100644 --- a/Source/Core/DolphinTool/CMakeLists.txt +++ b/Source/Core/DolphinTool/CMakeLists.txt @@ -1,6 +1,5 @@ add_executable(dolphin-tool ToolHeadlessPlatform.cpp - Command.h ConvertCommand.cpp ConvertCommand.h VerifyCommand.cpp diff --git a/Source/Core/DolphinTool/Command.h b/Source/Core/DolphinTool/Command.h deleted file mode 100644 index 1a769c66b5..0000000000 --- a/Source/Core/DolphinTool/Command.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2021 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include -#include - -namespace DolphinTool -{ -class Command -{ -public: - Command() {} - virtual ~Command() {} - virtual int Main(const std::vector& args) = 0; -}; - -} // namespace DolphinTool diff --git a/Source/Core/DolphinTool/ConvertCommand.cpp b/Source/Core/DolphinTool/ConvertCommand.cpp index dbb35c6be5..386ae2bc8c 100644 --- a/Source/Core/DolphinTool/ConvertCommand.cpp +++ b/Source/Core/DolphinTool/ConvertCommand.cpp @@ -18,12 +18,42 @@ #include "DiscIO/Volume.h" #include "DiscIO/VolumeDisc.h" #include "DiscIO/WIABlob.h" -#include "DolphinTool/Command.h" #include "UICommon/UICommon.h" namespace DolphinTool { -int ConvertCommand::Main(const std::vector& args) +static std::optional +ParseCompressionTypeString(const std::string& compression_str) +{ + if (compression_str == "none") + return DiscIO::WIARVZCompressionType::None; + else if (compression_str == "purge") + return DiscIO::WIARVZCompressionType::Purge; + else if (compression_str == "bzip2") + return DiscIO::WIARVZCompressionType::Bzip2; + else if (compression_str == "lzma") + return DiscIO::WIARVZCompressionType::LZMA; + else if (compression_str == "lzma2") + return DiscIO::WIARVZCompressionType::LZMA2; + else if (compression_str == "zstd") + return DiscIO::WIARVZCompressionType::Zstd; + return std::nullopt; +} + +static std::optional ParseFormatString(const std::string& format_str) +{ + if (format_str == "iso") + return DiscIO::BlobType::PLAIN; + else if (format_str == "gcz") + return DiscIO::BlobType::GCZ; + else if (format_str == "wia") + return DiscIO::BlobType::WIA; + else if (format_str == "rvz") + return DiscIO::BlobType::RVZ; + return std::nullopt; +} + +int ConvertCommand(const std::vector& args) { optparse::OptionParser parser; @@ -324,35 +354,4 @@ int ConvertCommand::Main(const std::vector& args) return 0; } - -std::optional -ConvertCommand::ParseCompressionTypeString(const std::string& compression_str) -{ - if (compression_str == "none") - return DiscIO::WIARVZCompressionType::None; - else if (compression_str == "purge") - return DiscIO::WIARVZCompressionType::Purge; - else if (compression_str == "bzip2") - return DiscIO::WIARVZCompressionType::Bzip2; - else if (compression_str == "lzma") - return DiscIO::WIARVZCompressionType::LZMA; - else if (compression_str == "lzma2") - return DiscIO::WIARVZCompressionType::LZMA2; - else if (compression_str == "zstd") - return DiscIO::WIARVZCompressionType::Zstd; - return std::nullopt; -} - -std::optional ConvertCommand::ParseFormatString(const std::string& format_str) -{ - if (format_str == "iso") - return DiscIO::BlobType::PLAIN; - else if (format_str == "gcz") - return DiscIO::BlobType::GCZ; - else if (format_str == "wia") - return DiscIO::BlobType::WIA; - else if (format_str == "rvz") - return DiscIO::BlobType::RVZ; - return std::nullopt; -} } // namespace DolphinTool diff --git a/Source/Core/DolphinTool/ConvertCommand.h b/Source/Core/DolphinTool/ConvertCommand.h index c96b57c0e3..9248df329c 100644 --- a/Source/Core/DolphinTool/ConvertCommand.h +++ b/Source/Core/DolphinTool/ConvertCommand.h @@ -3,25 +3,10 @@ #pragma once -#include #include #include -#include "DiscIO/Blob.h" -#include "DiscIO/WIABlob.h" -#include "DolphinTool/Command.h" - namespace DolphinTool { -class ConvertCommand final : public Command -{ -public: - int Main(const std::vector& args) override; - -private: - std::optional - ParseCompressionTypeString(const std::string& compression_str); - std::optional ParseFormatString(const std::string& format_str); -}; - +int ConvertCommand(const std::vector& args); } // namespace DolphinTool diff --git a/Source/Core/DolphinTool/DolphinTool.filters b/Source/Core/DolphinTool/DolphinTool.filters index ce15defcec..caa654146d 100644 --- a/Source/Core/DolphinTool/DolphinTool.filters +++ b/Source/Core/DolphinTool/DolphinTool.filters @@ -3,13 +3,14 @@ + - + diff --git a/Source/Core/DolphinTool/DolphinTool.vcxproj b/Source/Core/DolphinTool/DolphinTool.vcxproj index 2ea89a0fce..eb6b34f30b 100644 --- a/Source/Core/DolphinTool/DolphinTool.vcxproj +++ b/Source/Core/DolphinTool/DolphinTool.vcxproj @@ -48,7 +48,6 @@ - diff --git a/Source/Core/DolphinTool/HeaderCommand.cpp b/Source/Core/DolphinTool/HeaderCommand.cpp index 94aa89b890..ab237efd88 100644 --- a/Source/Core/DolphinTool/HeaderCommand.cpp +++ b/Source/Core/DolphinTool/HeaderCommand.cpp @@ -2,16 +2,20 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "DolphinTool/HeaderCommand.h" + +#include +#include +#include + +#include + #include "DiscIO/Blob.h" #include "DiscIO/Volume.h" #include "DiscIO/VolumeDisc.h" -#include -#include - namespace DolphinTool { -int HeaderCommand::Main(const std::vector& args) +int HeaderCommand(const std::vector& args) { optparse::OptionParser parser; diff --git a/Source/Core/DolphinTool/HeaderCommand.h b/Source/Core/DolphinTool/HeaderCommand.h index d79af11001..6b091af906 100644 --- a/Source/Core/DolphinTool/HeaderCommand.h +++ b/Source/Core/DolphinTool/HeaderCommand.h @@ -6,14 +6,7 @@ #include #include -#include "DolphinTool/Command.h" - namespace DolphinTool { -class HeaderCommand final : public Command -{ -public: - int Main(const std::vector& args) override; -}; - +int HeaderCommand(const std::vector& args); } // namespace DolphinTool diff --git a/Source/Core/DolphinTool/ToolMain.cpp b/Source/Core/DolphinTool/ToolMain.cpp index b0e62cb594..7dae146082 100644 --- a/Source/Core/DolphinTool/ToolMain.cpp +++ b/Source/Core/DolphinTool/ToolMain.cpp @@ -8,9 +8,10 @@ #include #include +#include "Common/StringUtil.h" #include "Common/Version.h" #include "Core/Core.h" -#include "DolphinTool/Command.h" + #include "DolphinTool/ConvertCommand.h" #include "DolphinTool/HeaderCommand.h" #include "DolphinTool/VerifyCommand.h" @@ -38,18 +39,13 @@ int main(int argc, char* argv[]) // Take off the program name and command selector before passing arguments down const std::vector args(argv + 2, argv + argc); - std::unique_ptr command; - if (command_str == "convert") - command = std::make_unique(); + return DolphinTool::ConvertCommand(args); else if (command_str == "verify") - command = std::make_unique(); + return DolphinTool::VerifyCommand(args); else if (command_str == "header") - command = std::make_unique(); - else - return PrintUsage(1); - - return command->Main(args); + return DolphinTool::HeaderCommand(args); + return PrintUsage(1); } #ifdef _WIN32 diff --git a/Source/Core/DolphinTool/VerifyCommand.cpp b/Source/Core/DolphinTool/VerifyCommand.cpp index 631ac229f4..c27c02c646 100644 --- a/Source/Core/DolphinTool/VerifyCommand.cpp +++ b/Source/Core/DolphinTool/VerifyCommand.cpp @@ -2,13 +2,77 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "DolphinTool/VerifyCommand.h" -#include "UICommon/UICommon.h" + +#include +#include #include +#include "Common/StringUtil.h" +#include "DiscIO/VolumeDisc.h" +#include "DiscIO/VolumeVerifier.h" +#include "UICommon/UICommon.h" + namespace DolphinTool { -int VerifyCommand::Main(const std::vector& args) +static std::string HashToHexString(const std::vector& hash) +{ + std::stringstream ss; + ss << std::hex; + for (int i = 0; i < static_cast(hash.size()); ++i) + { + ss << std::setw(2) << std::setfill('0') << static_cast(hash[i]); + } + return ss.str(); +} + +static void PrintFullReport(const DiscIO::VolumeVerifier::Result& result) +{ + if (!result.hashes.crc32.empty()) + std::cout << "CRC32: " << HashToHexString(result.hashes.crc32) << std::endl; + else + std::cout << "CRC32 not computed" << std::endl; + + if (!result.hashes.md5.empty()) + std::cout << "MD5: " << HashToHexString(result.hashes.md5) << std::endl; + else + std::cout << "MD5 not computed" << std::endl; + + if (!result.hashes.sha1.empty()) + std::cout << "SHA1: " << HashToHexString(result.hashes.sha1) << std::endl; + else + std::cout << "SHA1 not computed" << std::endl; + + std::cout << "Problems Found: " << (result.problems.empty() ? "No" : "Yes") << std::endl; + + for (const auto& problem : result.problems) + { + std::cout << std::endl << "Severity: "; + switch (problem.severity) + { + case DiscIO::VolumeVerifier::Severity::Low: + std::cout << "Low"; + break; + case DiscIO::VolumeVerifier::Severity::Medium: + std::cout << "Medium"; + break; + case DiscIO::VolumeVerifier::Severity::High: + std::cout << "High"; + break; + case DiscIO::VolumeVerifier::Severity::None: + std::cout << "None"; + break; + default: + ASSERT(false); + break; + } + std::cout << std::endl; + + std::cout << "Summary: " << problem.text << std::endl << std::endl; + } +} + +int VerifyCommand(const std::vector& args) { optparse::OptionParser parser; @@ -115,61 +179,4 @@ int VerifyCommand::Main(const std::vector& args) return 0; } - -void VerifyCommand::PrintFullReport(const DiscIO::VolumeVerifier::Result& result) -{ - if (!result.hashes.crc32.empty()) - std::cout << "CRC32: " << HashToHexString(result.hashes.crc32) << std::endl; - else - std::cout << "CRC32 not computed" << std::endl; - - if (!result.hashes.md5.empty()) - std::cout << "MD5: " << HashToHexString(result.hashes.md5) << std::endl; - else - std::cout << "MD5 not computed" << std::endl; - - if (!result.hashes.sha1.empty()) - std::cout << "SHA1: " << HashToHexString(result.hashes.sha1) << std::endl; - else - std::cout << "SHA1 not computed" << std::endl; - - std::cout << "Problems Found: " << (result.problems.empty() ? "No" : "Yes") << std::endl; - - for (const auto& problem : result.problems) - { - std::cout << std::endl << "Severity: "; - switch (problem.severity) - { - case DiscIO::VolumeVerifier::Severity::Low: - std::cout << "Low"; - break; - case DiscIO::VolumeVerifier::Severity::Medium: - std::cout << "Medium"; - break; - case DiscIO::VolumeVerifier::Severity::High: - std::cout << "High"; - break; - case DiscIO::VolumeVerifier::Severity::None: - std::cout << "None"; - break; - default: - ASSERT(false); - break; - } - std::cout << std::endl; - - std::cout << "Summary: " << problem.text << std::endl << std::endl; - } -} - -std::string VerifyCommand::HashToHexString(const std::vector& hash) -{ - std::stringstream ss; - ss << std::hex; - for (int i = 0; i < static_cast(hash.size()); ++i) - { - ss << std::setw(2) << std::setfill('0') << static_cast(hash[i]); - } - return ss.str(); -} } // namespace DolphinTool diff --git a/Source/Core/DolphinTool/VerifyCommand.h b/Source/Core/DolphinTool/VerifyCommand.h index 52ebddcf8c..337b52143c 100644 --- a/Source/Core/DolphinTool/VerifyCommand.h +++ b/Source/Core/DolphinTool/VerifyCommand.h @@ -3,26 +3,10 @@ #pragma once -#include #include #include -#include "DiscIO/Volume.h" -#include "DiscIO/VolumeDisc.h" -#include "DiscIO/VolumeVerifier.h" -#include "DolphinTool/Command.h" - namespace DolphinTool { -class VerifyCommand final : public Command -{ -public: - int Main(const std::vector& args) override; - -private: - void PrintFullReport(const DiscIO::VolumeVerifier::Result& result); - - std::string HashToHexString(const std::vector& hash); -}; - +int VerifyCommand(const std::vector& args); } // namespace DolphinTool