Only parse AccountOpts if MainOpts tells us to

This commit is contained in:
quentin 2022-08-14 12:48:02 -05:00
parent a3efa59ebb
commit fcec8da6bf
4 changed files with 23 additions and 11 deletions

View File

@ -30,6 +30,18 @@ int main(int argc, char *argv[]) {
OptHandlers::MainOptHandler mainOptHandler(args); OptHandlers::MainOptHandler mainOptHandler(args);
mainOptHandler.parse(); mainOptHandler.parse();
if (mainOptHandler.getSetOpts()->help)
mainOptHandler.help();
if (mainOptHandler.getSetOpts()->account) {
std::vector<char *> 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(); createRequiredFolders();
// Read all accounts saved and store them in accounts // Read all accounts saved and store them in accounts

View File

@ -9,18 +9,17 @@ using namespace Budget::OptHandlers;
void AccountOptHandler::parse() { void AccountOptHandler::parse() {
std::string test;
struct option longOpts[] = { struct option longOpts[] = {
{"help", no_argument, nullptr, 'h'}, {"help", no_argument, nullptr, 'h'},
{"list", no_argument, nullptr, 'l'}, {"list", no_argument, nullptr, 'l'},
{"delete", required_argument, nullptr, 'd'}, {"delete", required_argument, nullptr, 'd'},
{"create", required_argument, nullptr, 'c'}, {"create", required_argument, nullptr, 'c'},
{"value", required_argument, nullptr, 'v'}, {"value", required_argument, nullptr, 'v'},
{nullptr} {nullptr}
}; };
while (true) { 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) { if (opt == -1) {
break; break;
@ -64,7 +63,7 @@ void AccountOptHandler::help() {
fprintf(setOpts.helpOut, " -v --value account Print the current value of account.\n"); 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; return &setOpts;
} }

View File

@ -11,14 +11,13 @@ MainOptHandler::MainOptHandler(const std::vector<char *> &argv) : OptHandler(arg
void MainOptHandler::parse() { void MainOptHandler::parse() {
struct option longOpts[] = { struct option longOpts[] = {
{"help", no_argument, nullptr, 'h'}, {"help", no_argument, nullptr, 'h'},
{"account", no_argument, nullptr, 'a'}, {"account", no_argument, nullptr, 'a'},
{ nullptr } {nullptr}
}; };
while (true) { while (true) {
int opt = getopt_long(getArgc(), getArgv(), "ha", longOpts, nullptr); int opt = getopt_long(getArgc(), getArgv(), "ha", longOpts, nullptr);
if (opt == -1) { if (opt == -1) {
break; break;
} }
@ -29,7 +28,8 @@ void MainOptHandler::parse() {
break; break;
case 'a': case 'a':
setOpts.account = true; setOpts.account = true;
break; setOpts.accountArgStart = optind - 1;
return;
case '?': case '?':
setOpts.help = true; setOpts.help = true;
setOpts.helpOut = stderr; setOpts.helpOut = stderr;
@ -46,6 +46,6 @@ void MainOptHandler::help() {
fprintf(setOpts.helpOut, " -a --account Do budget -a -h for more info.\n"); 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; return &setOpts;
} }

View File

@ -13,6 +13,7 @@ namespace Budget::OptHandlers {
FILE *helpOut = stdout; FILE *helpOut = stdout;
bool help = false; bool help = false;
bool account = false; bool account = false;
int accountArgStart = -1;
}; };
public: public: