]> Nutra Git (v1) - nutratech/gui.git/commitdiff
lint & some database open logic
authorShane Jaroch <chown_tee@proton.me>
Wed, 21 Jan 2026 19:03:33 +0000 (14:03 -0500)
committerShane Jaroch <chown_tee@proton.me>
Wed, 21 Jan 2026 19:03:40 +0000 (14:03 -0500)
include/db/databasemanager.h
include/mainwindow.h
include/widgets/weightinputdialog.h
src/db/databasemanager.cpp
src/db/mealrepository.cpp
src/mainwindow.cpp

index 17336fcae048e1db5c061400b614b988f9e28ce7..764eeb43f7399566b69b555cfaa6a1b16a134131 100644 (file)
@@ -21,6 +21,7 @@ private:
     ~DatabaseManager();
 
     void initUserDatabase();
+    bool isValidNutraDatabase(const QSqlDatabase& db);
 
     QSqlDatabase m_db;
     QSqlDatabase m_userDb;
index 07a1caa21d7bd8e91345a7b684f205ca205bd9ca..32c2ff0e28f7883bb2436bc87f2840804722f9ac 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <QMainWindow>
 #include <QTabWidget>
+#include <array>
 
 #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<QAction*, MaxRecentFiles> recentFileActions;
 };
 
 #endif  // MAINWINDOW_H
index e9781725e3fecca1fd2e128f18a8ec79f3249db3..e406f1efbd5df2cb7903b51c15f05e83eda66803 100644 (file)
@@ -15,7 +15,7 @@ public:
     explicit WeightInputDialog(const QString& foodName, const std::vector<ServingWeight>& servings,
                                QWidget* parent = nullptr);
 
-    double getGrams() const;
+    [[nodiscard]] double getGrams() const;
 
 private:
     QDoubleSpinBox* amountSpinBox;
index e64b75edebf959449c5f45ad99256e1bd9c64c30..de731d45392f3c94088c70e75b1d316641c57935 100644 (file)
@@ -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;
 }
 
index 0fd1e14d22e46f1dde9b570330cb69f3b3117746..3fe9bfceafeb9b0b09a226fa6cebce1e8e0b3a62 100644 (file)
@@ -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<MealLogItem> 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<MealLogItem> 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
index 68af6972bb69d3fa5cf4b9d01de86abc92a32fad..4779b98101e00b72188efd2432e65afa3d82e0aa 100644 (file)
 #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<int>(
+        qMin(static_cast<std::size_t>(files.size()), static_cast<std::size_t>(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<std::size_t>(i)]->setText(text);
+        recentFileActions[static_cast<std::size_t>(i)]->setData(files[i]);
+        recentFileActions[static_cast<std::size_t>(i)]->setVisible(true);
     }
-    for (int i = numRecentFiles; i < MaxRecentFiles; ++i) recentFileActions[i]->setVisible(false);
+    for (int i = numRecentFiles; i < MaxRecentFiles; ++i)
+        recentFileActions[static_cast<std::size_t>(i)]->setVisible(false);
 
     recentFilesMenu->setEnabled(numRecentFiles > 0);
 }