| | |
| | |
| | |
| |
|
| | #include <QButtonGroup> |
| | #include <QMessageBox> |
| | #include <QPushButton> |
| | #include <QtConcurrent/qtconcurrentrun.h> |
| | #include "citra_qt/compatdb.h" |
| | #include "common/telemetry.h" |
| | #include "core/core.h" |
| | #include "core/telemetry_session.h" |
| | #include "ui_compatdb.h" |
| |
|
| | CompatDB::CompatDB(Core::TelemetrySession& telemetry_session_, QWidget* parent) |
| | : QWizard(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint), |
| | ui{std::make_unique<Ui::CompatDB>()}, telemetry_session{telemetry_session_} { |
| | ui->setupUi(this); |
| | connect(ui->radioButton_Perfect, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
| | connect(ui->radioButton_Great, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
| | connect(ui->radioButton_Okay, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
| | connect(ui->radioButton_Bad, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
| | connect(ui->radioButton_IntroMenu, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
| | connect(ui->radioButton_WontBoot, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
| | connect(button(NextButton), &QPushButton::clicked, this, &CompatDB::Submit); |
| | connect(&testcase_watcher, &QFutureWatcher<bool>::finished, this, |
| | &CompatDB::OnTestcaseSubmitted); |
| | } |
| |
|
| | CompatDB::~CompatDB() = default; |
| |
|
| | enum class CompatDBPage { |
| | Intro = 0, |
| | Selection = 1, |
| | Final = 2, |
| | }; |
| |
|
| | void CompatDB::Submit() { |
| | QButtonGroup* compatibility = new QButtonGroup(this); |
| | compatibility->addButton(ui->radioButton_Perfect, 0); |
| | compatibility->addButton(ui->radioButton_Great, 1); |
| | compatibility->addButton(ui->radioButton_Okay, 2); |
| | compatibility->addButton(ui->radioButton_Bad, 3); |
| | compatibility->addButton(ui->radioButton_IntroMenu, 4); |
| | compatibility->addButton(ui->radioButton_WontBoot, 5); |
| | switch ((static_cast<CompatDBPage>(currentId()))) { |
| | case CompatDBPage::Selection: |
| | if (compatibility->checkedId() == -1) { |
| | button(NextButton)->setEnabled(false); |
| | } |
| | break; |
| | case CompatDBPage::Final: |
| | back(); |
| | LOG_DEBUG(Frontend, "Compatibility Rating: {}", compatibility->checkedId()); |
| | telemetry_session.AddField(Common::Telemetry::FieldType::UserFeedback, "Compatibility", |
| | compatibility->checkedId()); |
| |
|
| | button(NextButton)->setEnabled(false); |
| | button(NextButton)->setText(tr("Submitting")); |
| | button(CancelButton)->setVisible(false); |
| |
|
| | testcase_watcher.setFuture( |
| | QtConcurrent::run([this] { return telemetry_session.SubmitTestcase(); })); |
| | break; |
| | default: |
| | LOG_ERROR(Frontend, "Unexpected page: {}", currentId()); |
| | } |
| | } |
| |
|
| | void CompatDB::OnTestcaseSubmitted() { |
| | if (!testcase_watcher.result()) { |
| | QMessageBox::critical(this, tr("Communication error"), |
| | tr("An error occurred while sending the Testcase")); |
| | button(NextButton)->setEnabled(true); |
| | button(NextButton)->setText(tr("Next")); |
| | button(CancelButton)->setVisible(true); |
| | } else { |
| | next(); |
| | |
| | |
| | button(CancelButton)->setVisible(false); |
| | } |
| | } |
| |
|
| | void CompatDB::EnableNext() { |
| | button(NextButton)->setEnabled(true); |
| | } |
| |
|