[libcalamares] Refactor settings-loading some more

- Load instances list in a separate method
 - Load sequence list in a separate method
 - Don't rely on QASSERT, explicitly throw if something is missing.
main
Adriaan de Groot 6 years ago
parent 5a8ed8583f
commit 7515f36b96

@ -114,33 +114,13 @@ interpretModulesSearch( const bool debugMode, const QStringList& rawPaths, QStri
} }
} }
Settings::Settings( const QString& settingsFilePath, static void
bool debugMode, interpretInstances( const YAML::Node& node, Settings::InstanceDescriptionList& customInstances )
QObject* parent )
: QObject( parent )
, m_debug( debugMode )
, m_doChroot( true )
, m_promptInstall( false )
, m_disableCancel( false )
{
cDebug() << "Using Calamares settings file at" << settingsFilePath;
QFile file( settingsFilePath );
if ( file.exists() && file.open( QFile::ReadOnly | QFile::Text ) )
{
QByteArray ba = file.readAll();
try
{ {
YAML::Node config = YAML::Load( ba.constData() );
Q_ASSERT( config.IsMap() );
interpretModulesSearch( debugMode, CalamaresUtils::yamlToStringList( config[ "modules-search" ] ), m_modulesSearchPaths );
// Parse the custom instances section // Parse the custom instances section
if ( config[ "instances" ] ) if ( node )
{ {
QVariant instancesV QVariant instancesV = CalamaresUtils::yamlToVariant( node ).toList();
= CalamaresUtils::yamlToVariant( config[ "instances" ] ).toList();
if ( instancesV.type() == QVariant::List ) if ( instancesV.type() == QVariant::List )
{ {
const auto instances = instancesV.toList(); const auto instances = instancesV.toList();
@ -150,7 +130,7 @@ Settings::Settings( const QString& settingsFilePath,
continue; continue;
QVariantMap instancesVListItemMap = QVariantMap instancesVListItemMap =
instancesVListItem.toMap(); instancesVListItem.toMap();
QMap< QString, QString > instanceMap; Settings::InstanceDescription instanceMap;
for ( auto it = instancesVListItemMap.constBegin(); for ( auto it = instancesVListItemMap.constBegin();
it != instancesVListItemMap.constEnd(); ++it ) it != instancesVListItemMap.constEnd(); ++it )
{ {
@ -158,17 +138,22 @@ Settings::Settings( const QString& settingsFilePath,
continue; continue;
instanceMap.insert( it.key(), it.value().toString() ); instanceMap.insert( it.key(), it.value().toString() );
} }
m_customModuleInstances.append( instanceMap ); customInstances.append( instanceMap );
}
} }
} }
} }
static void
interpretSequence( const YAML::Node& node, Settings::ModuleSequence& moduleSequence )
{
// Parse the modules sequence section // Parse the modules sequence section
Q_ASSERT( config[ "sequence" ] ); // It better exist! if ( node )
{ {
QVariant sequenceV QVariant sequenceV = CalamaresUtils::yamlToVariant( node );
= CalamaresUtils::yamlToVariant( config[ "sequence" ] ); if ( !( sequenceV.type() == QVariant::List ) )
Q_ASSERT( sequenceV.type() == QVariant::List ); throw YAML::Exception( YAML::Mark(), "sequence key does not have a list-value" );
const auto sequence = sequenceV.toList(); const auto sequence = sequenceV.toList();
for ( const QVariant& sequenceVListItem : sequence ) for ( const QVariant& sequenceVListItem : sequence )
{ {
@ -187,10 +172,37 @@ Settings::Settings( const QString& settingsFilePath,
.toMap() .toMap()
.value( thisActionS ) .value( thisActionS )
.toStringList(); .toStringList();
m_modulesSequence.append( qMakePair( thisAction, moduleSequence.append( qMakePair( thisAction,
thisActionRoster ) ); thisActionRoster ) );
} }
} }
else
throw YAML::Exception( YAML::Mark(), "sequence key is missing" );
}
Settings::Settings( const QString& settingsFilePath,
bool debugMode,
QObject* parent )
: QObject( parent )
, m_debug( debugMode )
, m_doChroot( true )
, m_promptInstall( false )
, m_disableCancel( false )
{
cDebug() << "Using Calamares settings file at" << settingsFilePath;
QFile file( settingsFilePath );
if ( file.exists() && file.open( QFile::ReadOnly | QFile::Text ) )
{
QByteArray ba = file.readAll();
try
{
YAML::Node config = YAML::Load( ba.constData() );
Q_ASSERT( config.IsMap() );
interpretModulesSearch( debugMode, CalamaresUtils::yamlToStringList( config[ "modules-search" ] ), m_modulesSearchPaths );
interpretInstances( config[ "instances" ], m_customModuleInstances );
interpretSequence( config[ "sequence" ], m_modulesSequence );
m_brandingComponentName = requireString( config, "branding" ); m_brandingComponentName = requireString( config, "branding" );
m_promptInstall = requireBool( config, "prompt-install", false ); m_promptInstall = requireBool( config, "prompt-install", false );

Loading…
Cancel
Save