From 23b0abd4cb49b1029fcf2718b13c741500b6814e Mon Sep 17 00:00:00 2001 From: quentin Date: Mon, 5 Sep 2022 20:38:07 -0500 Subject: [PATCH] data can now flush to file --- src/data/data.h | 5 ++-- src/data/data.tpp | 26 +++++++++++++++-- src/main.cpp | 40 +++++++++++++++++---------- src/optHandlers/accountOptHandler.cpp | 3 +- src/optHandlers/mainOptHandler.cpp | 2 +- 5 files changed, 53 insertions(+), 23 deletions(-) diff --git a/src/data/data.h b/src/data/data.h index 17a1f47..df79205 100644 --- a/src/data/data.h +++ b/src/data/data.h @@ -15,14 +15,13 @@ class Data { public: rapidjson::Document document; - explicit Data(std::string file); virtual T createObject() = 0; std::string getFilePath(); - - + + void flushToFile(); private: const std::string fileName; const std::string homeDirectory = getpwuid(getuid())->pw_dir; diff --git a/src/data/data.tpp b/src/data/data.tpp index e2a890a..1f36501 100644 --- a/src/data/data.tpp +++ b/src/data/data.tpp @@ -8,13 +8,24 @@ #include #include #include +#include +#include template Data::Data(std::string file) : fileName(std::move(file)) { // Create file if it doesnt exist - std::fstream fstream(getFilePath(), std::ios::out | std::ios::app); - fstream.close(); + std::ifstream chkExistIfs; + chkExistIfs.open(getFilePath()); + if (chkExistIfs) { + // File exists, were not creating one + chkExistIfs.close(); + } + else { + // File doesnt exist we need to create one + chkExistIfs.close(); + + }; std::ifstream ifstream(getFilePath(), std::ios::in | std::ios::binary | std::ios::ate); std::ifstream::pos_type fileSize = ifstream.tellg(); @@ -32,3 +43,14 @@ template std::string Data::getFilePath() { return fileName; } + +template +void Data::flushToFile() { + rapidjson::StringBuffer buffer; + rapidjson::Writer writer(buffer); + document.Accept(writer); + + std::ofstream file(getFilePath()); + file << buffer.GetString(); + file.close(); +} diff --git a/src/main.cpp b/src/main.cpp index dcb0041..a9ed0cc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,37 +12,31 @@ #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(homeDirectory + "/.config/budget/"); - std::filesystem::create_directories(homeDirectory + "/.local/share/budget"); - std::filesystem::create_directories(homeDirectory + "/.local/share/budget/accounts"); - std::filesystem::create_directories(homeDirectory + "/.local/share/budget/receipts"); + 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); + std::cout << opterr; + // Parse main options (-ah) 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 std::list accounts; @@ -50,5 +44,21 @@ int main(int argc, char *argv[]) { homeDirectory + "/.local/share/budget/accounts")) { accounts.emplace_back(AccountData(file.path())); } + + // 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) { + AccountData account(storageD + "accounts/" + accountOptHandler.getSetOpts()->createAccount + ".json"); + } + } return 0; } diff --git a/src/optHandlers/accountOptHandler.cpp b/src/optHandlers/accountOptHandler.cpp index cd31b73..2d3a552 100644 --- a/src/optHandlers/accountOptHandler.cpp +++ b/src/optHandlers/accountOptHandler.cpp @@ -15,11 +15,10 @@ void AccountOptHandler::parse() { {"delete", required_argument, nullptr, 'd'}, {"create", required_argument, nullptr, 'c'}, {"value", required_argument, nullptr, 'v'}, - {nullptr} }; while (true) { - int opt = getopt_long(getArgc(), getArgv(), "hl::d::c::va", longOpts, nullptr); + int opt = getopt_long(getArgc(), getArgv(), "hld:c:v:a", longOpts, nullptr); if (opt == -1) { break; diff --git a/src/optHandlers/mainOptHandler.cpp b/src/optHandlers/mainOptHandler.cpp index afd8921..5dc7fdc 100644 --- a/src/optHandlers/mainOptHandler.cpp +++ b/src/optHandlers/mainOptHandler.cpp @@ -2,6 +2,7 @@ // Created by quentin on 8/13/22. // +#include #include "mainOptHandler.h" using namespace Budget::OptHandlers; @@ -13,7 +14,6 @@ void MainOptHandler::parse() { struct option longOpts[] = { {"help", no_argument, nullptr, 'h'}, {"account", no_argument, nullptr, 'a'}, - {nullptr} }; while (true) {