// // Created by quentin on 8/3/22. // #include "main.h" #include "data/accountData.h" #include "optHandlers/accountOptHandler.h" #include "optHandlers/mainOptHandler.h" #include #include #include #include #include #include using namespace Budget; const std::string homeDirectory = getpwuid(getuid())->pw_dir; const std::string configD = homeDirectory + "/.config/budget/"; const std::string storageD = homeDirectory + "/.local/share/budget/"; void createRequiredFolders() { std::filesystem::create_directory(configD); std::filesystem::create_directories(storageD); std::filesystem::create_directories(storageD + "accounts"); std::filesystem::create_directories(storageD + "receipts"); } int main(int argc, char *argv[]) { std::vector args(argv, argv + argc); // Parse main options (-ah) OptHandlers::MainOptHandler mainOptHandler(args); mainOptHandler.parse(); if (mainOptHandler.getSetOpts()->help) mainOptHandler.help(); createRequiredFolders(); // Read all accounts saved and store them in accounts std::unordered_map accounts; for (const auto &file : std::filesystem::directory_iterator( homeDirectory + "/.local/share/budget/accounts")) { AccountData account(file.path()); accounts.insert(std::pair(account.getAccount()->getName(), account)); } // Parse account options if main options tells us to. 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(); // Do what we need to do for parsed options if (accountOptHandler.getSetOpts()->help) { accountOptHandler.help(); } if (accountOptHandler.getSetOpts()->create) { auto a = accounts.find(accountOptHandler.getSetOpts()->delAccount); if (a == accounts.end()) { accounts.emplace(std::piecewise_construct, std::make_tuple(accountOptHandler.getSetOpts()->createAccount), std::make_tuple( storageD + "accounts/" + accountOptHandler.getSetOpts()->createAccount + ".json", accountOptHandler.getSetOpts()->createAccount)); } else { std::cout << "Account " << accountOptHandler.getSetOpts()->delAccount << " already exists." << std::endl; } } if (accountOptHandler.getSetOpts()->value) { auto a = accounts.find(accountOptHandler.getSetOpts()->valueAccount); if (a != accounts.end()) { std::cout << "Account value: " << a->second.getAccount()->getValue() << std::endl; } } if (accountOptHandler.getSetOpts()->del) { auto a = accounts.find(accountOptHandler.getSetOpts()->delAccount); if (a != accounts.end()) { accounts.erase(a); std::cout << "Deleted account: " << accountOptHandler.getSetOpts()->delAccount << std::endl; } } if (accountOptHandler.getSetOpts()->list) { std::cout << "Accounts: " << std::endl; for (auto &accountPair : accounts) { std::cout << accountPair.second.getAccount()->getName() << ": " << std::endl; std::cout << " Value: " << accountPair.second.getAccount()->getValue() << std::endl; } } } return 0; }