Browse Source

Added databaseSummary function and further implemented backupwidget

George 4 years ago
parent
commit
84b8e3d6b3
3 changed files with 62 additions and 13 deletions
  1. 51 0
      src/database/adatabase.cpp
  2. 2 1
      src/database/adatabase.h
  3. 9 12
      src/gui/widgets/backupwidget.cpp

+ 51 - 0
src/database/adatabase.cpp

@@ -652,3 +652,54 @@ QVector<QVariant> ADatabase::customQuery(QString statement, int return_values)
         return result;
     }
 }
+
+QStringList ADatabase::databaseSummary(const QString &db_path)
+{
+    const QString connection_name = QStringLiteral("summary_connection");
+    QStringList return_values;
+    // List layout: {"# Flights", "# Aircraft", "# Pilots", "ISODate last flight", "Total Time hh:mm"}
+
+    { // scope for a temporary database connection, ensures proper cleanup when removeDatabase() is called.
+        DEB << "Adding temporary connection to database:" << db_path;
+        QSqlDatabase temp_database = QSqlDatabase::addDatabase(SQLITE_DRIVER, connection_name); // Don't use default connection
+        temp_database.setDatabaseName(db_path);
+        if (!temp_database.open())
+            return QStringList();
+
+        const QStringList table_list = QStringList {
+                QStringLiteral("flights"),
+                QStringLiteral("tails"),
+                QStringLiteral("pilots")};
+        QSqlQuery query(temp_database);
+        for (const auto & table : table_list) {
+            query.prepare(QLatin1String("SELECT COUNT (*) FROM ") + table);
+            query.exec();
+            if (query.first())
+                return_values.append(query.value(0).toString());
+            else
+                return_values.append(QString());
+        }
+
+        query.prepare(QStringLiteral("SELECT MAX(doft) FROM flights"));
+        query.exec();
+        if (query.first())
+            return_values.append(query.value(0).toString());
+        else
+            return_values.append(QString());
+
+        query.prepare(QStringLiteral("SELECT "
+                                     "printf(\"%02d\",CAST(SUM(tblk) AS INT)/60)"
+                                     "||':'||"
+                                     "printf(\"%02d\",CAST(SUM(tblk) AS INT)%60) FROM flights"));
+        query.exec();
+        if (query.first())
+            return_values.append(query.value(0).toString());
+        else
+            return_values.append(QString());
+    }
+
+    QSqlDatabase::removeDatabase(connection_name); // cleanly removes temp connection without leaks since query+db are out of scope
+    DEB << return_values;
+
+    return return_values;
+}

+ 2 - 1
src/database/adatabase.h

@@ -101,6 +101,7 @@ public:
     ADatabase(const ADatabase&) = delete;
     void operator=(const ADatabase&) = delete;
     static ADatabase* instance();
+
     TableNames_T getTableNames() const;
     ColumnNames_T getTableColumns(TableName_T table_name) const;
     void updateLayout();
@@ -258,7 +259,7 @@ public:
      */
     ATailEntry resolveForeignTail(RowId_T foreign_key);
 
-
+    QStringList databaseSummary(const QString& db_path);
 
 
 

+ 9 - 12
src/gui/widgets/backupwidget.cpp

@@ -2,6 +2,7 @@
 #include "ui_backupwidget.h"
 #include "src/classes/astandardpaths.h"
 #include "src/testing/adebug.h"
+#include "src/database/adatabase.h"
 
 #include <QListView>
 #include <QStandardItemModel>
@@ -88,21 +89,17 @@ void BackupWidget::fillTableWithSampleData()
         filenames.append(item);
     }
 
-    // TODO
     // Second column, would be created by reading the details from each file and creating the description string
-    QList<QStandardItem *> descriptions{};
-    QStringList descriptions_string_list {
-        "2020-02-12 - 512 Flights, 25 Aircraft, 44 Pilots, 1640:47 Total Time, Last Flight 2020-01-23",
-        "2020-01-15 - 476 Flights, 24 Aircraft, 42 Pilots, 1490:23 Total Time, Last Flight 2019-12-06",
-        "2020-12-23 - 452 Flights, 19 Aircraft, 39 Pilots, 1460:34 Total Time, Last Flight 2019-11-23",
-        "2020-11-21 - 435 Flights, 17 Aircraft, 33 Pilots, 1373:25 Total Time, Last Flight 2019-10-16",
-        "2020-10-30 - 419 Flights, 15 Aircraft, 12 Pilots, 1337:02 Total Time, Last Flight 2019-09-24",
-    };
-    for (const auto &string : descriptions_string_list) {
-        auto item = new QStandardItem(string);
-        descriptions.append(item);
+    QList<QStandardItem *> descriptions;
+    for (const auto &entry : entries) {
+        QStringList summary = aDB->databaseSummary(entry);
+        auto item = new QStandardItem(summary.join(", "));
+        descriptions.prepend(item);  // Make a O(1) op here and deal with sorting later
     }
 
+    // [G]: Sort entries? based on what? the files are abit inconsistent in their naming atm
+    // but i assume we could sort based on the time in the file name?
+
     model = new QStandardItemModel(this);
     model->insertColumn(0, filenames);
     model->insertColumn(1, descriptions);