From f3f20be79a15556eacfaa2c5e51eb878e5b7f35b Mon Sep 17 00:00:00 2001 From: Mart Somermaa Date: Fri, 11 Jun 2021 18:19:55 +0300 Subject: [PATCH] feat(error-handling): make fatal error a standalone window Signed-off-by: Mart Somermaa --- src/controller/controller.cpp | 5 ++++- src/controller/ui.hpp | 3 ++- src/ui/dialog.ui | 8 ++++---- src/ui/ui.cpp | 6 ++++++ src/ui/webeiddialog.cpp | 6 +++--- src/ui/webeiddialog.hpp | 3 ++- tests/mock-ui/mock-ui.cpp | 2 ++ 7 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/controller/controller.cpp b/src/controller/controller.cpp index 7267c75c..c039eccc 100644 --- a/src/controller/controller.cpp +++ b/src/controller/controller.cpp @@ -333,7 +333,10 @@ void Controller::onCriticalFailure(const QString& error) << "fatal error:" << error; writeResponseToStdOut(isInStdinMode, makeErrorObject(RESP_TECH_ERROR, error), commandType()); - WebEidUI::createAndShowDialog(CommandType(CommandType::INSERT_CARD))->showFatalError(); + // Dispose the UI. + window.reset(); + + WebEidUI::showFatalError(); exit(); } diff --git a/src/controller/ui.hpp b/src/controller/ui.hpp index 96732a33..6af29618 100644 --- a/src/controller/ui.hpp +++ b/src/controller/ui.hpp @@ -43,7 +43,8 @@ class WebEidUI : public QDialog // Factory function that creates and shows the dialog that implements this interface. static ptr createAndShowDialog(const CommandType command); - virtual void showFatalError() {} + static void showFatalError(); + virtual void showWaitingForCardPage(const CommandType commandType) = 0; // getPin() is called from background threads and must be thread-safe. diff --git a/src/ui/dialog.ui b/src/ui/dialog.ui index 1ae1aca6..a3a3df20 100644 --- a/src/ui/dialog.ui +++ b/src/ui/dialog.ui @@ -100,7 +100,7 @@ max-height: 20px; #pinErrorLabel { color: #F04E23; } -#smartCardError { +#fatalError { border: 1px solid rgba(240,78,35,0.1); border-radius: 3px; color: #F04E23; @@ -282,7 +282,7 @@ color: #003168; - + 8 @@ -300,14 +300,14 @@ color: #003168; 10 - + :/images/fatal.svg - + A fatal error occurred, check the logs for more details diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp index 291c5ecd..2d7e264f 100644 --- a/src/ui/ui.cpp +++ b/src/ui/ui.cpp @@ -32,3 +32,9 @@ WebEidUI::ptr WebEidUI::createAndShowDialog(const CommandType command) return dialog; } + +void WebEidUI::showFatalError() +{ + auto dialog = WebEidDialog {}; + dialog.showFatalErrorPage(); +} diff --git a/src/ui/webeiddialog.cpp b/src/ui/webeiddialog.cpp index 0502a969..de56ee3b 100644 --- a/src/ui/webeiddialog.cpp +++ b/src/ui/webeiddialog.cpp @@ -81,7 +81,7 @@ WebEidDialog::WebEidDialog(QWidget* parent) : WebEidUI(parent), ui(new Private) ui->pinInput->setAttribute(Qt::WA_MacShowFocusRect, false); ui->waitingSpinner->load(QStringLiteral(":/images/wait.svg")); ui->selectionGroup = new QButtonGroup(this); - ui->smartCardError->hide(); + ui->fatalError->hide(); connect(ui->pageStack, &QStackedWidget::currentChanged, this, &WebEidDialog::resizeHeight); connect(ui->selectionGroup, qOverload(&QButtonGroup::buttonClicked), this, @@ -115,10 +115,10 @@ WebEidDialog::~WebEidDialog() delete ui; } -void WebEidDialog::showFatalError() +void WebEidDialog::showFatalErrorPage() { ui->messagePageTitleLabel->setText(tr("Fatal error")); - ui->smartCardError->show(); + ui->fatalError->show(); ui->connectCardLabel->hide(); ui->cardChipIcon->hide(); ui->helpButton->show(); diff --git a/src/ui/webeiddialog.hpp b/src/ui/webeiddialog.hpp index 7c6b227a..1323ffd9 100644 --- a/src/ui/webeiddialog.hpp +++ b/src/ui/webeiddialog.hpp @@ -48,10 +48,11 @@ class WebEidDialog : public WebEidUI explicit WebEidDialog(QWidget* parent = nullptr); ~WebEidDialog() override; - void showFatalError() override; void showWaitingForCardPage(const CommandType commandType) override; QString getPin() override; + void showFatalErrorPage(); + public: // slots void onSmartCardStatusUpdate(const RetriableError status) override; void onMultipleCertificatesReady( diff --git a/tests/mock-ui/mock-ui.cpp b/tests/mock-ui/mock-ui.cpp index d97332ac..9b0a1dab 100644 --- a/tests/mock-ui/mock-ui.cpp +++ b/tests/mock-ui/mock-ui.cpp @@ -27,3 +27,5 @@ WebEidUI::ptr WebEidUI::createAndShowDialog(const CommandType) { return std::make_unique(); } + +void WebEidUI::showFatalError() {}