From 07f4ec529b6cc3aa302cd02d10e16710898d4768 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 Apr 2022 15:39:53 +0200 Subject: [PATCH] [libcalamares] Clean up requirements model API - don't need friends - made modify-the-model API public where it makes sense - improve naming --- .../modulesystem/RequirementsChecker.cpp | 3 +- .../modulesystem/RequirementsModel.cpp | 36 +++++++++++++------ .../modulesystem/RequirementsModel.h | 21 +++++------ 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/src/libcalamares/modulesystem/RequirementsChecker.cpp b/src/libcalamares/modulesystem/RequirementsChecker.cpp index d0d6e74fe..bdc564519 100644 --- a/src/libcalamares/modulesystem/RequirementsChecker.cpp +++ b/src/libcalamares/modulesystem/RequirementsChecker.cpp @@ -32,7 +32,6 @@ RequirementsChecker::RequirementsChecker( QVector< Module* > modules, Requiremen , m_progressTimer( nullptr ) , m_progressTimeouts( 0 ) { - m_model->clear(); m_watchers.reserve( m_modules.count() ); connect( this, &RequirementsChecker::requirementsProgress, model, &RequirementsModel::setProgressMessage ); } @@ -77,7 +76,7 @@ RequirementsChecker::finished() } m_model->describe(); - m_model->changeRequirementsList(); + m_model->reCheckList(); QTimer::singleShot( 0, this, &RequirementsChecker::done ); } } diff --git a/src/libcalamares/modulesystem/RequirementsModel.cpp b/src/libcalamares/modulesystem/RequirementsModel.cpp index f21f7051c..b9a091014 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.cpp +++ b/src/libcalamares/modulesystem/RequirementsModel.cpp @@ -19,24 +19,38 @@ void RequirementsModel::clear() { QMutexLocker l( &m_addLock ); - emit beginResetModel(); + beginResetModel(); m_requirements.clear(); - changeRequirementsList(); - emit endResetModel(); + endResetModel(); + reCheckList(); } void RequirementsModel::addRequirementsList( const Calamares::RequirementsList& requirements ) { QMutexLocker l( &m_addLock ); - emit beginResetModel(); - m_requirements.append( requirements ); - changeRequirementsList(); - emit endResetModel(); + + beginResetModel(); + for ( const auto& r : requirements ) + { + auto it = std::find_if( m_requirements.begin(), + m_requirements.end(), + [ &r ]( const Calamares::RequirementEntry& re ) { return r.name == re.name; } ); + if ( it != m_requirements.end() ) + { + *it = r; + } + else + { + m_requirements.append( r ); + } + } + endResetModel(); + reCheckList(); } void -RequirementsModel::changeRequirementsList() +RequirementsModel::reCheckList() { auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !e.satisfied; }; @@ -44,8 +58,8 @@ RequirementsModel::changeRequirementsList() m_satisfiedRequirements = std::none_of( m_requirements.begin(), m_requirements.end(), isUnSatisfied ); m_satisfiedMandatory = std::none_of( m_requirements.begin(), m_requirements.end(), isMandatoryAndUnSatisfied ); - emit satisfiedRequirementsChanged( m_satisfiedRequirements ); - emit satisfiedMandatoryChanged( m_satisfiedMandatory ); + Q_EMIT satisfiedRequirementsChanged( m_satisfiedRequirements ); + Q_EMIT satisfiedMandatoryChanged( m_satisfiedMandatory ); } int @@ -108,7 +122,7 @@ void RequirementsModel::setProgressMessage( const QString& m ) { m_progressMessage = m; - emit progressMessageChanged( m_progressMessage ); + Q_EMIT progressMessageChanged( m_progressMessage ); } } // namespace Calamares diff --git a/src/libcalamares/modulesystem/RequirementsModel.h b/src/libcalamares/modulesystem/RequirementsModel.h index d1842760c..6ddbe72d0 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.h +++ b/src/libcalamares/modulesystem/RequirementsModel.h @@ -33,8 +33,6 @@ class RequirementsChecker; */ class DLLEXPORT RequirementsModel : public QAbstractListModel { - friend class RequirementsChecker; - Q_OBJECT Q_PROPERTY( bool satisfiedRequirements READ satisfiedRequirements NOTIFY satisfiedRequirementsChanged FINAL ) Q_PROPERTY( bool satisfiedMandatory READ satisfiedMandatory NOTIFY satisfiedMandatoryChanged FINAL ) @@ -69,6 +67,15 @@ public: ///@brief Debugging tool, describe the checking-state void describe() const; + ///@brief Update progress message (called by the checker) + void setProgressMessage( const QString& m ); + + ///@brief Append some requirements; resets the model + void addRequirementsList( const Calamares::RequirementsList& requirements ); + + ///@brief Check the whole list, emit signals satisfied...() + void reCheckList(); + signals: void satisfiedRequirementsChanged( bool value ); void satisfiedMandatoryChanged( bool value ); @@ -77,20 +84,10 @@ signals: protected: QHash< int, QByteArray > roleNames() const override; - ///@brief Clears the requirements; resets the model void clear(); - ///@brief Append some requirements; resets the model - void addRequirementsList( const Calamares::RequirementsList& requirements ); - - ///@brief Update progress message (called by the checker) - void setProgressMessage( const QString& m ); - private: - ///@brief Implementation for {set,add}RequirementsList - void changeRequirementsList(); - QString m_progressMessage; QMutex m_addLock; RequirementsList m_requirements;