budget/src/main.cpp

60 lines
1.4 KiB
C++

//
// Created by quentin on 8/3/22.
//
#include "optHandlers/mainOptHandler.h"
#include "exceptions/helpRequested.h"
#include "exceptions/badValue.h"
#include <pwd.h>
#include <unistd.h>
#include <string>
#include <filesystem>
#include <sqlite3.h>
#include <iostream>
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/";
const std::string databaseFile = homeDirectory + "/.local/share/budget/budget.sqlite";
void createRequiredFolders() {
std::filesystem::create_directory(configD);
std::filesystem::create_directories(storageD);
std::filesystem::create_directories(storageD + "receipts");
}
int main(int argc, char *argv[]) {
sqlite3 *db;
int rc;
rc = sqlite3_open(databaseFile.c_str(), &db);
if (rc != SQLITE_OK) {
throw std::runtime_error("Error opening database connection.");
}
std::vector<char *> args(argv, argv + argc);
try {
OptHandlers::MainOptHandler moh(args, db);
std::queue<std::unique_ptr<OptHandlers::Operation>> *opts = &moh.operations;
while (!opts->empty()) {
opts->front()->commit();
opts->pop();
}
} catch (const Budget::Exceptions::HelpRequested &e) {
return 0;
} catch (const Budget::Exceptions::BadValue &e) {
std::cout << e.what() << std::endl;
return 1;
}
sqlite3_close_v2(db);
return 0;
}