[libcalamaresui] Chase the change in Module descriptor
- most of the code becomes **simpler** because the requirement to handle unstructured data is now in the descriptor itself, rather than in consumers.
This commit is contained in:
parent
ee834a7abb
commit
3c6e53ecb9
@ -84,13 +84,12 @@ CppJobModule::jobs() const
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CppJobModule::initFrom( const QVariantMap& moduleDescriptor )
|
CppJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor )
|
||||||
{
|
{
|
||||||
QDir directory( location() );
|
QDir directory( location() );
|
||||||
QString load;
|
QString load = moduleDescriptor.load();
|
||||||
if ( !moduleDescriptor.value( "load" ).toString().isEmpty() )
|
if ( !load.isEmpty() )
|
||||||
{
|
{
|
||||||
load = moduleDescriptor.value( "load" ).toString();
|
|
||||||
load = directory.absoluteFilePath( load );
|
load = directory.absoluteFilePath( load );
|
||||||
}
|
}
|
||||||
// If a load path is not specified, we look for a plugin to load in the directory.
|
// If a load path is not specified, we look for a plugin to load in the directory.
|
||||||
|
@ -39,7 +39,7 @@ public:
|
|||||||
JobList jobs() const override;
|
JobList jobs() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initFrom( const QVariantMap& moduleDescriptor ) override;
|
void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit CppJobModule();
|
explicit CppJobModule();
|
||||||
|
@ -52,23 +52,22 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto
|
|||||||
const QString& configFileName,
|
const QString& configFileName,
|
||||||
const QString& moduleDirectory )
|
const QString& moduleDirectory )
|
||||||
{
|
{
|
||||||
|
using Type = Calamares::ModuleSystem::Type;
|
||||||
|
using Interface = Calamares::ModuleSystem::Interface;
|
||||||
|
|
||||||
std::unique_ptr< Module > m;
|
std::unique_ptr< Module > m;
|
||||||
|
|
||||||
QString typeString = moduleDescriptor.value( "type" ).toString();
|
if ( !moduleDescriptor.isValid() ) {
|
||||||
QString intfString = moduleDescriptor.value( "interface" ).toString();
|
|
||||||
|
|
||||||
if ( typeString.isEmpty() || intfString.isEmpty() )
|
|
||||||
{
|
|
||||||
cError() << "Bad module descriptor format" << instanceId;
|
cError() << "Bad module descriptor format" << instanceId;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if ( ( typeString == "view" ) || ( typeString == "viewmodule" ) )
|
if ( moduleDescriptor.type() == Type::View )
|
||||||
{
|
{
|
||||||
if ( intfString == "qtplugin" )
|
if ( moduleDescriptor.interface() == Interface::QtPlugin )
|
||||||
{
|
{
|
||||||
m.reset( new ViewModule() );
|
m.reset( new ViewModule() );
|
||||||
}
|
}
|
||||||
else if ( intfString == "pythonqt" )
|
else if ( moduleDescriptor.interface() == Interface::PythonQt )
|
||||||
{
|
{
|
||||||
#ifdef WITH_PYTHONQT
|
#ifdef WITH_PYTHONQT
|
||||||
m.reset( new PythonQtViewModule() );
|
m.reset( new PythonQtViewModule() );
|
||||||
@ -78,20 +77,20 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cError() << "Bad interface" << intfString << "for module type" << typeString;
|
cError() << "Bad interface" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( typeString == "job" )
|
else if ( moduleDescriptor.type() == Type::Job )
|
||||||
{
|
{
|
||||||
if ( intfString == "qtplugin" )
|
if ( moduleDescriptor.interface() == Interface::QtPlugin )
|
||||||
{
|
{
|
||||||
m.reset( new CppJobModule() );
|
m.reset( new CppJobModule() );
|
||||||
}
|
}
|
||||||
else if ( intfString == "process" )
|
else if ( moduleDescriptor.interface() == Interface::Process )
|
||||||
{
|
{
|
||||||
m.reset( new ProcessJobModule() );
|
m.reset( new ProcessJobModule() );
|
||||||
}
|
}
|
||||||
else if ( intfString == "python" )
|
else if ( moduleDescriptor.interface() == Interface::Python )
|
||||||
{
|
{
|
||||||
#ifdef WITH_PYTHON
|
#ifdef WITH_PYTHON
|
||||||
m.reset( new PythonJobModule() );
|
m.reset( new PythonJobModule() );
|
||||||
@ -101,17 +100,17 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cError() << "Bad interface" << intfString << "for module type" << typeString;
|
cError() << "Bad interface" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cError() << "Bad module type" << typeString;
|
cError() << "Bad module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !m )
|
if ( !m )
|
||||||
{
|
{
|
||||||
cError() << "Bad module type (" << typeString << ") or interface string (" << intfString << ") for module "
|
cError() << "Bad module type (" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ) << ") or interface string (" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << ") for module "
|
||||||
<< instanceId;
|
<< instanceId;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -114,9 +114,9 @@ ModuleManager::doInit()
|
|||||||
if ( ok && !moduleName.isEmpty() && ( moduleName == currentDir.dirName() )
|
if ( ok && !moduleName.isEmpty() && ( moduleName == currentDir.dirName() )
|
||||||
&& !m_availableDescriptorsByModuleName.contains( moduleName ) )
|
&& !m_availableDescriptorsByModuleName.contains( moduleName ) )
|
||||||
{
|
{
|
||||||
m_availableDescriptorsByModuleName.insert( moduleName, moduleDescriptorMap );
|
auto descriptor = Calamares::ModuleSystem::Descriptor::fromDescriptorData( moduleDescriptorMap );
|
||||||
m_moduleDirectoriesByModuleName.insert( moduleName,
|
descriptor.setDirectory(descriptorFileInfo.absoluteDir().absolutePath() );
|
||||||
descriptorFileInfo.absoluteDir().absolutePath() );
|
m_availableDescriptorsByModuleName.insert( moduleName, descriptor );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -132,8 +132,7 @@ ModuleManager::doInit()
|
|||||||
}
|
}
|
||||||
// At this point m_availableDescriptorsByModuleName is filled with
|
// At this point m_availableDescriptorsByModuleName is filled with
|
||||||
// the modules that were found in the search paths.
|
// the modules that were found in the search paths.
|
||||||
cDebug() << "Found" << m_availableDescriptorsByModuleName.count() << "modules"
|
cDebug() << "Found" << m_availableDescriptorsByModuleName.count() << "modules";
|
||||||
<< m_moduleDirectoriesByModuleName.count() << "names";
|
|
||||||
emit initDone();
|
emit initDone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,7 +168,7 @@ getConfigFileName( const Settings::InstanceDescriptionList& descriptorList,
|
|||||||
const ModuleSystem::InstanceKey& instanceKey,
|
const ModuleSystem::InstanceKey& instanceKey,
|
||||||
const ModuleSystem::Descriptor& descriptor )
|
const ModuleSystem::Descriptor& descriptor )
|
||||||
{
|
{
|
||||||
if ( descriptor.value( "noconfig", false ).toBool() )
|
if ( !descriptor.hasConfig() )
|
||||||
{
|
{
|
||||||
// Explicitly set to no-configuration. This doesn't apply
|
// Explicitly set to no-configuration. This doesn't apply
|
||||||
// to custom instances (above) since the only reason to
|
// to custom instances (above) since the only reason to
|
||||||
@ -217,7 +216,7 @@ ModuleManager::loadModules()
|
|||||||
|
|
||||||
ModuleSystem::Descriptor descriptor
|
ModuleSystem::Descriptor descriptor
|
||||||
= m_availableDescriptorsByModuleName.value( instanceKey.module(), ModuleSystem::Descriptor() );
|
= m_availableDescriptorsByModuleName.value( instanceKey.module(), ModuleSystem::Descriptor() );
|
||||||
if ( descriptor.isEmpty() )
|
if ( !descriptor.isValid() )
|
||||||
{
|
{
|
||||||
cError() << "Module" << instanceKey.toString() << "not found in module search paths."
|
cError() << "Module" << instanceKey.toString() << "not found in module search paths."
|
||||||
<< Logger::DebugList( m_paths );
|
<< Logger::DebugList( m_paths );
|
||||||
@ -258,7 +257,7 @@ ModuleManager::loadModules()
|
|||||||
= Calamares::moduleFromDescriptor( descriptor,
|
= Calamares::moduleFromDescriptor( descriptor,
|
||||||
instanceKey.id(),
|
instanceKey.id(),
|
||||||
configFileName,
|
configFileName,
|
||||||
m_moduleDirectoriesByModuleName.value( instanceKey.module() ) );
|
descriptor.directory() );
|
||||||
if ( !thisModule )
|
if ( !thisModule )
|
||||||
{
|
{
|
||||||
cError() << "Module" << instanceKey.toString() << "cannot be created from descriptor"
|
cError() << "Module" << instanceKey.toString() << "cannot be created from descriptor"
|
||||||
@ -358,7 +357,7 @@ ModuleManager::checkRequirements()
|
|||||||
}
|
}
|
||||||
|
|
||||||
static QStringList
|
static QStringList
|
||||||
missingRequiredModules( const QStringList& required, const QMap< QString, QVariantMap >& available )
|
missingRequiredModules( const QStringList& required, const QMap< QString, ModuleSystem::Descriptor >& available )
|
||||||
{
|
{
|
||||||
QStringList l;
|
QStringList l;
|
||||||
for ( const QString& depName : required )
|
for ( const QString& depName : required )
|
||||||
@ -386,12 +385,12 @@ ModuleManager::checkDependencies()
|
|||||||
for ( auto it = m_availableDescriptorsByModuleName.begin(); it != m_availableDescriptorsByModuleName.end();
|
for ( auto it = m_availableDescriptorsByModuleName.begin(); it != m_availableDescriptorsByModuleName.end();
|
||||||
++it )
|
++it )
|
||||||
{
|
{
|
||||||
QStringList unmet = missingRequiredModules( it->value( "requiredModules" ).toStringList(),
|
QStringList unmet = missingRequiredModules( it->requiredModules(),
|
||||||
m_availableDescriptorsByModuleName );
|
m_availableDescriptorsByModuleName );
|
||||||
|
|
||||||
if ( unmet.count() > 0 )
|
if ( unmet.count() > 0 )
|
||||||
{
|
{
|
||||||
QString moduleName = it->value( "name" ).toString();
|
QString moduleName = it->name();
|
||||||
somethingWasRemovedBecauseOfUnmetDependencies = true;
|
somethingWasRemovedBecauseOfUnmetDependencies = true;
|
||||||
m_availableDescriptorsByModuleName.erase( it );
|
m_availableDescriptorsByModuleName.erase( it );
|
||||||
numberRemoved++;
|
numberRemoved++;
|
||||||
@ -415,7 +414,7 @@ ModuleManager::checkModuleDependencies( const Module& m )
|
|||||||
|
|
||||||
bool allRequirementsFound = true;
|
bool allRequirementsFound = true;
|
||||||
QStringList requiredModules
|
QStringList requiredModules
|
||||||
= m_availableDescriptorsByModuleName[ m.name() ].value( "requiredModules" ).toStringList();
|
= m_availableDescriptorsByModuleName[ m.name() ].requiredModules();
|
||||||
|
|
||||||
for ( const QString& required : requiredModules )
|
for ( const QString& required : requiredModules )
|
||||||
{
|
{
|
||||||
|
@ -162,7 +162,6 @@ private:
|
|||||||
bool checkModuleDependencies( const Module& );
|
bool checkModuleDependencies( const Module& );
|
||||||
|
|
||||||
QMap< QString, ModuleSystem::Descriptor > m_availableDescriptorsByModuleName;
|
QMap< QString, ModuleSystem::Descriptor > m_availableDescriptorsByModuleName;
|
||||||
QMap< QString, QString > m_moduleDirectoriesByModuleName;
|
|
||||||
QMap< ModuleSystem::InstanceKey, Module* > m_loadedModulesByInstanceKey;
|
QMap< ModuleSystem::InstanceKey, Module* > m_loadedModulesByInstanceKey;
|
||||||
const QStringList m_paths;
|
const QStringList m_paths;
|
||||||
RequirementsModel* m_requirementsModel;
|
RequirementsModel* m_requirementsModel;
|
||||||
|
@ -61,32 +61,14 @@ ProcessJobModule::jobs() const
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ProcessJobModule::initFrom( const QVariantMap& moduleDescriptor )
|
ProcessJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor )
|
||||||
{
|
{
|
||||||
QDir directory( location() );
|
QDir directory( location() );
|
||||||
m_workingPath = directory.absolutePath();
|
m_workingPath = directory.absolutePath();
|
||||||
|
|
||||||
if ( !moduleDescriptor.value( "command" ).toString().isEmpty() )
|
m_command = moduleDescriptor.command();
|
||||||
{
|
m_secondsTimeout = std::chrono::seconds( moduleDescriptor.timeout() );
|
||||||
m_command = moduleDescriptor.value( "command" ).toString();
|
m_runInChroot = moduleDescriptor.chroot();
|
||||||
}
|
|
||||||
|
|
||||||
m_secondsTimeout = std::chrono::seconds( 30 );
|
|
||||||
if ( moduleDescriptor.contains( "timeout" ) && !moduleDescriptor.value( "timeout" ).isNull() )
|
|
||||||
{
|
|
||||||
int sec = moduleDescriptor.value( "timeout" ).toInt();
|
|
||||||
if ( sec < 0 )
|
|
||||||
{
|
|
||||||
sec = 0;
|
|
||||||
}
|
|
||||||
m_secondsTimeout = std::chrono::seconds( sec );
|
|
||||||
}
|
|
||||||
|
|
||||||
m_runInChroot = false;
|
|
||||||
if ( moduleDescriptor.contains( "chroot" ) && !moduleDescriptor.value( "chroot" ).isNull() )
|
|
||||||
{
|
|
||||||
m_runInChroot = moduleDescriptor.value( "chroot" ).toBool();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ public:
|
|||||||
JobList jobs() const override;
|
JobList jobs() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initFrom( const QVariantMap& moduleDescriptor ) override;
|
void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit ProcessJobModule();
|
explicit ProcessJobModule();
|
||||||
|
@ -62,15 +62,11 @@ PythonJobModule::jobs() const
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
PythonJobModule::initFrom( const QVariantMap& moduleDescriptor )
|
PythonJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor )
|
||||||
{
|
{
|
||||||
QDir directory( location() );
|
QDir directory( location() );
|
||||||
m_workingPath = directory.absolutePath();
|
m_workingPath = directory.absolutePath();
|
||||||
|
m_scriptFileName = moduleDescriptor.script();
|
||||||
if ( !moduleDescriptor.value( "script" ).toString().isEmpty() )
|
|
||||||
{
|
|
||||||
m_scriptFileName = moduleDescriptor.value( "script" ).toString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ public:
|
|||||||
JobList jobs() const override;
|
JobList jobs() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initFrom( const QVariantMap& moduleDescriptor ) override;
|
void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit PythonJobModule();
|
explicit PythonJobModule();
|
||||||
|
@ -89,13 +89,12 @@ ViewModule::jobs() const
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ViewModule::initFrom( const QVariantMap& moduleDescriptor )
|
ViewModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor )
|
||||||
{
|
{
|
||||||
QDir directory( location() );
|
QDir directory( location() );
|
||||||
QString load;
|
QString load = moduleDescriptor.load();
|
||||||
if ( !moduleDescriptor.value( "load" ).toString().isEmpty() )
|
if ( !load.isEmpty() )
|
||||||
{
|
{
|
||||||
load = moduleDescriptor.value( "load" ).toString();
|
|
||||||
load = directory.absoluteFilePath( load );
|
load = directory.absoluteFilePath( load );
|
||||||
}
|
}
|
||||||
// If a load path is not specified, we look for a plugin to load in the directory.
|
// If a load path is not specified, we look for a plugin to load in the directory.
|
||||||
|
@ -42,7 +42,7 @@ public:
|
|||||||
RequirementsList checkRequirements() override;
|
RequirementsList checkRequirements() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initFrom( const QVariantMap& moduleDescriptor ) override;
|
void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit ViewModule();
|
explicit ViewModule();
|
||||||
|
Loading…
Reference in New Issue
Block a user