From 3ad3a9adfc76d13f1ff582a5cd8649ab8e45360f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 5 Mar 2021 22:27:24 +0100 Subject: [PATCH] [finished] Move the business logic to the Configt object --- src/modules/finished/Config.cpp | 26 ++++++++++++++++ src/modules/finished/Config.h | 38 +++++++++++++++++++---- src/modules/finished/FinishedViewStep.cpp | 14 ++------- src/modules/finished/FinishedViewStep.h | 4 --- 4 files changed, 61 insertions(+), 21 deletions(-) diff --git a/src/modules/finished/Config.cpp b/src/modules/finished/Config.cpp index 5119da942..4b54988e6 100644 --- a/src/modules/finished/Config.cpp +++ b/src/modules/finished/Config.cpp @@ -82,6 +82,32 @@ Config::setRestartNowWanted( bool w ) } } +void +Config::onInstallationFailed( const QString& message, const QString& details ) +{ + const bool msgChange = message != m_failureMessage; + const bool detChange = details != m_failureDetails; + m_failureMessage = message; + m_failureDetails = details; + if ( msgChange ) + { + emit failureMessageChanged( message ); + } + if ( detChange ) + { + emit failureDetailsChanged( message ); + } + if ( ( msgChange || detChange ) ) + { + emit failureChanged( hasFailed() ); + if ( hasFailed() ) + { + setRestartNowMode( Config::RestartMode::Never ); + } + } +} + + void Config::doRestart() { diff --git a/src/modules/finished/Config.h b/src/modules/finished/Config.h index 78078b99b..a5676990d 100644 --- a/src/modules/finished/Config.h +++ b/src/modules/finished/Config.h @@ -24,6 +24,10 @@ class Config : public QObject Q_PROPERTY( QString restartNowCommand READ restartNowCommand CONSTANT FINAL ) Q_PROPERTY( bool notifyOnFinished READ notifyOnFinished CONSTANT FINAL ) + Q_PROPERTY( QString failureMessage READ failureMessage NOTIFY failureMessageChanged ) + Q_PROPERTY( QString failureDetails READ failureDetails NOTIFY failureDetailsChanged ) + Q_PROPERTY( bool failed READ hasFailed NOTIFY failureChanged ) + public: Config( QObject* parent = nullptr ); @@ -36,17 +40,22 @@ public: }; Q_ENUM( RestartMode ) + void setConfigurationMap( const QVariantMap& configurationMap ); + +public Q_SLOTS: RestartMode restartNowMode() const { return m_restartNowMode; } + void setRestartNowMode( RestartMode m ); + bool restartNowWanted() const { return m_userWantsRestart; } + void setRestartNowWanted( bool w ); QString restartNowCommand() const { return m_restartNowCommand; } bool notifyOnFinished() const { return m_notifyOnFinished; } - void setConfigurationMap( const QVariantMap& configurationMap ); - -public slots: - void setRestartNowMode( RestartMode m ); - void setRestartNowWanted( bool w ); + QString failureMessage() const { return m_failureMessage; } + QString failureDetails() const { return m_failureDetails; } + /// Failure is if any of the failure messages is non-empty + bool hasFailed() const { return !m_failureMessage.isEmpty() || !m_failureDetails.isEmpty(); } /** @brief Run the restart command, if desired. * @@ -63,17 +72,34 @@ public slots: * At the end of installation (when the FinishedViewStep is activated), * send a desktop notification via DBus that the install is done. */ - void doNotify( bool hasFailed = false ); + void doNotify( bool hasFailed ); + void doNotify() { doNotify( hasFailed() ); } + + /** @brief Tell the config the install failed + * + * This should be connected to the JobQueue and is called by + * the queue when the installation fails, with a suitable message. + */ + void onInstallationFailed( const QString& message, const QString& details ); signals: void restartModeChanged( RestartMode m ); void restartNowWantedChanged( bool w ); + void failureMessageChanged( const QString& ); + void failureDetailsChanged( const QString& ); + void failureChanged( bool ); private: + // Configuration parts QString m_restartNowCommand; RestartMode m_restartNowMode = RestartMode::Never; bool m_userWantsRestart = false; bool m_notifyOnFinished = false; + + // Dynamic parts + bool m_hasFailed = false; + QString m_failureMessage; + QString m_failureDetails; }; const NamedEnumTable< Config::RestartMode >& restartModes(); diff --git a/src/modules/finished/FinishedViewStep.cpp b/src/modules/finished/FinishedViewStep.cpp index 3f9fd3aab..05cac473d 100644 --- a/src/modules/finished/FinishedViewStep.cpp +++ b/src/modules/finished/FinishedViewStep.cpp @@ -22,10 +22,10 @@ FinishedViewStep::FinishedViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_config( new Config( this ) ) , m_widget( new FinishedPage( m_config ) ) - , m_installFailed( false ) { auto jq = Calamares::JobQueue::instance(); - connect( jq, &Calamares::JobQueue::failed, this, &FinishedViewStep::onInstallationFailed ); + connect( jq, &Calamares::JobQueue::failed, m_config, &Config::onInstallationFailed ); + connect( jq, &Calamares::JobQueue::failed, m_widget, &FinishedPage::onInstallationFailed ); emit nextStatusChanged( true ); } @@ -85,7 +85,7 @@ FinishedViewStep::isAtEnd() const void FinishedViewStep::onActivate() { - m_config->doNotify( m_installFailed ); + m_config->doNotify(); connect( qApp, &QApplication::aboutToQuit, m_config, &Config::doRestart ); } @@ -96,14 +96,6 @@ FinishedViewStep::jobs() const return Calamares::JobList(); } -void -FinishedViewStep::onInstallationFailed( const QString& message, const QString& details ) -{ - m_installFailed = true; - m_config->setRestartNowMode( Config::RestartMode::Never ); - m_widget->onInstallationFailed( message, details ); -} - void FinishedViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { diff --git a/src/modules/finished/FinishedViewStep.h b/src/modules/finished/FinishedViewStep.h index a35d7fac8..c0f64153d 100644 --- a/src/modules/finished/FinishedViewStep.h +++ b/src/modules/finished/FinishedViewStep.h @@ -42,13 +42,9 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; -public slots: - void onInstallationFailed( const QString& message, const QString& details ); - private: Config* m_config; FinishedPage* m_widget; - bool m_installFailed; // Track if onInstallationFailed() was called }; CALAMARES_PLUGIN_FACTORY_DECLARATION( FinishedViewStepFactory )