| 
					
				 | 
			
			
				@@ -6,7 +6,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/classes/apilotentry.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/classes/adownload.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/classes/asettings.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const auto TEMPLATE_URL = QStringLiteral("https://raw.githubusercontent.com/fiffty-50/openpilotlog/develop/assets/database/templates/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//const auto TEMPLATE_URL = QStringLiteral("https://raw.githubusercontent.com/fiffty-50/openpilotlog/develop/assets/database/templates/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static inline 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void prompt_error_box(QString title, QString text, QWidget* parent = nullptr) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -86,127 +86,85 @@ void FirstRunDialog::on_themeGroup_toggled(int id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void FirstRunDialog::finish() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(ui->lastnameLineEdit->text().isEmpty() || ui->firstnameLineEdit->text().isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        auto mb = QMessageBox(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        mb.setText("You have to enter a valid first and last name for the logbook."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        mb.show(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("userdata/lastname", ui->lastnameLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("userdata/firstname", ui->firstnameLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("userdata/employeeid", ui->employeeidLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("userdata/phone", ui->phoneLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("userdata/email", ui->emailLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("flightlogging/function", ui->functionComboBox->currentText()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("flightlogging/approach", ui->approachComboBox->currentText()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("flightlogging/nightlogging", ui->nightComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("flightlogging/logIfr", ui->rulesComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("flightlogging/flightnumberPrefix", ui->prefixLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("flightlogging/numberTakeoffs", 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("flightlogging/numberLandings", 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("flightlogging/popupCalendar", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("flightlogging/pilotFlying", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    QMap<QString, QVariant> data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    switch (ui->aliasComboBox->currentIndex()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ASettings::write("userdata/displayselfas", ui->aliasComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ASettings::write("userdata/displayselfas", ui->aliasComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ASettings::write("userdata/displayselfas", ui->aliasComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data.insert("lastname", ui->lastnameLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data.insert("firstname", ui->firstnameLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data.insert("alias", "self"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data.insert("employeeid", ui->employeeidLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data.insert("phone", ui->phoneLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data.insert("email", ui->emailLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!finishSetup()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QMessageBox message_box(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        message_box.setText("Errors have ocurred creating the database. Without a working database The application will not be usable."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("setup/setup_complete", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    aDB()->disconnect(); // reset db connection to refresh layout after initial setup. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    aDB()->connect(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto pilot = APilotEntry(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    pilot.setData(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (aDB()->commit(pilot)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        qApp->quit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QProcess::startDetached(qApp->arguments()[0], qApp->arguments()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("userdata/lastname", ui->lastnameLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("userdata/firstname", ui->firstnameLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("userdata/employeeid", ui->employeeidLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("userdata/phone", ui->phoneLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("userdata/email", ui->emailLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("flightlogging/function", ui->functionComboBox->currentText()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("flightlogging/approach", ui->approachComboBox->currentText()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("flightlogging/nightlogging", ui->nightComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("flightlogging/logIfr", ui->rulesComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("flightlogging/flightnumberPrefix", ui->prefixLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("flightlogging/numberTakeoffs", 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("flightlogging/numberLandings", 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("flightlogging/popupCalendar", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("flightlogging/pilotFlying", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QMap<QString, QVariant> data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        switch (ui->aliasComboBox->currentIndex()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ASettings::write("userdata/displayselfas", ui->aliasComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ASettings::write("userdata/displayselfas", ui->aliasComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case 2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ASettings::write("userdata/displayselfas", ui->aliasComboBox->currentIndex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        data.insert("lastname", ui->lastnameLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        data.insert("firstname", ui->firstnameLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        data.insert("alias", "self"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        data.insert("employeeid", ui->employeeidLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        data.insert("phone", ui->phoneLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        data.insert("email", ui->emailLineEdit->text()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!finishSetup()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            QMessageBox message_box(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            message_box.setText("Errors have ocurred creating the database. Without a working database The application will not be usable."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ASettings::write("setup/setup_complete", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        aDB()->disconnect(); // reset db connection to refresh layout after initial setup. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        aDB()->connect(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        auto pilot = APilotEntry(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        pilot.setData(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (aDB()->commit(pilot)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            qApp->quit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            QProcess::startDetached(qApp->arguments()[0], qApp->arguments()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            QMessageBox message_box(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            message_box.setText("Errors have ocurred creating the database. Without a working database The application will not be usable."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QMessageBox message_box(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        message_box.setText("Errors have ocurred creating the database. Without a working database The application will not be usable."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 bool FirstRunDialog::finishSetup() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //check if template dir exists and create if needed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    QDir dir("data/templates"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    DEB << dir.path(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!dir.exists()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        dir.mkpath("."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     QMessageBox confirm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     confirm.setStandardButtons(QMessageBox::Yes | QMessageBox::No); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     confirm.setDefaultButton(QMessageBox::No); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     confirm.setIcon(QMessageBox::Question); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     confirm.setWindowTitle("Create Database"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     confirm.setText("We are now going to create the database. Would you like to download the latest database information?\n(Recommended, Internet connection required)\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     int reply = confirm.exec(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (reply == QMessageBox::Yes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // download latest csv 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QStringList templateTables = {"aircraft", "airports", "changelog"}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QString linkStub = TEMPLATE_URL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (const auto& table : templateTables) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            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"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            dl->download(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            loop.exec(); // event loop waits for download done signal before allowing loop to continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            dl->deleteLater(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (reply == QMessageBox::Yes) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ADataBaseSetup::downloadTemplates(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //close database connection 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     aDB()->disconnect(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // back up 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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!oldDatabase.rename("data/logbook-backup-" + dateString)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            DEB << "Warning: Creating backup of old database has failed."; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // re-connect and create new database 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ADataBaseSetup::backupOldData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     aDB()->connect(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (ADataBaseSetup::createDatabase()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (ADataBaseSetup::importDefaultData()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ASettings::write("setup/setup_complete", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(!ADataBaseSetup::createDatabase()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(!ADataBaseSetup::importDefaultData()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ASettings::write("setup/setup_complete", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |