diff --git a/src/libcalamaresui/modulesystem/Module.cpp b/src/libcalamaresui/modulesystem/Module.cpp index 47c8f05ff..6116f24e1 100644 --- a/src/libcalamaresui/modulesystem/Module.cpp +++ b/src/libcalamaresui/modulesystem/Module.cpp @@ -18,6 +18,7 @@ #include "Module.h" +#include "ProcessJobModule.h" #include "ViewModule.h" #include "utils/YamlUtils.h" #include "utils/Logger.h" @@ -46,39 +47,10 @@ operator>>( const YAML::Node& node, Calamares::Module* m ) { m->m_name = QString::fromStdString( node[ "name" ].as< std::string >() ); - QString typeString = QString::fromStdString( node[ "type" ].as< std::string >() ); - if ( typeString == "job" ) - { - m->m_type = Calamares::Module::Job; - } - else if ( typeString == "view" ) - { - m->m_type = Calamares::Module::View; - m->m_interface = Calamares::Module::QtPlugin; - } - - if ( m->m_type != Calamares::Module::View ) - { - QString interfaceString = QString::fromStdString( node[ "interface" ].as< std::string >() ); - if ( interfaceString == "qtplugin" ) - { - m->m_interface = Calamares::Module::QtPlugin; - } - else if ( interfaceString == "python" ) - { - m->m_interface = Calamares::Module::Python; - } - else if ( interfaceString == "process" ) - { - m->m_interface = Calamares::Module::Process; - } - } - if ( node[ "requires" ] && node[ "requires" ].IsSequence() ) { node[ "requires" ] >> m->m_requiredModules; } - } namespace Calamares @@ -99,20 +71,52 @@ Module::fromConfigFile( const QString& path ) try { - YAML::Node moduleDocument = YAML::Load( ba.constData() ); - if ( !moduleDocument.IsMap() ) + YAML::Node doc = YAML::Load( ba.constData() ); + if ( !doc.IsMap() ) { cDebug() << Q_FUNC_INFO << "bad module metadata format" << path; return nullptr; } - m = new ViewModule(); + if ( !doc[ "type" ] || + !doc[ "interface" ] ) + { + cDebug() << Q_FUNC_INFO << "bad module metadata format" + << path; + return nullptr; + } + + QString typeString = QString::fromStdString( doc[ "type" ].as< std::string >() ); + QString intfString = QString::fromStdString( doc[ "interface" ].as< std::string >() ); + + if ( typeString == "view" && intfString == "qtplugin" ) + { + m = new ViewModule(); + } + else if ( typeString == "job" ) + { + if ( intfString == "process" ) + { + m = new ProcessJobModule(); + } + else if ( intfString == "python" ) + { + m = nullptr; //TODO: add Python module here + } + } + + if ( !m ) + { + cDebug() << Q_FUNC_INFO << "bad module type or interface string" + << path << typeString << intfString; + return nullptr; + } QFileInfo mfi( path ); m->m_directory = mfi.absoluteDir().absolutePath(); - m->initFrom( moduleDocument ); + m->initFrom( doc ); return m; } catch ( YAML::Exception& e )