/* *openPilotLog - A FOSS Pilot Logbook Application *Copyright (C) 2020-2021 Felix Turowsky * *This program is free software: you can redistribute it and/or modify *it under the terms of the GNU General Public License as published by *the Free Software Foundation, either version 3 of the License, or *(at your option) any later version. * *This program is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *GNU General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program. If not, see . */ #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" #include "src/gui/dialogues/firstrundialog.h" #include #include "src/functions/atime.h" #include "src/functions/astat.h" #include "src/classes/acurrencyentry.h" #include "src/classes/atranslator.h" DebugWidget::DebugWidget(QWidget *parent) : QWidget(parent), ui(new Ui::DebugWidget) { ui->setupUi(this); for (const auto& table : aDB->getTableNames()) { if( table != "sqlite_sequence") { ui->tableComboBox->addItem(table); } } } DebugWidget::~DebugWidget() { delete ui; } void DebugWidget::on_resetUserTablesPushButton_clicked() { ATimer timer(this); QMessageBox message_box(this); if (ADataBaseSetup::resetToDefault()){ message_box.setText("Database successfully reset"); message_box.exec(); emit aDB->dataBaseUpdated(); } else { message_box.setText("Errors have occurred. Check console for Debug output. "); message_box.exec(); } } void DebugWidget::on_resetDatabasePushButton_clicked() { ATimer timer(this); QMessageBox message_box(this); // download latest csv 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::directory(AStandardPaths::Templates)); for (const auto& table : template_tables) { QEventLoop loop; ADownload* dl = new ADownload; 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(); } // back up old db aDB->disconnect(); ADataBaseSetup::backupOldData(); // re-connct and create new database aDB->connect(); if (ADataBaseSetup::createDatabase()) { DEB << "Database has been successfully created."; } else { message_box.setText("Errors have ocurred creating the database.
" "Check console for details."); message_box.exec(); } if (ADataBaseSetup::importDefaultData(false)) { message_box.setText("Database has been successfully reset."); emit aDB->dataBaseUpdated(); message_box.exec(); } else { message_box.setText("Errors have ocurred while importing templates.
" "Check console for details."); message_box.exec(); } } void DebugWidget::downloadFinished() { } void DebugWidget::on_fillUserDataPushButton_clicked() { ATimer timer(this); 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::directory(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(template_dir.filePath("sample_" % table % QStringLiteral(".csv"))); dl->download(); loop.exec(); // event loop waits for download done signal before allowing loop to continue dl->deleteLater(); } QBitArray allGood; allGood.resize(userTables.size()); for (const auto& table : userTables) { auto data = aReadCsv(AStandardPaths::directory(AStandardPaths::Templates).absoluteFilePath( + "sample_" + table + ".csv")); allGood.setBit(userTables.indexOf(table), ADataBaseSetup::commitData(data, table)); } if (allGood.count(true) != userTables.size()) { message_box.setText("Errors have ocurred. Check console for details."); message_box.exec(); return; } 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"), AStandardPaths::directory(AStandardPaths::Templates).absolutePath(), tr("CSV files (*.csv)")); ui->importCsvLineEdit->setText(fileName); } void DebugWidget::on_importCsvPushButton_clicked() { ATimer timer(this); auto file = QFileInfo(ui->importCsvLineEdit->text()); DEB << "File exists/is file:" << file.exists() << file.isFile() << " Path:" << file.absoluteFilePath(); if (file.exists() && file.isFile()) { if (ADataBaseSetup::commitData(aReadCsv(file.absoluteFilePath()), ui->tableComboBox->currentText())) { QMessageBox message_box(this); message_box.setText("Data inserted successfully."); message_box.exec(); } else { QMessageBox message_box(this); message_box.setText("Errors have ocurred. Check console for details."); message_box.exec(); } } else { QMessageBox message_box(this); message_box.setText("Please select a valid file."); message_box.exec(); } } #include "src/functions/adate.h" void DebugWidget::on_debugPushButton_clicked() { //auto frdl = new FirstRunDialog(this); //frdl->exec(); ATranslator::installTranslator(Opl::Translations::Spanish); //ui->retranslateUi(this); } void DebugWidget::changeEvent(QEvent *event) { if (event != nullptr) if(event->type() == QEvent::LanguageChange) ui->retranslateUi(this); } /* //Comparing two functions template qlonglong number_of_runs = 5000; long time1 = 0; long time2 = 0; { ATimer timer; for (int i = 0; i < number_of_runs; i++) { // first block, do stuff here... } time1 = timer.timeNow(); } { ATimer timer; for (int i = 0; i < number_of_runs; i++) { // second block, do stuff here... } time2 = timer.timeNow(); } DEB << "First block executed " << number_of_runs << " times for a total of " << time1 << " milliseconds."); DEB << "Second block executed " << number_of_runs << " times for a total of " << time2 << " milliseconds."); */ /* *#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) * DEB << QT_VERSION_MAJOR << QT_VERSION_MINOR << "At least 5.12"; *#else * DEB << QT_VERSION_MAJOR << QT_VERSION_MINOR << "Less than 5.12"; * #endif */