From 6208fd94ac934b7caf3a78eb02a7b31978e5aadc Mon Sep 17 00:00:00 2001 From: Shane Jaroch Date: Wed, 21 Jan 2026 14:03:33 -0500 Subject: [PATCH] lint & some database open logic --- include/db/databasemanager.h | 1 + include/mainwindow.h | 3 ++- include/widgets/weightinputdialog.h | 2 +- src/db/databasemanager.cpp | 13 +++++++++++++ src/db/mealrepository.cpp | 6 +++--- src/mainwindow.cpp | 22 ++++++++++++---------- 6 files changed, 32 insertions(+), 15 deletions(-) diff --git a/include/db/databasemanager.h b/include/db/databasemanager.h index 17336fc..764eeb4 100644 --- a/include/db/databasemanager.h +++ b/include/db/databasemanager.h @@ -21,6 +21,7 @@ private: ~DatabaseManager(); void initUserDatabase(); + bool isValidNutraDatabase(const QSqlDatabase& db); QSqlDatabase m_db; QSqlDatabase m_userDb; diff --git a/include/mainwindow.h b/include/mainwindow.h index 07a1caa..32c2ff0 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -3,6 +3,7 @@ #include #include +#include #include "widgets/detailswidget.h" #include "widgets/mealwidget.h" @@ -34,7 +35,7 @@ private: QMenu* recentFilesMenu; static constexpr int MaxRecentFiles = 5; - QAction* recentFileActions[MaxRecentFiles]; + std::array recentFileActions; }; #endif // MAINWINDOW_H diff --git a/include/widgets/weightinputdialog.h b/include/widgets/weightinputdialog.h index e978172..e406f1e 100644 --- a/include/widgets/weightinputdialog.h +++ b/include/widgets/weightinputdialog.h @@ -15,7 +15,7 @@ public: explicit WeightInputDialog(const QString& foodName, const std::vector& servings, QWidget* parent = nullptr); - double getGrams() const; + [[nodiscard]] double getGrams() const; private: QDoubleSpinBox* amountSpinBox; diff --git a/src/db/databasemanager.cpp b/src/db/databasemanager.cpp index e64b75e..de731d4 100644 --- a/src/db/databasemanager.cpp +++ b/src/db/databasemanager.cpp @@ -22,6 +22,13 @@ DatabaseManager::~DatabaseManager() { } } +bool DatabaseManager::isValidNutraDatabase(const QSqlDatabase& db) { + if (!db.isOpen()) return false; + QSqlQuery query(db); + // Check for a critical table, e.g., food_des + return query.exec("SELECT 1 FROM food_des LIMIT 1"); +} + bool DatabaseManager::connect(const QString& path) { if (m_db.isOpen()) { return true; @@ -41,6 +48,12 @@ bool DatabaseManager::connect(const QString& path) { return false; } + if (!isValidNutraDatabase(m_db)) { + qCritical() << "Invalid database: missing essential tables."; + m_db.close(); + return false; + } + return true; } diff --git a/src/db/mealrepository.cpp b/src/db/mealrepository.cpp index 0fd1e14..3fe9bfc 100644 --- a/src/db/mealrepository.cpp +++ b/src/db/mealrepository.cpp @@ -8,7 +8,7 @@ #include "db/databasemanager.h" -MealRepository::MealRepository() {} +MealRepository::MealRepository() = default; void MealRepository::ensureMealNamesLoaded() { if (!m_mealNamesCache.empty()) return; @@ -82,7 +82,7 @@ std::vector MealRepository::getDailyLogs(QDate date) { item.mealId = query.value(2).toInt(); item.grams = query.value(3).toDouble(); - if (m_mealNamesCache.count(item.mealId)) { + if (m_mealNamesCache.count(item.mealId) != 0U) { item.mealName = m_mealNamesCache[item.mealId]; } else { item.mealName = "Unknown"; @@ -113,7 +113,7 @@ std::vector MealRepository::getDailyLogs(QDate date) { } for (auto& item : results) { - if (names.count(item.foodId)) { + if (names.count(item.foodId) != 0U) { item.foodName = names[item.foodId]; } else { item.foodName = "Unknown Food"; // Should not happen if DBs consistent diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 68af697..4779b98 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -15,10 +15,10 @@ #include "widgets/rdasettingswidget.h" MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) { - for (int i = 0; i < MaxRecentFiles; ++i) { - recentFileActions[i] = new QAction(this); - recentFileActions[i]->setVisible(false); - connect(recentFileActions[i], &QAction::triggered, this, &MainWindow::onRecentFileClick); + for (auto& recentFileAction : recentFileActions) { + recentFileAction = new QAction(this); + recentFileAction->setVisible(false); + connect(recentFileAction, &QAction::triggered, this, &MainWindow::onRecentFileClick); } setupUi(); updateRecentFileActions(); @@ -40,7 +40,7 @@ void MainWindow::setupUi() { connect(openDbAction, &QAction::triggered, this, &MainWindow::onOpenDatabase); connect(exitAction, &QAction::triggered, this, &QWidget::close); - for (int i = 0; i < MaxRecentFiles; ++i) recentFilesMenu->addAction(recentFileActions[i]); + for (auto& recentFileAction : recentFileActions) recentFilesMenu->addAction(recentFileAction); // Edit Menu QMenu* editMenu = menuBar()->addMenu("Edit"); @@ -139,15 +139,17 @@ void MainWindow::updateRecentFileActions() { QSettings settings("NutraTech", "Nutra"); QStringList files = settings.value("recentFiles").toStringList(); - int numRecentFiles = qMin(files.size(), MaxRecentFiles); + int numRecentFiles = static_cast( + qMin(static_cast(files.size()), static_cast(MaxRecentFiles))); for (int i = 0; i < numRecentFiles; ++i) { QString text = QString("&%1 %2").arg(i + 1).arg(QFileInfo(files[i]).fileName()); - recentFileActions[i]->setText(text); - recentFileActions[i]->setData(files[i]); - recentFileActions[i]->setVisible(true); + recentFileActions[static_cast(i)]->setText(text); + recentFileActions[static_cast(i)]->setData(files[i]); + recentFileActions[static_cast(i)]->setVisible(true); } - for (int i = numRecentFiles; i < MaxRecentFiles; ++i) recentFileActions[i]->setVisible(false); + for (int i = numRecentFiles; i < MaxRecentFiles; ++i) + recentFileActions[static_cast(i)]->setVisible(false); recentFilesMenu->setEnabled(numRecentFiles > 0); } -- 2.52.0