[calamares] Reformat the rest of the application

This commit is contained in:
Adriaan de Groot 2019-06-11 13:33:42 +02:00
parent 9235499f7f
commit a6d7fcdadf
6 changed files with 179 additions and 99 deletions

View File

@ -19,22 +19,22 @@
#include "CalamaresApplication.h" #include "CalamaresApplication.h"
#include "CalamaresConfig.h" #include "CalamaresConfig.h"
#include "CalamaresWindow.h"
#include "CalamaresVersion.h" #include "CalamaresVersion.h"
#include "progresstree/ProgressTreeView.h" #include "CalamaresWindow.h"
#include "progresstree/ProgressTreeModel.h" #include "progresstree/ProgressTreeModel.h"
#include "progresstree/ProgressTreeView.h"
#include "Branding.h"
#include "JobQueue.h"
#include "Settings.h"
#include "ViewManager.h"
#include "modulesystem/ModuleManager.h" #include "modulesystem/ModuleManager.h"
#include "utils/CalamaresUtilsGui.h" #include "utils/CalamaresUtilsGui.h"
#include "utils/CalamaresUtilsSystem.h" #include "utils/CalamaresUtilsSystem.h"
#include "utils/Dirs.h" #include "utils/Dirs.h"
#include "utils/Logger.h" #include "utils/Logger.h"
#include "utils/Retranslator.h" #include "utils/Retranslator.h"
#include "JobQueue.h"
#include "Branding.h"
#include "Settings.h"
#include "viewpages/ViewStep.h" #include "viewpages/ViewStep.h"
#include "ViewManager.h"
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QDir> #include <QDir>
@ -77,8 +77,7 @@ CalamaresApplication::init()
initSettings(); initSettings();
initBranding(); initBranding();
setWindowIcon( QIcon( Calamares::Branding::instance()-> setWindowIcon( QIcon( Calamares::Branding::instance()->imagePath( Calamares::Branding::ProductIcon ) ) );
imagePath( Calamares::Branding::ProductIcon ) ) );
cDebug() << "STARTUP: initQmlPath, initSettings, initBranding done"; cDebug() << "STARTUP: initQmlPath, initSettings, initBranding done";
@ -130,14 +129,20 @@ qmlDirCandidates( bool assumeBuilddir )
QStringList qmlDirs; QStringList qmlDirs;
if ( CalamaresUtils::isAppDataDirOverridden() ) if ( CalamaresUtils::isAppDataDirOverridden() )
{
qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML );
}
else else
{ {
if ( assumeBuilddir ) if ( assumeBuilddir )
{
qmlDirs << QDir::current().absoluteFilePath( "src/qml" ); // In build-dir qmlDirs << QDir::current().absoluteFilePath( "src/qml" ); // In build-dir
}
if ( CalamaresUtils::haveExtraDirs() ) if ( CalamaresUtils::haveExtraDirs() )
for ( auto s : CalamaresUtils::extraDataDirs() ) for ( auto s : CalamaresUtils::extraDataDirs() )
{
qmlDirs << ( s + QML ); qmlDirs << ( s + QML );
}
qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML );
} }
@ -152,14 +157,20 @@ settingsFileCandidates( bool assumeBuilddir )
QStringList settingsPaths; QStringList settingsPaths;
if ( CalamaresUtils::isAppDataDirOverridden() ) if ( CalamaresUtils::isAppDataDirOverridden() )
{
settingsPaths << CalamaresUtils::appDataDir().absoluteFilePath( settings ); settingsPaths << CalamaresUtils::appDataDir().absoluteFilePath( settings );
}
else else
{ {
if ( assumeBuilddir ) if ( assumeBuilddir )
{
settingsPaths << QDir::current().absoluteFilePath( settings ); settingsPaths << QDir::current().absoluteFilePath( settings );
}
if ( CalamaresUtils::haveExtraDirs() ) if ( CalamaresUtils::haveExtraDirs() )
for ( auto s : CalamaresUtils::extraConfigDirs() ) for ( auto s : CalamaresUtils::extraConfigDirs() )
{
settingsPaths << ( s + settings ); settingsPaths << ( s + settings );
}
settingsPaths << CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/settings.conf"; // String concat settingsPaths << CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/settings.conf"; // String concat
settingsPaths << CalamaresUtils::appDataDir().absoluteFilePath( settings ); settingsPaths << CalamaresUtils::appDataDir().absoluteFilePath( settings );
} }
@ -173,16 +184,22 @@ brandingFileCandidates( bool assumeBuilddir, const QString& brandingFilename )
{ {
QStringList brandingPaths; QStringList brandingPaths;
if ( CalamaresUtils::isAppDataDirOverridden() ) if ( CalamaresUtils::isAppDataDirOverridden() )
{
brandingPaths << CalamaresUtils::appDataDir().absoluteFilePath( brandingFilename ); brandingPaths << CalamaresUtils::appDataDir().absoluteFilePath( brandingFilename );
}
else else
{ {
if ( assumeBuilddir ) if ( assumeBuilddir )
{
brandingPaths << ( QDir::currentPath() + QStringLiteral( "/src/" ) + brandingFilename ); brandingPaths << ( QDir::currentPath() + QStringLiteral( "/src/" ) + brandingFilename );
}
if ( CalamaresUtils::haveExtraDirs() ) if ( CalamaresUtils::haveExtraDirs() )
for ( auto s : CalamaresUtils::extraDataDirs() ) for ( auto s : CalamaresUtils::extraDataDirs() )
{
brandingPaths << ( s + brandingFilename ); brandingPaths << ( s + brandingFilename );
}
brandingPaths << QDir( CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/" ).absoluteFilePath( brandingFilename ); brandingPaths << QDir( CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/" ).absoluteFilePath( brandingFilename );
brandingPaths << CalamaresUtils::appDataDir().absoluteFilePath( brandingFilename); brandingPaths << CalamaresUtils::appDataDir().absoluteFilePath( brandingFilename );
} }
return brandingPaths; return brandingPaths;
@ -212,9 +229,13 @@ CalamaresApplication::initQmlPath()
cError() << "Cowardly refusing to continue startup without a QML directory." cError() << "Cowardly refusing to continue startup without a QML directory."
<< Logger::DebugList( qmlDirCandidatesByPriority ); << Logger::DebugList( qmlDirCandidatesByPriority );
if ( CalamaresUtils::isAppDataDirOverridden() ) if ( CalamaresUtils::isAppDataDirOverridden() )
{
cError() << "FATAL: explicitly configured application data directory is missing qml/"; cError() << "FATAL: explicitly configured application data directory is missing qml/";
}
else else
{
cError() << "FATAL: none of the expected QML paths exist."; cError() << "FATAL: none of the expected QML paths exist.";
}
::exit( EXIT_FAILURE ); ::exit( EXIT_FAILURE );
} }
@ -247,9 +268,13 @@ CalamaresApplication::initSettings()
cError() << "Cowardly refusing to continue startup without settings." cError() << "Cowardly refusing to continue startup without settings."
<< Logger::DebugList( settingsFileCandidatesByPriority ); << Logger::DebugList( settingsFileCandidatesByPriority );
if ( CalamaresUtils::isAppDataDirOverridden() ) if ( CalamaresUtils::isAppDataDirOverridden() )
{
cError() << "FATAL: explicitly configured application data directory is missing settings.conf"; cError() << "FATAL: explicitly configured application data directory is missing settings.conf";
}
else else
{
cError() << "FATAL: none of the expected configuration file paths exist."; cError() << "FATAL: none of the expected configuration file paths exist.";
}
::exit( EXIT_FAILURE ); ::exit( EXIT_FAILURE );
} }
@ -273,7 +298,7 @@ CalamaresApplication::initBranding()
} }
QString brandingDescriptorSubpath = QString( "branding/%1/branding.desc" ).arg( brandingComponentName ); QString brandingDescriptorSubpath = QString( "branding/%1/branding.desc" ).arg( brandingComponentName );
QStringList brandingFileCandidatesByPriority = brandingFileCandidates( isDebug(), brandingDescriptorSubpath); QStringList brandingFileCandidatesByPriority = brandingFileCandidates( isDebug(), brandingDescriptorSubpath );
QFileInfo brandingFile; QFileInfo brandingFile;
bool found = false; bool found = false;
@ -294,9 +319,13 @@ CalamaresApplication::initBranding()
cError() << "Cowardly refusing to continue startup without branding." cError() << "Cowardly refusing to continue startup without branding."
<< Logger::DebugList( brandingFileCandidatesByPriority ); << Logger::DebugList( brandingFileCandidatesByPriority );
if ( CalamaresUtils::isAppDataDirOverridden() ) if ( CalamaresUtils::isAppDataDirOverridden() )
{
cError() << "FATAL: explicitly configured application data directory is missing" << brandingComponentName; cError() << "FATAL: explicitly configured application data directory is missing" << brandingComponentName;
}
else else
{
cError() << "FATAL: none of the expected branding descriptor file paths exist."; cError() << "FATAL: none of the expected branding descriptor file paths exist.";
}
::exit( EXIT_FAILURE ); ::exit( EXIT_FAILURE );
} }
@ -307,10 +336,8 @@ CalamaresApplication::initBranding()
void void
CalamaresApplication::initModuleManager() CalamaresApplication::initModuleManager()
{ {
m_moduleManager = new Calamares::ModuleManager( m_moduleManager = new Calamares::ModuleManager( Calamares::Settings::instance()->modulesSearchPaths(), this );
Calamares::Settings::instance()->modulesSearchPaths(), this ); connect( m_moduleManager, &Calamares::ModuleManager::initDone, this, &CalamaresApplication::initView );
connect( m_moduleManager, &Calamares::ModuleManager::initDone,
this, &CalamaresApplication::initView );
m_moduleManager->init(); m_moduleManager->init();
} }
@ -324,16 +351,12 @@ CalamaresApplication::initView()
m_mainwindow = new CalamaresWindow(); //also creates ViewManager m_mainwindow = new CalamaresWindow(); //also creates ViewManager
connect( m_moduleManager, &Calamares::ModuleManager::modulesLoaded, connect( m_moduleManager, &Calamares::ModuleManager::modulesLoaded, this, &CalamaresApplication::initViewSteps );
this, &CalamaresApplication::initViewSteps ); connect( m_moduleManager, &Calamares::ModuleManager::modulesFailed, this, &CalamaresApplication::initFailed );
connect( m_moduleManager, &Calamares::ModuleManager::modulesFailed,
this, &CalamaresApplication::initFailed );
m_moduleManager->loadModules(); m_moduleManager->loadModules();
m_mainwindow->move( m_mainwindow->move( this->desktop()->availableGeometry().center() - m_mainwindow->rect().center() );
this->desktop()->availableGeometry().center() -
m_mainwindow->rect().center() );
cDebug() << "STARTUP: CalamaresWindow created; loadModules started"; cDebug() << "STARTUP: CalamaresWindow created; loadModules started";
} }
@ -350,7 +373,9 @@ CalamaresApplication::initViewSteps()
m_mainwindow->showMaximized(); m_mainwindow->showMaximized();
} }
else else
{
m_mainwindow->show(); m_mainwindow->show();
}
ProgressTreeModel* m = new ProgressTreeModel( nullptr ); ProgressTreeModel* m = new ProgressTreeModel( nullptr );
ProgressTreeView::instance()->setModel( m ); ProgressTreeView::instance()->setModel( m );
@ -360,11 +385,13 @@ CalamaresApplication::initViewSteps()
cDebug() << Logger::SubEntry << steps.count() << "view steps loaded."; cDebug() << Logger::SubEntry << steps.count() << "view steps loaded.";
// Tell the first view that it's been shown. // Tell the first view that it's been shown.
if ( steps.count() > 0 ) if ( steps.count() > 0 )
steps[0]->onActivate(); {
steps[ 0 ]->onActivate();
}
} }
void void
CalamaresApplication::initFailed(const QStringList& l) CalamaresApplication::initFailed( const QStringList& l )
{ {
cError() << "STARTUP: failed modules are" << l; cError() << "STARTUP: failed modules are" << l;
m_mainwindow->show(); m_mainwindow->show();

View File

@ -21,33 +21,39 @@
#include "CalamaresWindow.h" #include "CalamaresWindow.h"
#include "Branding.h"
#include "Settings.h"
#include "ViewManager.h" #include "ViewManager.h"
#include "progresstree/ProgressTreeView.h" #include "progresstree/ProgressTreeView.h"
#include "utils/CalamaresUtilsGui.h" #include "utils/CalamaresUtilsGui.h"
#include "utils/Logger.h"
#include "utils/DebugWindow.h" #include "utils/DebugWindow.h"
#include "utils/Logger.h"
#include "utils/Retranslator.h" #include "utils/Retranslator.h"
#include "Settings.h"
#include "Branding.h"
#include <QApplication> #include <QApplication>
#include <QBoxLayout> #include <QBoxLayout>
#include <QCloseEvent> #include <QCloseEvent>
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QLabel>
#include <QTreeView>
#include <QFile> #include <QFile>
#include <QFileInfo> #include <QFileInfo>
#include <QLabel>
#include <QTreeView>
static inline int static inline int
windowDimensionToPixels( const Calamares::Branding::WindowDimension& u ) windowDimensionToPixels( const Calamares::Branding::WindowDimension& u )
{ {
if ( !u.isValid() ) if ( !u.isValid() )
{
return 0; return 0;
}
if ( u.unit() == Calamares::Branding::WindowDimensionUnit::Pixies ) if ( u.unit() == Calamares::Branding::WindowDimensionUnit::Pixies )
{
return u.value(); return u.value();
}
if ( u.unit() == Calamares::Branding::WindowDimensionUnit::Fonties ) if ( u.unit() == Calamares::Branding::WindowDimensionUnit::Fonties )
{
return u.value() * CalamaresUtils::defaultFontHeight(); return u.value() * CalamaresUtils::defaultFontHeight();
}
return 0; return 0;
} }
@ -58,14 +64,13 @@ CalamaresWindow::CalamaresWindow( QWidget* parent )
{ {
// If we can never cancel, don't show the window-close button // If we can never cancel, don't show the window-close button
if ( Calamares::Settings::instance()->disableCancel() ) if ( Calamares::Settings::instance()->disableCancel() )
{
setWindowFlag( Qt::WindowCloseButtonHint, false ); setWindowFlag( Qt::WindowCloseButtonHint, false );
}
CALAMARES_RETRANSLATE( CALAMARES_RETRANSLATE( setWindowTitle( Calamares::Settings::instance()->isSetupMode()
setWindowTitle( Calamares::Settings::instance()->isSetupMode()
? tr( "%1 Setup Program" ).arg( *Calamares::Branding::ProductName ) ? tr( "%1 Setup Program" ).arg( *Calamares::Branding::ProductName )
: tr( "%1 Installer" ).arg( *Calamares::Branding::ProductName ) : tr( "%1 Installer" ).arg( *Calamares::Branding::ProductName ) ); )
);
)
const Calamares::Branding* const branding = Calamares::Branding::instance(); const Calamares::Branding* const branding = Calamares::Branding::instance();
@ -75,7 +80,7 @@ CalamaresWindow::CalamaresWindow( QWidget* parent )
using CalamaresUtils::windowPreferredWidth; using CalamaresUtils::windowPreferredWidth;
// Needs to match what's checked in DebugWindow // Needs to match what's checked in DebugWindow
this->setObjectName("mainApp"); this->setObjectName( "mainApp" );
QSize availableSize = qApp->desktop()->availableGeometry( this ).size(); QSize availableSize = qApp->desktop()->availableGeometry( this ).size();
QSize minimumSize( qBound( windowMinimumWidth, availableSize.width(), windowPreferredWidth ), QSize minimumSize( qBound( windowMinimumWidth, availableSize.width(), windowPreferredWidth ),
@ -96,25 +101,26 @@ CalamaresWindow::CalamaresWindow( QWidget* parent )
setLayout( mainLayout ); setLayout( mainLayout );
QWidget* sideBox = new QWidget( this ); QWidget* sideBox = new QWidget( this );
sideBox->setObjectName("sidebarApp"); sideBox->setObjectName( "sidebarApp" );
mainLayout->addWidget( sideBox ); mainLayout->addWidget( sideBox );
QBoxLayout* sideLayout = new QVBoxLayout; QBoxLayout* sideLayout = new QVBoxLayout;
sideBox->setLayout( sideLayout ); sideBox->setLayout( sideLayout );
// Set this attribute into qss file // Set this attribute into qss file
sideBox->setFixedWidth( qBound( 100, CalamaresUtils::defaultFontHeight() * 12, w < windowPreferredWidth ? 100 : 190 ) ); sideBox->setFixedWidth(
qBound( 100, CalamaresUtils::defaultFontHeight() * 12, w < windowPreferredWidth ? 100 : 190 ) );
sideBox->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); sideBox->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
QHBoxLayout* logoLayout = new QHBoxLayout; QHBoxLayout* logoLayout = new QHBoxLayout;
sideLayout->addLayout( logoLayout ); sideLayout->addLayout( logoLayout );
logoLayout->addStretch(); logoLayout->addStretch();
QLabel* logoLabel = new QLabel( sideBox ); QLabel* logoLabel = new QLabel( sideBox );
logoLabel->setObjectName("logoApp"); logoLabel->setObjectName( "logoApp" );
//Define all values into qss file //Define all values into qss file
{ {
QPalette plt = sideBox->palette(); QPalette plt = sideBox->palette();
sideBox->setAutoFillBackground( true ); sideBox->setAutoFillBackground( true );
plt.setColor( sideBox->backgroundRole(),branding->styleString( Calamares::Branding::SidebarBackground ) ); plt.setColor( sideBox->backgroundRole(), branding->styleString( Calamares::Branding::SidebarBackground ) );
plt.setColor( sideBox->foregroundRole(), branding->styleString( Calamares::Branding::SidebarText ) ); plt.setColor( sideBox->foregroundRole(), branding->styleString( Calamares::Branding::SidebarText ) );
sideBox->setPalette( plt ); sideBox->setPalette( plt );
logoLabel->setPalette( plt ); logoLabel->setPalette( plt );
@ -133,22 +139,16 @@ CalamaresWindow::CalamaresWindow( QWidget* parent )
{ {
QPushButton* debugWindowBtn = new QPushButton; QPushButton* debugWindowBtn = new QPushButton;
debugWindowBtn->setObjectName( "debugButton" ); debugWindowBtn->setObjectName( "debugButton" );
CALAMARES_RETRANSLATE( CALAMARES_RETRANSLATE( debugWindowBtn->setText( tr( "Show debug information" ) ); )
debugWindowBtn->setText( tr( "Show debug information" ) );
)
sideLayout->addWidget( debugWindowBtn ); sideLayout->addWidget( debugWindowBtn );
debugWindowBtn->setFlat( true ); debugWindowBtn->setFlat( true );
debugWindowBtn->setCheckable( true ); debugWindowBtn->setCheckable( true );
connect( debugWindowBtn, &QPushButton::clicked, connect( debugWindowBtn, &QPushButton::clicked, this, [=]( bool checked ) {
this, [ = ]( bool checked )
{
if ( checked ) if ( checked )
{ {
m_debugWindow = new Calamares::DebugWindow(); m_debugWindow = new Calamares::DebugWindow();
m_debugWindow->show(); m_debugWindow->show();
connect( m_debugWindow.data(), &Calamares::DebugWindow::closed, connect( m_debugWindow.data(), &Calamares::DebugWindow::closed, this, [=]() {
this, [ = ]()
{
m_debugWindow->deleteLater(); m_debugWindow->deleteLater();
debugWindowBtn->setChecked( false ); debugWindowBtn->setChecked( false );
} ); } );
@ -156,8 +156,10 @@ CalamaresWindow::CalamaresWindow( QWidget* parent )
else else
{ {
if ( m_debugWindow ) if ( m_debugWindow )
{
m_debugWindow->deleteLater(); m_debugWindow->deleteLater();
} }
}
} ); } );
} }
@ -166,7 +168,9 @@ CalamaresWindow::CalamaresWindow( QWidget* parent )
m_viewManager = Calamares::ViewManager::instance( this ); m_viewManager = Calamares::ViewManager::instance( this );
if ( branding->windowExpands() ) if ( branding->windowExpands() )
{
connect( m_viewManager, &Calamares::ViewManager::enlarge, this, &CalamaresWindow::enlarge ); connect( m_viewManager, &Calamares::ViewManager::enlarge, this, &CalamaresWindow::enlarge );
}
// NOTE: Although the ViewManager has a signal cancelEnabled() that // NOTE: Although the ViewManager has a signal cancelEnabled() that
// signals when the state of the cancel button changes (in // signals when the state of the cancel button changes (in
// particular, to disable cancel during the exec phase), // particular, to disable cancel during the exec phase),
@ -201,5 +205,7 @@ CalamaresWindow::closeEvent( QCloseEvent* event )
qApp->quit(); qApp->quit();
} }
else else
{
event->ignore(); event->ignore();
}
} }

View File

@ -27,7 +27,7 @@ namespace Calamares
{ {
class DebugWindow; class DebugWindow;
class ViewManager; class ViewManager;
} } // namespace Calamares
/** /**
* @brief The CalamaresWindow class represents the main window of the Calamares UI. * @brief The CalamaresWindow class represents the main window of the Calamares UI.

View File

@ -24,11 +24,10 @@
#include "kdsingleapplicationguard/kdsingleapplicationguard.h" #include "kdsingleapplicationguard/kdsingleapplicationguard.h"
#include "utils/Dirs.h" #include "utils/Dirs.h"
#include "utils/Logger.h" #include "utils/Logger.h"
#include "CalamaresConfig.h"
#ifdef WITH_KF5Crash #ifdef WITH_KF5Crash
#include <KF5/KCrash/KCrash>
#include <KF5/KCoreAddons/KAboutData> #include <KF5/KCoreAddons/KAboutData>
#include <KF5/KCrash/KCrash>
#endif #endif
#include <QCommandLineParser> #include <QCommandLineParser>
@ -38,14 +37,13 @@
static void static void
handle_args( CalamaresApplication& a ) handle_args( CalamaresApplication& a )
{ {
QCommandLineOption debugOption( QStringList{ "d", "debug"}, QCommandLineOption debugOption( QStringList { "d", "debug" },
"Also look in current directory for configuration. Implies -D8." ); "Also look in current directory for configuration. Implies -D8." );
QCommandLineOption debugLevelOption( QStringLiteral("D"), QCommandLineOption debugLevelOption(
"Verbose output for debugging purposes (0-8).", "level" ); QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8).", "level" );
QCommandLineOption configOption( QStringList{ "c", "config"}, QCommandLineOption configOption(
"Configuration directory to use, for testing purposes.", "config" ); QStringList { "c", "config" }, "Configuration directory to use, for testing purposes.", "config" );
QCommandLineOption xdgOption( QStringList{"X", "xdg-config"}, QCommandLineOption xdgOption( QStringList { "X", "xdg-config" }, "Use XDG_{CONFIG,DATA}_DIRS as well." );
"Use XDG_{CONFIG,DATA}_DIRS as well." );
QCommandLineParser parser; QCommandLineParser parser;
parser.setApplicationDescription( "Distribution-independent installer framework" ); parser.setApplicationDescription( "Distribution-independent installer framework" );
@ -61,22 +59,32 @@ handle_args( CalamaresApplication& a )
a.setDebug( parser.isSet( debugOption ) ); a.setDebug( parser.isSet( debugOption ) );
if ( parser.isSet( debugOption ) ) if ( parser.isSet( debugOption ) )
{
Logger::setupLogLevel( Logger::LOGVERBOSE ); Logger::setupLogLevel( Logger::LOGVERBOSE );
}
else if ( parser.isSet( debugLevelOption ) ) else if ( parser.isSet( debugLevelOption ) )
{ {
bool ok = true; bool ok = true;
int l = parser.value( debugLevelOption ).toInt( &ok ); int l = parser.value( debugLevelOption ).toInt( &ok );
unsigned int dlevel = 0; unsigned int dlevel = 0;
if ( !ok || ( l < 0 ) ) if ( !ok || ( l < 0 ) )
{
dlevel = Logger::LOGVERBOSE; dlevel = Logger::LOGVERBOSE;
}
else else
dlevel = static_cast<unsigned int>( l ); // l >= 0 {
dlevel = static_cast< unsigned int >( l ); // l >= 0
}
Logger::setupLogLevel( dlevel ); Logger::setupLogLevel( dlevel );
} }
if ( parser.isSet( configOption ) ) if ( parser.isSet( configOption ) )
{
CalamaresUtils::setAppDataDir( QDir( parser.value( configOption ) ) ); CalamaresUtils::setAppDataDir( QDir( parser.value( configOption ) ) );
}
if ( parser.isSet( xdgOption ) ) if ( parser.isSet( xdgOption ) )
{
CalamaresUtils::setXdgDirs(); CalamaresUtils::setXdgDirs();
}
} }
int int
@ -118,10 +126,14 @@ main( int argc, char* argv[] )
auto instancelist = guard.instances(); auto instancelist = guard.instances();
qDebug() << "Calamares is already running, shutting down."; qDebug() << "Calamares is already running, shutting down.";
if ( instancelist.count() > 0 ) if ( instancelist.count() > 0 )
{
qDebug() << "Other running Calamares instances:"; qDebug() << "Other running Calamares instances:";
}
for ( const auto& i : instancelist ) for ( const auto& i : instancelist )
{
qDebug() << " " << i.isValid() << i.pid() << i.arguments(); qDebug() << " " << i.isValid() << i.pid() << i.arguments();
} }
}
return returnCode; return returnCode;
} }

View File

@ -22,9 +22,9 @@
* bindings. * bindings.
*/ */
#include "modulesystem/Module.h"
#include "utils/Logger.h" #include "utils/Logger.h"
#include "utils/Yaml.h" #include "utils/Yaml.h"
#include "modulesystem/Module.h"
#include "GlobalStorage.h" #include "GlobalStorage.h"
#include "Job.h" #include "Job.h"
@ -40,28 +40,47 @@
struct ModuleConfig struct ModuleConfig
{ {
QString moduleName() const { return m_module; } QString
QString configFile() const { return m_jobConfig; } moduleName() const
QString language() const { return m_language; } {
QString globalConfigFile() const { return m_globalConfig; } return m_module;
}
QString
configFile() const
{
return m_jobConfig;
}
QString
language() const
{
return m_language;
}
QString
globalConfigFile() const
{
return m_globalConfig;
}
QString m_module; QString m_module;
QString m_jobConfig; QString m_jobConfig;
QString m_globalConfig; QString m_globalConfig;
QString m_language; QString m_language;
} ; };
static ModuleConfig static ModuleConfig
handle_args( QCoreApplication& a ) handle_args( QCoreApplication& a )
{ {
QCommandLineOption debugLevelOption( QStringLiteral("D"), QCommandLineOption debugLevelOption(
"Verbose output for debugging purposes (0-8).", "level" ); QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8).", "level" );
QCommandLineOption globalOption( QStringList() << QStringLiteral( "g" ) << QStringLiteral( "global "), QCommandLineOption globalOption( QStringList() << QStringLiteral( "g" ) << QStringLiteral( "global " ),
QStringLiteral( "Global settings document" ), "global.yaml" ); QStringLiteral( "Global settings document" ),
QCommandLineOption jobOption( QStringList() << QStringLiteral( "j" ) << QStringLiteral( "job"), "global.yaml" );
QStringLiteral( "Job settings document" ), "job.yaml" ); QCommandLineOption jobOption( QStringList() << QStringLiteral( "j" ) << QStringLiteral( "job" ),
QStringLiteral( "Job settings document" ),
"job.yaml" );
QCommandLineOption langOption( QStringList() << QStringLiteral( "l" ) << QStringLiteral( "language" ), QCommandLineOption langOption( QStringList() << QStringLiteral( "l" ) << QStringLiteral( "language" ),
QStringLiteral( "Language (global)" ), "languagecode" ); QStringLiteral( "Language (global)" ),
"languagecode" );
QCommandLineParser parser; QCommandLineParser parser;
parser.setApplicationDescription( "Calamares module tester" ); parser.setApplicationDescription( "Calamares module tester" );
@ -73,7 +92,7 @@ handle_args( QCoreApplication& a )
parser.addOption( jobOption ); parser.addOption( jobOption );
parser.addOption( langOption ); parser.addOption( langOption );
parser.addPositionalArgument( "module", "Path or name of module to run." ); parser.addPositionalArgument( "module", "Path or name of module to run." );
parser.addPositionalArgument( "job.yaml", "Path of job settings document to use.", "[job.yaml]"); parser.addPositionalArgument( "job.yaml", "Path of job settings document to use.", "[job.yaml]" );
parser.process( a ); parser.process( a );
@ -83,9 +102,13 @@ handle_args( QCoreApplication& a )
unsigned int l = parser.value( debugLevelOption ).toUInt( &ok ); unsigned int l = parser.value( debugLevelOption ).toUInt( &ok );
unsigned int dlevel = 0; unsigned int dlevel = 0;
if ( !ok ) if ( !ok )
{
dlevel = Logger::LOGVERBOSE; dlevel = Logger::LOGVERBOSE;
}
else else
{
dlevel = l; dlevel = l;
}
Logger::setupLogLevel( dlevel ); Logger::setupLogLevel( dlevel );
} }
@ -104,9 +127,11 @@ handle_args( QCoreApplication& a )
{ {
QString jobSettings( parser.value( jobOption ) ); QString jobSettings( parser.value( jobOption ) );
if ( jobSettings.isEmpty() && ( args.size() == 2 ) ) if ( jobSettings.isEmpty() && ( args.size() == 2 ) )
jobSettings = args.at(1); {
jobSettings = args.at( 1 );
}
return ModuleConfig{ args.first(), jobSettings, parser.value( globalOption ), parser.value( langOption ) }; return ModuleConfig { args.first(), jobSettings, parser.value( globalOption ), parser.value( langOption ) };
} }
} }
@ -120,14 +145,18 @@ load_module( const ModuleConfig& moduleConfig )
bool ok = false; bool ok = false;
QVariantMap descriptor; QVariantMap descriptor;
for ( const QString& prefix : QStringList{ "./", "src/modules/", "modules/" } ) for ( const QString& prefix : QStringList { "./", "src/modules/", "modules/" } )
{ {
// Could be a complete path, eg. src/modules/dummycpp/module.desc // Could be a complete path, eg. src/modules/dummycpp/module.desc
fi = QFileInfo( prefix + moduleName ); fi = QFileInfo( prefix + moduleName );
if ( fi.exists() && fi.isFile() ) if ( fi.exists() && fi.isFile() )
{
descriptor = CalamaresUtils::loadYaml( fi, &ok ); descriptor = CalamaresUtils::loadYaml( fi, &ok );
}
if ( ok ) if ( ok )
{
break; break;
}
// Could be a path without module.desc // Could be a path without module.desc
fi = QFileInfo( prefix + moduleName ); fi = QFileInfo( prefix + moduleName );
@ -135,8 +164,13 @@ load_module( const ModuleConfig& moduleConfig )
{ {
fi = QFileInfo( prefix + moduleName + "/module.desc" ); fi = QFileInfo( prefix + moduleName + "/module.desc" );
if ( fi.exists() && fi.isFile() ) if ( fi.exists() && fi.isFile() )
{
descriptor = CalamaresUtils::loadYaml( fi, &ok ); descriptor = CalamaresUtils::loadYaml( fi, &ok );
if ( ok ) break; }
if ( ok )
{
break;
}
} }
} }
@ -154,15 +188,12 @@ load_module( const ModuleConfig& moduleConfig )
} }
QString moduleDirectory = fi.absolutePath(); QString moduleDirectory = fi.absolutePath();
QString configFile( QString configFile( moduleConfig.configFile().isEmpty() ? moduleDirectory + '/' + name + ".conf"
moduleConfig.configFile().isEmpty()
? moduleDirectory + '/' + name + ".conf"
: moduleConfig.configFile() ); : moduleConfig.configFile() );
cDebug() << "Module" << moduleName << "job-configuration:" << configFile; cDebug() << "Module" << moduleName << "job-configuration:" << configFile;
Calamares::Module* module = Calamares::Module::fromDescriptor( Calamares::Module* module = Calamares::Module::fromDescriptor( descriptor, name, configFile, moduleDirectory );
descriptor, name, configFile, moduleDirectory );
return module; return module;
} }
@ -174,14 +205,18 @@ main( int argc, char* argv[] )
ModuleConfig module = handle_args( a ); ModuleConfig module = handle_args( a );
if ( module.moduleName().isEmpty() ) if ( module.moduleName().isEmpty() )
{
return 1; return 1;
}
std::unique_ptr< Calamares::Settings > settings_p( new Calamares::Settings( QString(), true ) ); std::unique_ptr< Calamares::Settings > settings_p( new Calamares::Settings( QString(), true ) );
std::unique_ptr< Calamares::JobQueue > jobqueue_p( new Calamares::JobQueue( nullptr ) ); std::unique_ptr< Calamares::JobQueue > jobqueue_p( new Calamares::JobQueue( nullptr ) );
auto gs = jobqueue_p->globalStorage(); auto gs = jobqueue_p->globalStorage();
if ( !module.globalConfigFile().isEmpty() ) if ( !module.globalConfigFile().isEmpty() )
{
gs->loadYaml( module.globalConfigFile() ); gs->loadYaml( module.globalConfigFile() );
}
if ( !module.language().isEmpty() ) if ( !module.language().isEmpty() )
{ {
QVariantMap vm; QVariantMap vm;
@ -199,7 +234,9 @@ main( int argc, char* argv[] )
} }
if ( !m->isLoaded() ) if ( !m->isLoaded() )
{
m->loadSelf(); m->loadSelf();
}
if ( !m->isLoaded() ) if ( !m->isLoaded() )
{ {
@ -207,11 +244,9 @@ main( int argc, char* argv[] )
return 1; return 1;
} }
using TR = Logger::DebugRow<const char*, const QString>; using TR = Logger::DebugRow< const char*, const QString >;
cDebug() << "Module metadata" cDebug() << "Module metadata" << TR( "name", m->name() ) << TR( "type", m->typeString() )
<< TR( "name", m->name() )
<< TR( "type", m->typeString() )
<< TR( "interface", m->interfaceString() ); << TR( "interface", m->interfaceString() );
cDebug() << "Job outputs:"; cDebug() << "Job outputs:";
@ -224,12 +259,12 @@ main( int argc, char* argv[] )
Calamares::JobResult r = p->exec(); Calamares::JobResult r = p->exec();
if ( !r ) if ( !r )
{ {
cError() << "Job #" << count << "failed" cError() << "Job #" << count << "failed" << TR( "summary", r.message() ) << TR( "details", r.details() );
<< TR( "summary", r.message() )
<< TR( "details", r.details() );
if ( r.errorCode() > 0 ) if ( r.errorCode() > 0 )
{
++failure_count; ++failure_count;
} }
}
++count; ++count;
} }