firstrundialog.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #include "firstrundialog.h"
  2. #include "ui_firstrundialog.h"
  3. #include "src/testing/adebug.h"
  4. #include "src/database/adatabase.h"
  5. #include "src/database/adatabasesetup.h"
  6. #include "src/classes/apilotentry.h"
  7. #include "src/classes/adownload.h"
  8. #include "src/classes/asettings.h"
  9. //const auto TEMPLATE_URL = QStringLiteral("https://raw.githubusercontent.com/fiffty-50/openpilotlog/develop/assets/database/templates/");
  10. static inline
  11. void prompt_error_box(QString title, QString text, QWidget* parent = nullptr)
  12. {
  13. QMessageBox(QMessageBox::Warning, title, text, QMessageBox::Ok, parent).exec();
  14. }
  15. FirstRunDialog::FirstRunDialog(QWidget *parent) :
  16. QDialog(parent),
  17. ui(new Ui::FirstRunDialog)
  18. {
  19. ui->setupUi(this);
  20. ui->stackedWidget->setCurrentIndex(0);
  21. ui->lastnameLineEdit->setFocus();
  22. ui->previousPushButton->setEnabled(false);
  23. ui->nightComboBox->setCurrentIndex(1);
  24. auto *themeGroup = new QButtonGroup;
  25. themeGroup->addButton(ui->systemThemeCheckBox, 0);
  26. themeGroup->addButton(ui->lightThemeCheckBox, 1);
  27. themeGroup->addButton(ui->darkThemeCheckBox, 2);
  28. QObject::connect(themeGroup, QOverload<int>::of(&QButtonGroup::buttonClicked),
  29. this, &FirstRunDialog::on_themeGroup_toggled);
  30. }
  31. FirstRunDialog::~FirstRunDialog()
  32. {
  33. delete ui;
  34. }
  35. void FirstRunDialog::on_previousPushButton_clicked()
  36. {
  37. auto current_idx = ui->stackedWidget->currentIndex();
  38. switch (current_idx) {
  39. case 0:
  40. return;
  41. case 1:
  42. ui->previousPushButton->setEnabled(false);
  43. break;
  44. case 2:
  45. ui->nextPushButton->setText(QStringLiteral("Next"));
  46. break;
  47. }
  48. ui->stackedWidget->setCurrentIndex(current_idx - 1);
  49. }
  50. void FirstRunDialog::on_nextPushButton_clicked()
  51. {
  52. auto current_idx = ui->stackedWidget->currentIndex();
  53. // [G]: per index do appropriate error handling
  54. switch (current_idx) {
  55. case 0:
  56. if(ui->firstnameLineEdit->text().isEmpty()
  57. || ui->lastnameLineEdit->text().isEmpty())
  58. {
  59. prompt_error_box(QStringLiteral("Error"), QStringLiteral("Please enter first and last name"));
  60. return;
  61. }
  62. ui->previousPushButton->setEnabled(true);
  63. break;
  64. case 1:
  65. ui->nextPushButton->setText(QStringLiteral("Done"));
  66. break;
  67. case 2:
  68. finish();
  69. return;
  70. }
  71. ui->stackedWidget->setCurrentIndex(current_idx + 1);
  72. }
  73. void FirstRunDialog::on_themeGroup_toggled(int id)
  74. {
  75. ASettings::write("main/theme", id);
  76. }
  77. void FirstRunDialog::finish()
  78. {
  79. ASettings::write("userdata/lastname", ui->lastnameLineEdit->text());
  80. ASettings::write("userdata/firstname", ui->firstnameLineEdit->text());
  81. ASettings::write("userdata/employeeid", ui->employeeidLineEdit->text());
  82. ASettings::write("userdata/phone", ui->phoneLineEdit->text());
  83. ASettings::write("userdata/email", ui->emailLineEdit->text());
  84. ASettings::write("flightlogging/function", ui->functionComboBox->currentText());
  85. ASettings::write("flightlogging/approach", ui->approachComboBox->currentText());
  86. ASettings::write("flightlogging/nightlogging", ui->nightComboBox->currentIndex());
  87. ASettings::write("flightlogging/logIfr", ui->rulesComboBox->currentIndex());
  88. ASettings::write("flightlogging/flightnumberPrefix", ui->prefixLineEdit->text());
  89. ASettings::write("flightlogging/numberTakeoffs", 1);
  90. ASettings::write("flightlogging/numberLandings", 1);
  91. ASettings::write("flightlogging/popupCalendar", true);
  92. ASettings::write("flightlogging/pilotFlying", true);
  93. QMap<QString, QVariant> data;
  94. switch (ui->aliasComboBox->currentIndex()) {
  95. case 0:
  96. ASettings::write("userdata/displayselfas", ui->aliasComboBox->currentIndex());
  97. break;
  98. case 1:
  99. ASettings::write("userdata/displayselfas", ui->aliasComboBox->currentIndex());
  100. break;
  101. case 2:
  102. ASettings::write("userdata/displayselfas", ui->aliasComboBox->currentIndex());
  103. break;
  104. default:
  105. break;
  106. }
  107. data.insert("lastname", ui->lastnameLineEdit->text());
  108. data.insert("firstname", ui->firstnameLineEdit->text());
  109. data.insert("alias", "self");
  110. data.insert("employeeid", ui->employeeidLineEdit->text());
  111. data.insert("phone", ui->phoneLineEdit->text());
  112. data.insert("email", ui->emailLineEdit->text());
  113. if (!finishSetup()) {
  114. QMessageBox message_box(this);
  115. message_box.setText("Errors have ocurred creating the database. Without a working database The application will not be usable.");
  116. }
  117. ASettings::write("setup/setup_complete", true);
  118. aDB()->disconnect(); // reset db connection to refresh layout after initial setup.
  119. aDB()->connect();
  120. auto pilot = APilotEntry(1);
  121. pilot.setData(data);
  122. // [G]: Extremely suspect behaviour. Too much control for something that runs once.
  123. // Main should handle the qApp since we dont have a dedicated "application" class
  124. if (aDB()->commit(pilot)) {
  125. qApp->quit();
  126. QProcess::startDetached(qApp->arguments()[0], qApp->arguments());
  127. } else {
  128. QMessageBox message_box(this);
  129. message_box.setText("Errors have ocurred creating the database. Without a working database The application will not be usable.");
  130. }
  131. }
  132. bool FirstRunDialog::finishSetup()
  133. {
  134. QMessageBox confirm;
  135. confirm.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
  136. confirm.setDefaultButton(QMessageBox::No);
  137. confirm.setIcon(QMessageBox::Question);
  138. confirm.setWindowTitle("Create Database");
  139. 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");
  140. int reply = confirm.exec();
  141. if (reply == QMessageBox::Yes)
  142. ADataBaseSetup::downloadTemplates();
  143. aDB()->disconnect();
  144. ADataBaseSetup::backupOldData();
  145. aDB()->connect();
  146. if(!ADataBaseSetup::createDatabase())
  147. return false;
  148. if(!ADataBaseSetup::importDefaultData())
  149. return false;
  150. ASettings::write("setup/setup_complete", true);
  151. return true;
  152. }