diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index a77f334ff..cf9d9ad65 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -73,7 +73,8 @@ public: } emitProgress(); - cDebug() << "Starting" << ( anyFailed ? "EMERGENCY JOB" : "job" ) << job->prettyName() << " (there are" << m_jobs.count() << " left)"; + cDebug() << "Starting" << ( anyFailed ? "EMERGENCY JOB" : "job" ) << job->prettyName() << " (there are" + << m_jobs.count() << " left)"; connect( job.data(), &Job::progress, this, &JobThread::emitProgress ); JobResult result = job->exec(); if ( !anyFailed && !result ) @@ -113,22 +114,22 @@ private: int jobCount = m_jobs.size(); QString message = m_jobIndex < jobCount ? m_jobs.at( m_jobIndex )->prettyStatusMessage() : tr( "Done" ); - qreal cumulativeProgress = 0.0; - for ( auto jobWeight : m_jobWeights.mid( 0, m_jobIndex ) ) - { - cumulativeProgress += jobWeight; - } - qreal percent - = m_jobIndex < jobCount ? cumulativeProgress + ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ) : 1.0; - + qreal percent = 1.0; // Pretend we're done, since the if will reset it if ( m_jobIndex < jobCount ) { - Logger::CDebug( Logger::LOGVERBOSE ) << "[JOBQUEUE]: Progress for Job[" << m_jobIndex - << "]: " << ( jobPercent * 100 ) << "% completed"; - Logger::CDebug( Logger::LOGVERBOSE ) << "[JOBQUEUE]: Progress Overall: " << ( cumulativeProgress * 100 ) - << "% (accumulated) + " - << ( ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ) * 100 ) - << "% (this job) = " << ( percent * 100 ) << "% (total)"; + qreal cumulativeProgress = 0.0; + for ( auto jobWeight : m_jobWeights.mid( 0, m_jobIndex ) ) + { + cumulativeProgress += jobWeight; + } + percent = cumulativeProgress + ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ); + + Logger::CDebug( Logger::LOGVERBOSE ) + << "[JOBQUEUE]: Progress for Job[" << m_jobIndex << "]: " << ( jobPercent * 100 ) << "% completed"; + Logger::CDebug( Logger::LOGVERBOSE ) + << "[JOBQUEUE]: Progress Overall: " << ( cumulativeProgress * 100 ) << "% (accumulated) + " + << ( ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ) * 100 ) + << "% (this job) = " << ( percent * 100 ) << "% (total)"; } QMetaObject::invokeMethod( m_queue, "progress", Qt::QueuedConnection, Q_ARG( qreal, percent ), Q_ARG( QString, message ) ); diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 48f8c606d..7e1c15e30 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -71,6 +71,24 @@ requireBool( const YAML::Node& config, const char* key, bool d ) namespace Calamares { +InstanceDescription::InstanceDescription( const QVariantMap& m ) + : module( m.value( "module" ).toString() ) + , id( m.value( "id" ).toString() ) + , config( m.value( "config" ).toString() ) + , weight( m.value( "weight" ).toInt() ) +{ + if ( id.isEmpty() ) + { + id = module; + } + if ( config.isEmpty() ) + { + config = module + QStringLiteral( ".conf" ); + } + + weight = qBound( 1, weight, 100 ); +} + Settings* Settings::s_instance = nullptr; Settings* @@ -134,17 +152,7 @@ interpretInstances( const YAML::Node& node, Settings::InstanceDescriptionList& c { continue; } - QVariantMap instancesVListItemMap = instancesVListItem.toMap(); - Settings::InstanceDescription instanceMap; - for ( auto it = instancesVListItemMap.constBegin(); it != instancesVListItemMap.constEnd(); ++it ) - { - if ( it.value().type() != QVariant::String ) - { - continue; - } - instanceMap.insert( it.key(), it.value().toString() ); - } - customInstances.append( instanceMap ); + customInstances.append( InstanceDescription( instancesVListItem.toMap() ) ); } } } @@ -302,7 +310,7 @@ Settings::init( bool debugMode ) cWarning() << "Calamares::Settings already created"; return s_instance; } - + QStringList settingsFileCandidatesByPriority = settingsFileCandidates( debugMode ); QFileInfo settingsFile; @@ -340,7 +348,7 @@ Settings::init( bool debugMode ) cError() << "FATAL: no sequence set."; ::exit( EXIT_FAILURE ); } - + return settings; } diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 26990f027..94474c09c 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -32,20 +32,30 @@ namespace Calamares { +struct DLLEXPORT InstanceDescription +{ + InstanceDescription( const QVariantMap& ); + + QString module; ///< Module name (e.g. "welcome") + QString id; ///< Id, to distinguish multiple instances (e.g. "one", for "welcome@one") + QString config; ///< Config-file name (for multiple instances) + int weight; +}; + class DLLEXPORT Settings : public QObject { Q_OBJECT explicit Settings( const QString& settingsFilePath, bool debugMode ); + public: static Settings* instance(); /// @brief Find a settings.conf, following @p debugMode static Settings* init( bool debugMode ); /// @brief Explicif filename, debug is always true (for testing) static Settings* init( const QString& filename ); - + QStringList modulesSearchPaths() const; - using InstanceDescription = QMap< QString, QString >; using InstanceDescriptionList = QList< InstanceDescription >; InstanceDescriptionList customModuleInstances() const; @@ -55,7 +65,7 @@ public: QString brandingComponentName() const; /** @brief Is this a debugging run? - * + * * Returns true if Calamares is in debug mode. In debug mode, * modules and settings are loaded from more locations, to help * development and debugging. @@ -63,7 +73,7 @@ public: bool debugMode() const { return m_debug; } /** @brief Distinguish "install" from "OEM" modes. - * + * * Returns true in "install" mode, which is where actions happen * in a chroot -- the target system, which exists separately from * the source system. In "OEM" mode, returns false and most actions @@ -72,13 +82,13 @@ public: bool doChroot() const { return m_doChroot; } /** @brief Global setting of prompt-before-install. - * + * * Returns true when the configuration is such that the user * should be prompted one-last-time before any action is taken * that really affects the machine. */ bool showPromptBeforeExecution() const { return m_promptInstall; } - + /** @brief Distinguish between "install" and "setup" modes. * * This influences user-visible strings, for instance using the diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 6202493e2..f88d5999d 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -129,9 +129,8 @@ ModuleManager::doInit() } // At this point m_availableDescriptorsByModuleName is filled with // the modules that were found in the search paths. - cDebug() << "Found" - << m_availableDescriptorsByModuleName.count() << "modules" - << m_moduleDirectoriesByModuleName.count() << "names"; + cDebug() << "Found" << m_availableDescriptorsByModuleName.count() << "modules" + << m_moduleDirectoriesByModuleName.count() << "names"; emit initDone(); } @@ -167,7 +166,7 @@ findCustomInstance( const Settings::InstanceDescriptionList& customInstances, co for ( int i = 0; i < customInstances.count(); ++i ) { const auto& thisInstance = customInstances[ i ]; - if ( thisInstance.value( "module" ) == m.module() && thisInstance.value( "id" ) == m.id() ) + if ( thisInstance.module == m.module() && thisInstance.id == m.id() ) { return i; } @@ -196,7 +195,7 @@ getConfigFileName( const Settings::InstanceDescriptionList& customInstances, return QString(); } - return customInstances[ found ].value( "config" ); + return customInstances[ found ].config; } else {