[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_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 );
}
}

View File

@ -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

View File

@ -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;