From fcec8da6bf732ad8e7c6ae1e7ab55cc8444968c2 Mon Sep 17 00:00:00 2001 From: quentin Date: Sun, 14 Aug 2022 12:48:02 -0500 Subject: [PATCH] Only parse AccountOpts if MainOpts tells us to --- src/main.cpp | 12 ++++++++++++ src/optHandlers/accountOptHandler.cpp | 11 +++++------ src/optHandlers/mainOptHandler.cpp | 10 +++++----- src/optHandlers/mainOptHandler.h | 1 + 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 6c1cc2a..dcb0041 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -30,6 +30,18 @@ int main(int argc, char *argv[]) { OptHandlers::MainOptHandler mainOptHandler(args); mainOptHandler.parse(); + if (mainOptHandler.getSetOpts()->help) + mainOptHandler.help(); + + if (mainOptHandler.getSetOpts()->account) { + std::vector vec{argv[0]}; + vec.insert(vec.end(), args.begin() + mainOptHandler.getSetOpts()->accountArgStart, args.end()); + OptHandlers::AccountOptHandler accountOptHandler(vec); + accountOptHandler.parse(); + if (accountOptHandler.getSetOpts()->help) { + accountOptHandler.help(); + } + } createRequiredFolders(); // Read all accounts saved and store them in accounts diff --git a/src/optHandlers/accountOptHandler.cpp b/src/optHandlers/accountOptHandler.cpp index d834b48..cd31b73 100644 --- a/src/optHandlers/accountOptHandler.cpp +++ b/src/optHandlers/accountOptHandler.cpp @@ -9,18 +9,17 @@ using namespace Budget::OptHandlers; void AccountOptHandler::parse() { - std::string test; struct option longOpts[] = { - {"help", no_argument, nullptr, 'h'}, - {"list", no_argument, nullptr, 'l'}, + {"help", no_argument, nullptr, 'h'}, + {"list", no_argument, nullptr, 'l'}, {"delete", required_argument, nullptr, 'd'}, {"create", required_argument, nullptr, 'c'}, - {"value", required_argument, nullptr, 'v'}, + {"value", required_argument, nullptr, 'v'}, {nullptr} }; while (true) { - int opt = getopt_long(getArgc(), getArgv(), "hl::d::c::v", longOpts, nullptr); + int opt = getopt_long(getArgc(), getArgv(), "hl::d::c::va", longOpts, nullptr); if (opt == -1) { break; @@ -64,7 +63,7 @@ void AccountOptHandler::help() { fprintf(setOpts.helpOut, " -v --value account Print the current value of account.\n"); } -const SetOpts *AccountOptHandler::getSetOpts() const { +const AccountOptHandler::SetOpts *AccountOptHandler::getSetOpts() const { return &setOpts; } diff --git a/src/optHandlers/mainOptHandler.cpp b/src/optHandlers/mainOptHandler.cpp index 2ba3dfb..afd8921 100644 --- a/src/optHandlers/mainOptHandler.cpp +++ b/src/optHandlers/mainOptHandler.cpp @@ -11,14 +11,13 @@ MainOptHandler::MainOptHandler(const std::vector &argv) : OptHandler(arg void MainOptHandler::parse() { struct option longOpts[] = { - {"help", no_argument, nullptr, 'h'}, + {"help", no_argument, nullptr, 'h'}, {"account", no_argument, nullptr, 'a'}, - { nullptr } + {nullptr} }; while (true) { int opt = getopt_long(getArgc(), getArgv(), "ha", longOpts, nullptr); - if (opt == -1) { break; } @@ -29,7 +28,8 @@ void MainOptHandler::parse() { break; case 'a': setOpts.account = true; - break; + setOpts.accountArgStart = optind - 1; + return; case '?': setOpts.help = true; setOpts.helpOut = stderr; @@ -46,6 +46,6 @@ void MainOptHandler::help() { fprintf(setOpts.helpOut, " -a --account Do budget -a -h for more info.\n"); } -const SetOpts *MainOptHandler::getSetOpts() const { +const MainOptHandler::SetOpts *MainOptHandler::getSetOpts() const { return &setOpts; } diff --git a/src/optHandlers/mainOptHandler.h b/src/optHandlers/mainOptHandler.h index 0a65f96..aa2c784 100644 --- a/src/optHandlers/mainOptHandler.h +++ b/src/optHandlers/mainOptHandler.h @@ -13,6 +13,7 @@ namespace Budget::OptHandlers { FILE *helpOut = stdout; bool help = false; bool account = false; + int accountArgStart = -1; }; public: