|  | @@ -1,6 +1,9 @@
 | 
	
		
			
				|  |  |  #include "debugwidget.h"
 | 
	
		
			
				|  |  |  #include "ui_debugwidget.h"
 | 
	
		
			
				|  |  |  #include "src/classes/astandardpaths.h"
 | 
	
		
			
				|  |  | +#include "src/gui/widgets/logbookwidget.h"
 | 
	
		
			
				|  |  | +#include "src/gui/widgets/pilotswidget.h"
 | 
	
		
			
				|  |  | +#include "src/gui/widgets/aircraftwidget.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  DebugWidget::DebugWidget(QWidget *parent) :
 | 
	
		
			
				|  |  |      QWidget(parent),
 | 
	
	
		
			
				|  | @@ -24,10 +27,9 @@ void DebugWidget::on_resetUserTablesPushButton_clicked()
 | 
	
		
			
				|  |  |      ATimer timer(this);
 | 
	
		
			
				|  |  |      QMessageBox result;
 | 
	
		
			
				|  |  |      if (ADataBaseSetup::resetToDefault()){
 | 
	
		
			
				|  |  | -        result.setText("Database successfully reset.\n\nRestarting app.");
 | 
	
		
			
				|  |  | +        result.setText("Database successfully reset");
 | 
	
		
			
				|  |  |          result.exec();
 | 
	
		
			
				|  |  | -        qApp->quit();
 | 
	
		
			
				|  |  | -        QProcess::startDetached(qApp->arguments()[0], qApp->arguments());
 | 
	
		
			
				|  |  | +        emit aDB()->dataBaseUpdated();
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  |          result.setText("Errors have occurred. Check console for Debug output. ");
 | 
	
		
			
				|  |  |          result.exec();
 | 
	
	
		
			
				|  | @@ -37,52 +39,47 @@ void DebugWidget::on_resetUserTablesPushButton_clicked()
 | 
	
		
			
				|  |  |  void DebugWidget::on_resetDatabasePushButton_clicked()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      ATimer timer(this);
 | 
	
		
			
				|  |  | -    QMessageBox mb(this);
 | 
	
		
			
				|  |  | -    //check if template dir exists and create if needed.
 | 
	
		
			
				|  |  | -    QDir dir("data/templates");
 | 
	
		
			
				|  |  | -    DEB << dir.path();
 | 
	
		
			
				|  |  | -    if (!dir.exists())
 | 
	
		
			
				|  |  | -        dir.mkpath(".");
 | 
	
		
			
				|  |  | +    QMessageBox message_box(this);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      // download latest csv
 | 
	
		
			
				|  |  | -    QStringList templateTables = {"aircraft", "airports", "changelog"};
 | 
	
		
			
				|  |  | -    QString linkStub = "https://raw.githubusercontent.com/fiffty-50/openpilotlog/";
 | 
	
		
			
				|  |  | -    linkStub.append(ui->branchLineEdit->text());
 | 
	
		
			
				|  |  | -    linkStub.append("/assets/database/templates/");
 | 
	
		
			
				|  |  | -    for (const auto& table : templateTables) {
 | 
	
		
			
				|  |  | +    QString link_stub = "https://raw.githubusercontent.com/fiffty-50/openpilotlog/";
 | 
	
		
			
				|  |  | +    link_stub.append(ui->branchLineEdit->text()); // optionally select branch for development
 | 
	
		
			
				|  |  | +    link_stub.append("/assets/database/templates/");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    QStringList template_tables = {"aircraft", "airports", "changelog"};
 | 
	
		
			
				|  |  | +    QDir template_dir(AStandardPaths::absPathOf(AStandardPaths::Templates));
 | 
	
		
			
				|  |  | +    for (const auto& table : template_tables) {
 | 
	
		
			
				|  |  |          QEventLoop loop;
 | 
	
		
			
				|  |  |          ADownload* dl = new ADownload;
 | 
	
		
			
				|  |  | -        connect(dl, &ADownload::done, &loop, &QEventLoop::quit );
 | 
	
		
			
				|  |  | -        dl->setTarget(QUrl(linkStub + table + ".csv"));
 | 
	
		
			
				|  |  | -        dl->setFileName("data/templates/" + table + ".csv");
 | 
	
		
			
				|  |  | +        QObject::connect(dl, &ADownload::done, &loop, &QEventLoop::quit );
 | 
	
		
			
				|  |  | +        dl->setTarget(QUrl(link_stub % table % QStringLiteral(".csv")));
 | 
	
		
			
				|  |  | +        dl->setFileName(template_dir.filePath(table % QStringLiteral(".csv")));
 | 
	
		
			
				|  |  |          dl->download();
 | 
	
		
			
				|  |  |          loop.exec(); // event loop waits for download done signal before allowing loop to continue
 | 
	
		
			
				|  |  |          dl->deleteLater();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    //close database connection
 | 
	
		
			
				|  |  | +    // back up old db
 | 
	
		
			
				|  |  |      aDB()->disconnect();
 | 
	
		
			
				|  |  | +    ADataBaseSetup::backupOldData();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // back up and remove old database
 | 
	
		
			
				|  |  | -    auto oldDatabase = QFile("data/logbook.db");
 | 
	
		
			
				|  |  | -    if (oldDatabase.exists()) {
 | 
	
		
			
				|  |  | -        auto dateString = QDateTime::currentDateTime().toString(Qt::ISODate);
 | 
	
		
			
				|  |  | -        DEB << "Backing up old database as: " << "logbook-backup-" + dateString + ".db";
 | 
	
		
			
				|  |  | -        if (oldDatabase.copy("data/logbook-backup-" + dateString + ".db")) {
 | 
	
		
			
				|  |  | -            oldDatabase.remove();
 | 
	
		
			
				|  |  | -            DEB << "Old Database removed.";
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  |      // re-connct and create new database
 | 
	
		
			
				|  |  |      aDB()->connect();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      if (ADataBaseSetup::createDatabase()) {
 | 
	
		
			
				|  |  | -        mb.setText("Database has been successfully reset.\n\nRestarting application.");
 | 
	
		
			
				|  |  | -        mb.exec();
 | 
	
		
			
				|  |  | -        qApp->quit();
 | 
	
		
			
				|  |  | -        QProcess::startDetached(qApp->arguments()[0], qApp->arguments());
 | 
	
		
			
				|  |  | +        DEB << "Database has been successfully created.";
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  | -        mb.setText("Errors have ocurred. Check console for details.");
 | 
	
		
			
				|  |  | +        message_box.setText("Errors have ocurred creating the database.<br>"
 | 
	
		
			
				|  |  | +                            "Check console for details.");
 | 
	
		
			
				|  |  | +        message_box.exec();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (ADataBaseSetup::importDefaultData()) {
 | 
	
		
			
				|  |  | +        message_box.setText("Database has been successfully reset.");
 | 
	
		
			
				|  |  | +        emit aDB()->dataBaseUpdated();
 | 
	
		
			
				|  |  | +        message_box.exec();
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +        message_box.setText("Errors have ocurred while importing templates.<br>"
 | 
	
		
			
				|  |  | +                            "Check console for details.");
 | 
	
		
			
				|  |  | +        message_box.exec();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -94,24 +91,21 @@ void DebugWidget::downloadFinished()
 | 
	
		
			
				|  |  |  void DebugWidget::on_fillUserDataPushButton_clicked()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      ATimer timer(this);
 | 
	
		
			
				|  |  | -    QMessageBox mb(this);
 | 
	
		
			
				|  |  | -    //check if template dir exists and create if needed.
 | 
	
		
			
				|  |  | -    QDir dir("data/templates");
 | 
	
		
			
				|  |  | -    DEB << dir.path();
 | 
	
		
			
				|  |  | -    if (!dir.exists())
 | 
	
		
			
				|  |  | -        dir.mkpath(".");
 | 
	
		
			
				|  |  | +    QMessageBox message_box(this);
 | 
	
		
			
				|  |  |      // download latest csv
 | 
	
		
			
				|  |  |      QStringList userTables = {"pilots", "tails", "flights"};
 | 
	
		
			
				|  |  |      QString linkStub = "https://raw.githubusercontent.com/fiffty-50/openpilotlog/";
 | 
	
		
			
				|  |  |      linkStub.append(ui->branchLineEdit->text());
 | 
	
		
			
				|  |  |      linkStub.append("/assets/database/templates/sample_");
 | 
	
		
			
				|  |  | +    QDir template_dir(AStandardPaths::absPathOf(AStandardPaths::Templates));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      for (const auto& table : userTables) {
 | 
	
		
			
				|  |  |          QEventLoop loop;
 | 
	
		
			
				|  |  |          ADownload* dl = new ADownload;
 | 
	
		
			
				|  |  |          connect(dl, &ADownload::done, &loop, &QEventLoop::quit );
 | 
	
		
			
				|  |  |          dl->setTarget(QUrl(linkStub + table + ".csv"));
 | 
	
		
			
				|  |  | -        dl->setFileName("data/templates/sample_" + table + ".csv");
 | 
	
		
			
				|  |  | +        dl->setFileName(template_dir.filePath("sample_" + table % QStringLiteral(".csv")));
 | 
	
		
			
				|  |  | +        //dl->setFileName("data/templates/sample_" + table + ".csv");
 | 
	
		
			
				|  |  |          dl->download();
 | 
	
		
			
				|  |  |          loop.exec(); // event loop waits for download done signal before allowing loop to continue
 | 
	
		
			
				|  |  |          dl->deleteLater();
 | 
	
	
		
			
				|  | @@ -120,26 +114,28 @@ void DebugWidget::on_fillUserDataPushButton_clicked()
 | 
	
		
			
				|  |  |      allGood.resize(userTables.size());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      for (const auto& table : userTables) {
 | 
	
		
			
				|  |  | -        auto data = aReadCsv("data/templates/sample_" + table + ".csv");
 | 
	
		
			
				|  |  | +        auto data = aReadCsv(AStandardPaths::absPathOf(AStandardPaths::Templates)
 | 
	
		
			
				|  |  | +                             + "/sample_" + table + ".csv");
 | 
	
		
			
				|  |  |          allGood.setBit(userTables.indexOf(table), ADataBaseSetup::commitData(data, table));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (allGood.count(true) != userTables.size()) {
 | 
	
		
			
				|  |  | -        mb.setText("Errors have ocurred. Check console for details.");
 | 
	
		
			
				|  |  | -        mb.exec();
 | 
	
		
			
				|  |  | +        message_box.setText("Errors have ocurred. Check console for details.");
 | 
	
		
			
				|  |  | +        message_box.exec();
 | 
	
		
			
				|  |  |          return;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    mb.setText("User tables successfully populated.\n\nRestarting app.");
 | 
	
		
			
				|  |  | -    mb.exec();
 | 
	
		
			
				|  |  | -    qApp->quit();
 | 
	
		
			
				|  |  | -    QProcess::startDetached(qApp->arguments()[0], qApp->arguments());
 | 
	
		
			
				|  |  | +    message_box.setText("User tables successfully populated.");
 | 
	
		
			
				|  |  | +    message_box.exec();
 | 
	
		
			
				|  |  | +    emit aDB()->dataBaseUpdated();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void DebugWidget::on_selectCsvPushButton_clicked()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      auto fileName = QFileDialog::getOpenFileName(this,
 | 
	
		
			
				|  |  | -                                                 tr("Open CSV File for import"), QDir::homePath(), tr("CSV files (*.csv)"));
 | 
	
		
			
				|  |  | +                                                 tr("Open CSV File for import"),
 | 
	
		
			
				|  |  | +                                                 AStandardPaths::absPathOf(AStandardPaths::Templates),
 | 
	
		
			
				|  |  | +                                                 tr("CSV files (*.csv)"));
 | 
	
		
			
				|  |  |      ui->importCsvLineEdit->setText(fileName);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -169,7 +165,7 @@ void DebugWidget::on_importCsvPushButton_clicked()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void DebugWidget::on_debugPushButton_clicked()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    DEB << AStandardPaths::allPaths()[AStandardPaths::Database	];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* //Comparing two functions template
 |