diff --git a/src/libcalamares/modulesystem/InstanceKey.h b/src/libcalamares/modulesystem/InstanceKey.h new file mode 100644 index 000000000..8e04dbaef --- /dev/null +++ b/src/libcalamares/modulesystem/InstanceKey.h @@ -0,0 +1,96 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014-2015, Teo Mrnjavac + * Copyright 2018-2019, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ +#ifndef MODULESYSTEM_INSTANCEKEY_H +#define MODULESYSTEM_INSTANCEKEY_H + +#include +#include +#include + +namespace Calamares +{ +namespace ModuleSystem +{ + +/** @brief A module instance's key (`module@id`) + * + * A module instance is identified by both the module's name + * (a Calamares module, e.g. `users`) and an instance id. + * Usually, the instance id is the same as the module name + * and the whole module instance key is `users@users`, but + * it is possible to use the same module more than once + * and then you distinguish those module instances by their + * secondary id (e.g. `users@one`). + * + * This is supported by the *instances* configuration entry + * in `settings.conf`. + */ +class InstanceKey : public QPair< QString, QString > +{ +public: + /// @brief Create an instance key from explicit module and id. + InstanceKey( const QString& module, const QString& id ) + : QPair( module, id ) + { + if ( second.isEmpty() ) + { + second = first; + } + } + + /// @brief Create "usual" instances keys `module@module` + explicit InstanceKey( const QString& module ) + : QPair( module, module ) + { + } + + /// @brief Create unusual, invalid instance key + InstanceKey() + : QPair( QString(), QString() ) + { + } + + /// @brief A valid module has both name and id + bool isValid() const { return !first.isEmpty() && !second.isEmpty(); } + + /// @brief A custom module has a non-default id + bool isCustom() const { return first != second; } + + QString module() const { return first; } + QString id() const { return second; } + + explicit operator QString() const { return module() + '@' + id(); } + + /// @brief Create instance key from stringified version + static InstanceKey fromString( const QString& s ) + { + QStringList moduleEntrySplit = s.split( '@' ); + if ( moduleEntrySplit.length() < 1 || moduleEntrySplit.length() > 2 ) + { + return InstanceKey(); + } + // For length 1, first == last + return InstanceKey( moduleEntrySplit.first(), moduleEntrySplit.last() ); + } + +}; + +} +} +#endif diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 5bbfbe50a..79ad25325 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -155,7 +155,7 @@ ModuleManager::moduleDescriptor( const QString& name ) Module* ModuleManager::moduleInstance( const QString& instanceKey ) { - return m_loadedModulesByInstanceKey.value( ModuleInstanceKey::fromString( instanceKey ) ); + return m_loadedModulesByInstanceKey.value( ModuleSystem::InstanceKey::fromString( instanceKey ) ); } @@ -165,7 +165,7 @@ ModuleManager::moduleInstance( const QString& instanceKey ) * @return -1 on failure, otherwise index of the instance that matches. */ static int -findCustomInstance( const Settings::InstanceDescriptionList& customInstances, const ModuleInstanceKey& m ) +findCustomInstance( const Settings::InstanceDescriptionList& customInstances, const ModuleSystem::InstanceKey& m ) { for ( int i = 0; i < customInstances.count(); ++i ) { @@ -194,7 +194,7 @@ ModuleManager::loadModules() foreach ( const QString& moduleEntry, modulePhase.second ) { - auto instanceKey = ModuleInstanceKey::fromString( moduleEntry ); + auto instanceKey = ModuleSystem::InstanceKey::fromString( moduleEntry ); if ( !instanceKey.isValid() ) { cError() << "Wrong module entry format for module" << moduleEntry; diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h index ed314c7e0..5fe239ae1 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.h +++ b/src/libcalamaresui/modulesystem/ModuleManager.h @@ -20,6 +20,8 @@ #ifndef MODULELOADER_H #define MODULELOADER_H +#include "modulesystem/InstanceKey.h" + #include "Requirement.h" #include @@ -32,70 +34,6 @@ namespace Calamares class Module; struct RequirementEntry; // from Requirement.h -/** @brief A module instance's key (`module@id`) - * - * A module instance is identified by both the module's name - * (a Calamares module, e.g. `users`) and an instance id. - * Usually, the instance id is the same as the module name - * and the whole module instance key is `users@users`, but - * it is possible to use the same module more than once - * and then you distinguish those module instances by their - * secondary id (e.g. `users@one`). - * - * This is supported by the *instances* configuration entry - * in `settings.conf`. - */ -class ModuleInstanceKey : public QPair< QString, QString > -{ -public: - /// @brief Create an instance key from explicit module and id. - ModuleInstanceKey( const QString& module, const QString& id ) - : QPair( module, id ) - { - if ( second.isEmpty() ) - { - second = first; - } - } - - /// @brief Create "usual" instances keys `module@module` - explicit ModuleInstanceKey( const QString& module ) - : QPair( module, module ) - { - } - - /// @brief Create unusual, invalid instance key - ModuleInstanceKey() - : QPair( QString(), QString() ) - { - } - - /// @brief A valid module has both name and id - bool isValid() const { return !first.isEmpty() && !second.isEmpty(); } - - /// @brief A custom module has a non-default id - bool isCustom() const { return first != second; } - - QString module() const { return first; } - QString id() const { return second; } - - explicit operator QString() const { return module() + '@' + id(); } - - /// @brief Create instance key from stringified version - static ModuleInstanceKey fromString( const QString& s ) - { - QStringList moduleEntrySplit = s.split( '@' ); - if ( moduleEntrySplit.length() < 1 || moduleEntrySplit.length() > 2 ) - { - return ModuleInstanceKey(); - } - // For length 1, first == last - return ModuleInstanceKey( moduleEntrySplit.first(), moduleEntrySplit.last() ); - } - -}; - - /** * @brief The ModuleManager class is a singleton which manages Calamares modules. * @@ -187,7 +125,7 @@ private: QMap< QString, QVariantMap > m_availableDescriptorsByModuleName; QMap< QString, QString > m_moduleDirectoriesByModuleName; - QMap< ModuleInstanceKey, Module* > m_loadedModulesByInstanceKey; + QMap< ModuleSystem::InstanceKey, Module* > m_loadedModulesByInstanceKey; const QStringList m_paths; static ModuleManager* s_instance;