[libcalamares] Clean up requirements model API

- don't need friends
- made modify-the-model API public where it makes sense
- improve naming
This commit is contained in:
Adriaan de Groot 2022-04-20 15:39:53 +02:00
parent 0b2af86ec9
commit 07f4ec529b
3 changed files with 35 additions and 25 deletions

View File

@ -32,7 +32,6 @@ RequirementsChecker::RequirementsChecker( QVector< Module* > modules, Requiremen
, m_progressTimer( nullptr ) , m_progressTimer( nullptr )
, m_progressTimeouts( 0 ) , m_progressTimeouts( 0 )
{ {
m_model->clear();
m_watchers.reserve( m_modules.count() ); m_watchers.reserve( m_modules.count() );
connect( this, &RequirementsChecker::requirementsProgress, model, &RequirementsModel::setProgressMessage ); connect( this, &RequirementsChecker::requirementsProgress, model, &RequirementsModel::setProgressMessage );
} }
@ -77,7 +76,7 @@ RequirementsChecker::finished()
} }
m_model->describe(); m_model->describe();
m_model->changeRequirementsList(); m_model->reCheckList();
QTimer::singleShot( 0, this, &RequirementsChecker::done ); QTimer::singleShot( 0, this, &RequirementsChecker::done );
} }
} }

View File

@ -19,24 +19,38 @@ void
RequirementsModel::clear() RequirementsModel::clear()
{ {
QMutexLocker l( &m_addLock ); QMutexLocker l( &m_addLock );
emit beginResetModel(); beginResetModel();
m_requirements.clear(); m_requirements.clear();
changeRequirementsList(); endResetModel();
emit endResetModel(); reCheckList();
} }
void void
RequirementsModel::addRequirementsList( const Calamares::RequirementsList& requirements ) RequirementsModel::addRequirementsList( const Calamares::RequirementsList& requirements )
{ {
QMutexLocker l( &m_addLock ); QMutexLocker l( &m_addLock );
emit beginResetModel();
m_requirements.append( requirements ); beginResetModel();
changeRequirementsList(); for ( const auto& r : requirements )
emit endResetModel(); {
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 void
RequirementsModel::changeRequirementsList() RequirementsModel::reCheckList()
{ {
auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; };
auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !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_satisfiedRequirements = std::none_of( m_requirements.begin(), m_requirements.end(), isUnSatisfied );
m_satisfiedMandatory = std::none_of( m_requirements.begin(), m_requirements.end(), isMandatoryAndUnSatisfied ); m_satisfiedMandatory = std::none_of( m_requirements.begin(), m_requirements.end(), isMandatoryAndUnSatisfied );
emit satisfiedRequirementsChanged( m_satisfiedRequirements ); Q_EMIT satisfiedRequirementsChanged( m_satisfiedRequirements );
emit satisfiedMandatoryChanged( m_satisfiedMandatory ); Q_EMIT satisfiedMandatoryChanged( m_satisfiedMandatory );
} }
int int
@ -108,7 +122,7 @@ void
RequirementsModel::setProgressMessage( const QString& m ) RequirementsModel::setProgressMessage( const QString& m )
{ {
m_progressMessage = m; m_progressMessage = m;
emit progressMessageChanged( m_progressMessage ); Q_EMIT progressMessageChanged( m_progressMessage );
} }
} // namespace Calamares } // namespace Calamares

View File

@ -33,8 +33,6 @@ class RequirementsChecker;
*/ */
class DLLEXPORT RequirementsModel : public QAbstractListModel class DLLEXPORT RequirementsModel : public QAbstractListModel
{ {
friend class RequirementsChecker;
Q_OBJECT Q_OBJECT
Q_PROPERTY( bool satisfiedRequirements READ satisfiedRequirements NOTIFY satisfiedRequirementsChanged FINAL ) Q_PROPERTY( bool satisfiedRequirements READ satisfiedRequirements NOTIFY satisfiedRequirementsChanged FINAL )
Q_PROPERTY( bool satisfiedMandatory READ satisfiedMandatory NOTIFY satisfiedMandatoryChanged FINAL ) Q_PROPERTY( bool satisfiedMandatory READ satisfiedMandatory NOTIFY satisfiedMandatoryChanged FINAL )
@ -69,6 +67,15 @@ public:
///@brief Debugging tool, describe the checking-state ///@brief Debugging tool, describe the checking-state
void describe() const; 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: signals:
void satisfiedRequirementsChanged( bool value ); void satisfiedRequirementsChanged( bool value );
void satisfiedMandatoryChanged( bool value ); void satisfiedMandatoryChanged( bool value );
@ -77,20 +84,10 @@ signals:
protected: protected:
QHash< int, QByteArray > roleNames() const override; QHash< int, QByteArray > roleNames() const override;
///@brief Clears the requirements; resets the model ///@brief Clears the requirements; resets the model
void clear(); 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: private:
///@brief Implementation for {set,add}RequirementsList
void changeRequirementsList();
QString m_progressMessage; QString m_progressMessage;
QMutex m_addLock; QMutex m_addLock;
RequirementsList m_requirements; RequirementsList m_requirements;