tools/eupak: Refactor ExtractTask to ITask
Completing this refactor.. Nice.
This commit is contained in:
parent
addf2071f4
commit
d9dae6e6ac
3 changed files with 80 additions and 79 deletions
|
@ -8,44 +8,16 @@
|
||||||
|
|
||||||
#include <argparse/argparse.hpp>
|
#include <argparse/argparse.hpp>
|
||||||
#include <EupakConfig.hpp>
|
#include <EupakConfig.hpp>
|
||||||
#include <tasks/CreateTask.hpp>
|
#include <tasks/Task.hpp>
|
||||||
#include <tasks/ExtractTask.hpp>
|
|
||||||
#include <tasks/InfoTask.hpp>
|
|
||||||
|
|
||||||
#include "europa/structs/Pak.hpp"
|
|
||||||
#include "tasks/Task.hpp"
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
// FIXME: At some point we should just have task classes register their arguments
|
|
||||||
// and then they will deal with all that themselves. The only thing we will do here
|
|
||||||
// is point them to themselves.
|
|
||||||
//
|
|
||||||
// The current design is really really bad for introducing new stuff.
|
|
||||||
|
|
||||||
argparse::ArgumentParser parser("eupak", EUPAK_VERSION_STR);
|
argparse::ArgumentParser parser("eupak", EUPAK_VERSION_STR);
|
||||||
parser.add_description("Eupak (Europa Package Multi-Tool) v" EUPAK_VERSION_STR);
|
parser.add_description("Eupak (Europa Package Multi-Tool) v" EUPAK_VERSION_STR);
|
||||||
|
|
||||||
|
|
||||||
argparse::ArgumentParser extractParser("extract", EUPAK_VERSION_STR, argparse::default_arguments::help);
|
|
||||||
extractParser.add_description("Extract a package file.");
|
|
||||||
extractParser.add_argument("-d", "--directory")
|
|
||||||
.default_value("")
|
|
||||||
.metavar("DIRECTORY")
|
|
||||||
.help("Directory to extract to.");
|
|
||||||
extractParser.add_argument("input")
|
|
||||||
.help("Input archive")
|
|
||||||
.metavar("ARCHIVE");
|
|
||||||
|
|
||||||
extractParser.add_argument("--verbose")
|
|
||||||
.help("Increase extraction output verbosity")
|
|
||||||
.default_value(false)
|
|
||||||
.implicit_value(true);
|
|
||||||
|
|
||||||
parser.add_subparser(extractParser);
|
|
||||||
|
|
||||||
auto tasks = std::vector {
|
auto tasks = std::vector {
|
||||||
eupak::tasks::TaskFactory::CreateNamed("create", parser),
|
eupak::tasks::TaskFactory::CreateNamed("create", parser),
|
||||||
eupak::tasks::TaskFactory::CreateNamed("info", parser)
|
eupak::tasks::TaskFactory::CreateNamed("info", parser),
|
||||||
|
eupak::tasks::TaskFactory::CreateNamed("extract", parser),
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -77,47 +49,5 @@ int main(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
if(parser.is_subcommand_used("extract")) {
|
|
||||||
eupak::tasks::ExtractTask task;
|
|
||||||
eupak::tasks::ExtractTask::Arguments args;
|
|
||||||
|
|
||||||
args.verbose = extractParser.get<bool>("--verbose");
|
|
||||||
args.inputPath = eupak::fs::path(extractParser.get("input"));
|
|
||||||
|
|
||||||
if(extractParser.is_used("--directory")) {
|
|
||||||
args.outputDirectory = eupak::fs::path(extractParser.get("--directory"));
|
|
||||||
} else {
|
|
||||||
// Default to the basename appended to current path
|
|
||||||
// as a "relatively sane" default path to extract to.
|
|
||||||
// Should be okay.
|
|
||||||
args.outputDirectory = eupak::fs::current_path() / args.inputPath.stem();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::cout << "Input PAK/PMDL: " << args.inputPath << '\n';
|
|
||||||
std::cout << "Output Directory: " << args.outputDirectory << '\n';
|
|
||||||
|
|
||||||
return task.Run(std::move(args));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(parser.is_subcommand_used("info")) {
|
|
||||||
eupak::tasks::InfoTask task;
|
|
||||||
eupak::tasks::InfoTask::Arguments args;
|
|
||||||
|
|
||||||
|
|
||||||
return task.Run(std::move(args));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(parser.is_subcommand_used("create")) {
|
|
||||||
eupak::tasks::CreateTask task;
|
|
||||||
eupak::tasks::CreateTask::Arguments args;
|
|
||||||
|
|
||||||
|
|
||||||
return task.Run(std::move(args));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <EupakConfig.hpp>
|
||||||
#include <europa/io/PakReader.hpp>
|
#include <europa/io/PakReader.hpp>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <indicators/cursor_control.hpp>
|
#include <indicators/cursor_control.hpp>
|
||||||
|
@ -14,9 +15,66 @@
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <tasks/ExtractTask.hpp>
|
#include <tasks/ExtractTask.hpp>
|
||||||
|
|
||||||
namespace eupak::tasks {
|
#include "tasks/Task.hpp"
|
||||||
|
|
||||||
|
namespace eupak::tasks {
|
||||||
|
ExtractTask::ExtractTask()
|
||||||
|
: parser("extract", EUPAK_VERSION_STR, argparse::default_arguments::help) {
|
||||||
|
// clang-format off
|
||||||
|
parser
|
||||||
|
.add_description("Extract a package file.");
|
||||||
|
parser
|
||||||
|
.add_argument("-d", "--directory")
|
||||||
|
.default_value("")
|
||||||
|
.metavar("DIRECTORY")
|
||||||
|
.help("Directory to extract to.");
|
||||||
|
|
||||||
|
parser
|
||||||
|
.add_argument("input")
|
||||||
|
.help("Input archive")
|
||||||
|
.metavar("ARCHIVE");
|
||||||
|
|
||||||
|
parser
|
||||||
|
.add_argument("--verbose")
|
||||||
|
.help("Increase extraction output verbosity")
|
||||||
|
.default_value(false)
|
||||||
|
.implicit_value(true);
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExtractTask::Init(argparse::ArgumentParser& parentParser) {
|
||||||
|
parentParser.add_subparser(parser);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ExtractTask::ShouldRun(argparse::ArgumentParser& parentParser) const {
|
||||||
|
return parentParser.is_subcommand_used("extract");
|
||||||
|
};
|
||||||
|
|
||||||
|
int ExtractTask::Parse() {
|
||||||
|
eupak::tasks::ExtractTask task;
|
||||||
|
eupak::tasks::ExtractTask::Arguments args;
|
||||||
|
|
||||||
|
args.verbose = parser.get<bool>("--verbose");
|
||||||
|
args.inputPath = eupak::fs::path(parser.get("input"));
|
||||||
|
|
||||||
|
if(parser.is_used("--directory")) {
|
||||||
|
args.outputDirectory = eupak::fs::path(parser.get("--directory"));
|
||||||
|
} else {
|
||||||
|
// Default to the basename appended to current path
|
||||||
|
// as a "relatively sane" default path to extract to.
|
||||||
|
// Should be okay.
|
||||||
|
args.outputDirectory = eupak::fs::current_path() / args.inputPath.stem();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ExtractTask::Run() {
|
||||||
|
const auto& args = currentArgs;
|
||||||
|
|
||||||
|
std::cout << "Input PAK/PMDL: " << args.inputPath << '\n';
|
||||||
|
std::cout << "Output Directory: " << args.outputDirectory << '\n';
|
||||||
|
|
||||||
int ExtractTask::Run(Arguments&& args) {
|
|
||||||
std::ifstream ifs(args.inputPath.string(), std::ifstream::binary);
|
std::ifstream ifs(args.inputPath.string(), std::ifstream::binary);
|
||||||
|
|
||||||
if(!ifs) {
|
if(!ifs) {
|
||||||
|
@ -98,4 +156,5 @@ namespace eupak::tasks {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EUPAK_REGISTER_TASK("extract", ExtractTask);
|
||||||
} // namespace eupak::tasks
|
} // namespace eupak::tasks
|
|
@ -11,20 +11,32 @@
|
||||||
|
|
||||||
#include <CommonDefs.hpp>
|
#include <CommonDefs.hpp>
|
||||||
|
|
||||||
|
#include "tasks/Task.hpp"
|
||||||
|
|
||||||
namespace eupak::tasks {
|
namespace eupak::tasks {
|
||||||
|
|
||||||
struct ExtractTask {
|
struct ExtractTask : ITask {
|
||||||
|
ExtractTask();
|
||||||
|
|
||||||
|
void Init(argparse::ArgumentParser& parentParser) override;
|
||||||
|
|
||||||
|
bool ShouldRun(argparse::ArgumentParser& parentParser) const override;
|
||||||
|
|
||||||
|
int Parse() override;
|
||||||
|
|
||||||
|
int Run() override;
|
||||||
|
|
||||||
|
private:
|
||||||
struct Arguments {
|
struct Arguments {
|
||||||
fs::path inputPath;
|
fs::path inputPath;
|
||||||
fs::path outputDirectory;
|
fs::path outputDirectory;
|
||||||
bool verbose;
|
bool verbose;
|
||||||
};
|
};
|
||||||
|
|
||||||
int Run(Arguments&& args);
|
argparse::ArgumentParser parser;
|
||||||
|
Arguments currentArgs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} // namespace eupak::tasks
|
||||||
}
|
|
||||||
|
|
||||||
#endif // EUROPATOOLS_EXTRACTTASK_H
|
#endif // EUROPATOOLS_EXTRACTTASK_H
|
||||||
|
|
Loading…
Reference in a new issue