From c946bf6924339e5f62d34cc8cf6d1aa079b7b625 Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Tue, 17 Jul 2018 08:25:41 +0200 Subject: [PATCH 1/3] set some infos globally --- src/gui/kima2.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/kima2.cpp b/src/gui/kima2.cpp index cb210ef..47260c7 100644 --- a/src/gui/kima2.cpp +++ b/src/gui/kima2.cpp @@ -11,6 +11,10 @@ int main(int argc, char* argv[]) QApplication kimaApp{argc, argv}; + QCoreApplication::setOrganizationName("RustySoft"); + QCoreApplication::setOrganizationDomain("rustysoft.de"); + QCoreApplication::setApplicationName("KIMA2"); + auto mainWin = std::make_unique(); mainWin->show(); From 5eef98074e997416d61bd2768c7aba7b1872f34f Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Tue, 17 Jul 2018 10:19:41 +0200 Subject: [PATCH 2/3] create db at the right place --- src/core/database.cpp | 37 +++++++++++++++++++++++++++++++------ src/core/database.h | 7 ++++--- src/core/marketplace.cpp | 5 ++--- src/gui/CMakeLists.txt | 2 +- src/gui/kima2.cpp | 5 +---- test/test_database.cpp | 6 +----- 6 files changed, 40 insertions(+), 22 deletions(-) diff --git a/src/core/database.cpp b/src/core/database.cpp index 11c8b68..ea990ba 100644 --- a/src/core/database.cpp +++ b/src/core/database.cpp @@ -1,17 +1,36 @@ #include "database.h" +#include #include #include #include -Database::Database(const std::string& dbname) : db_(nullptr) +Database::Database(const std::string& dbname) { dbname_ = dbname; - const int errCode = sqlite3_open(dbname_.c_str(), &db_); - if (errCode) { - throw std::runtime_error("Could not open database file."); + init(); +} + +Database::Database() +{ + namespace fs = std::filesystem; +#if defined(__linux__) + fs::path dbpath = fs::path(std::getenv("HOME")) / ".local/share/kima2-cpp"; +#elif defined(__WIN64) || defined(__WIN32) + fs::path dbpath = fs::path(std::getenv("LOCALAPPDATA") / "/kima2-cpp"; +#else + throw std::runtime_error("Platform not supported."); +#endif + if (!fs::exists(dbpath)) { + try { + fs::create_directories(dbpath); + } catch (fs::filesystem_error& err) { + throw err; + } } - sqlite3_db_config(db_, SQLITE_DBCONFIG_ENABLE_FKEY); + dbpath /= "kima2.db"; + dbname_ = dbpath.string(); + init(); } Database::~Database() { sqlite3_close(db_); } @@ -82,6 +101,12 @@ void Database::createNew() void Database::init() { + const int errCode = sqlite3_open(dbname_.c_str(), &db_); + if (errCode) { + throw std::runtime_error("Could not open database file."); + } + sqlite3_db_config(db_, SQLITE_DBCONFIG_ENABLE_FKEY); + int version = getVersion(); switch (version) { @@ -253,7 +278,7 @@ unsigned int Database::storeSellers(std::vector>& seller endTransaction(); - // Everything went fine, so we can now update our objects + // Everything went fine, so we can now update our objects sellers.erase(std::remove_if(sellers.begin(), sellers.end(), [](const std::unique_ptr& seller) { return (seller->getState() == Seller::State::DELETE); diff --git a/src/core/database.h b/src/core/database.h index 5fe126c..6040087 100644 --- a/src/core/database.h +++ b/src/core/database.h @@ -10,17 +10,18 @@ class Database { public: - Database(const std::string& dbname); + explicit Database(const std::string& dbname); + Database(); ~Database(); Database(const Database&) = delete; Database& operator=(const Database&) = delete; void exec(const std::string& sql); - void init(); unsigned int storeSellers(std::vector>& sellers); private: - sqlite3* db_; + sqlite3* db_{nullptr}; std::string dbname_; + void init(); void beginTransaction(); void endTransaction(); void createNew(); diff --git a/src/core/marketplace.cpp b/src/core/marketplace.cpp index 2534905..e1fcc57 100644 --- a/src/core/marketplace.cpp +++ b/src/core/marketplace.cpp @@ -12,10 +12,9 @@ Marketplace::Marketplace() void Marketplace::storeToDb() { - const std::string DB_PATH{"/tmp/kima2.db"}; + //const std::string DB_PATH{"/tmp/kima2.db"}; - Database db(DB_PATH); - db.init(); + Database db; db.storeSellers(sellers_); } diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 0ddff48..d17aaa6 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -18,4 +18,4 @@ set(GUI_SOURCES ) add_executable(kima2 ${GUI_SOURCES}) -target_link_libraries(kima2 core Qt5::Widgets) +target_link_libraries(kima2 core Qt5::Widgets stdc++fs) diff --git a/src/gui/kima2.cpp b/src/gui/kima2.cpp index 47260c7..6b2d555 100644 --- a/src/gui/kima2.cpp +++ b/src/gui/kima2.cpp @@ -1,13 +1,10 @@ #include "mainwindow.h" -#include - #include - int main(int argc, char* argv[]) { - //Q_INIT_RESOURCE(application); + // Q_INIT_RESOURCE(application); QApplication kimaApp{argc, argv}; diff --git a/test/test_database.cpp b/test/test_database.cpp index 9fda5df..ef2a20f 100644 --- a/test/test_database.cpp +++ b/test/test_database.cpp @@ -9,14 +9,12 @@ BOOST_AUTO_TEST_CASE(create_database) { - Database db(":memory:"); - BOOST_CHECK_NO_THROW(db.init()); + BOOST_CHECK_NO_THROW(Database db(":memory:")); } BOOST_AUTO_TEST_CASE(store_seller_fail) { Database db(":memory:"); - db.init(); std::vector> sellers; sellers.push_back(std::make_unique()); sellers.push_back(std::make_unique()); @@ -25,7 +23,6 @@ BOOST_AUTO_TEST_CASE(store_seller_fail) BOOST_AUTO_TEST_CASE(store_sellers_succ) { Database db(":memory:"); - db.init(); std::vector> sellers; auto a = std::make_unique(); a->createUuid(); @@ -47,7 +44,6 @@ BOOST_AUTO_TEST_CASE(store_sellers_succ) BOOST_AUTO_TEST_CASE(seller_states) { Database db(":memory:"); - db.init(); std::vector> sellers; auto a = std::make_unique(); a->setSellerNo(3); From 300c883fdc6e2f3d788de810c1b21dcbd5a9bab7 Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Tue, 17 Jul 2018 10:37:21 +0200 Subject: [PATCH 3/3] show something in the statusbar. --- src/gui/mainwindow.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 3cf4428..8734a64 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -2,14 +2,19 @@ #include "sellerdialog.h" +constexpr int STATUSBAR_TIMEOUT = 5000; + MainWindow::MainWindow() { ui_.setupUi(this); connect(ui_.actionQuit, &QAction::triggered, qApp, QApplication::quit); - connect(ui_.actionEditSeller, &QAction::triggered, this, &MainWindow::on_actionEditSeller_triggered); + connect(ui_.actionEditSeller, &QAction::triggered, this, + &MainWindow::on_actionEditSeller_triggered); marketplace_ = std::make_unique(); + marketplace_->loadFromDb(); + statusBar()->showMessage("Gespeicherte Daten wurden geladen.", STATUSBAR_TIMEOUT); } void MainWindow::on_actionEditSeller_triggered() @@ -18,7 +23,11 @@ void MainWindow::on_actionEditSeller_triggered() int retCode = dialog->exec(); if (retCode == QDialog::Accepted) { marketplace_->storeToDb(); + statusBar()->showMessage("Änderungen an den Verkäufer-Stammdaten gespeichert.", + STATUSBAR_TIMEOUT); } else { marketplace_->loadFromDb(); + statusBar()->showMessage("Änderungen an den Verkäufer-Stammdaten verworfen.", + STATUSBAR_TIMEOUT); } } \ No newline at end of file