[libcalamaresui] Refactor Requirements-Checking

- Move the actual checking into a separate object with some lifecycle-
   management signals.
 - Right now this is still single-threaded and blocking, so no net gain.
This commit is contained in:
Adriaan de Groot 2019-02-20 05:48:15 -05:00
parent bbb9ff0cbf
commit c678cd80b4
5 changed files with 158 additions and 25 deletions

View file

@ -21,11 +21,13 @@
#include "ExecutionViewStep.h"
#include "Module.h"
#include "utils/Logger.h"
#include "utils/YamlUtils.h"
#include "RequirementsChecker.h"
#include "Settings.h"
#include "ViewManager.h"
#include "utils/Logger.h"
#include "utils/YamlUtils.h"
#include <yaml-cpp/yaml.h>
#include <QApplication>
@ -306,32 +308,21 @@ void
ModuleManager::checkRequirements()
{
cDebug() << "Checking module requirements ..";
QTimer::singleShot( 0, this, [ this ]()
QVector< Module* > modules( m_loadedModulesByInstanceKey.count() );
int count = 0;
for (const auto& module : m_loadedModulesByInstanceKey )
{
bool acceptable = true;
modules[count++] = module;
}
for (const auto& module : m_loadedModulesByInstanceKey )
{
RequirementsList l = module->checkRequirements();
if ( l.length() > 0 )
{
cDebug() << " .." << module->name() << "has" << l.length() << "requirements";
emit requirementsResult( l );
}
int count = 0;
for (const auto& r : l)
{
if ( r.mandatory && !r.satisfied )
{
cDebug() << " .. requirement" << count << r.name << "is not satisfied.";
acceptable = false;
}
++count;
}
}
RequirementsChecker *rq = new RequirementsChecker( modules, this );
connect( rq, &RequirementsChecker::requirementsResult, this, &ModuleManager::requirementsResult );
connect( rq, &RequirementsChecker::requirementsComplete, this, &ModuleManager::requirementsComplete );
connect( rq, &RequirementsChecker::done, rq, &RequirementsChecker::deleteLater );
connect( rq, &RequirementsChecker::requirementsProgress, this, &ModuleManager::requirementsProgress );
emit requirementsComplete( acceptable );
} );
QTimer::singleShot( 0, rq, &RequirementsChecker::run );
}
QStringList