calamares/src/libcalamaresui/Settings.cpp

141 lines
3.9 KiB
C++
Raw Normal View History

/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "Settings.h"
2014-06-12 18:47:50 +02:00
#include "utils/CalamaresUtils.h"
#include "utils/Logger.h"
#include "utils/YamlUtils.h"
2014-06-12 18:47:50 +02:00
#include <QDir>
#include <QFile>
#include <yaml-cpp/yaml.h>
2014-06-12 18:47:50 +02:00
namespace Calamares
{
Settings* Settings::s_instance = nullptr;
2014-06-12 18:47:50 +02:00
Settings*
Settings::instance()
{
return s_instance;
}
2014-08-06 17:23:40 +02:00
Settings::Settings( const QString& settingsFilePath,
bool debugMode,
QObject* parent )
: QObject( parent )
, m_debug( debugMode )
{
2014-08-06 17:23:40 +02:00
cDebug() << "Using Calamares settings file at" << settingsFilePath;
QFile file( settingsFilePath );
if ( file.exists() && file.open( QFile::ReadOnly | QFile::Text ) )
2014-06-12 18:47:50 +02:00
{
QByteArray ba = file.readAll();
try
2014-06-12 18:47:50 +02:00
{
YAML::Node config = YAML::Load( ba.constData() );
Q_ASSERT( config.IsMap() );
2014-06-12 18:47:50 +02:00
QStringList rawPaths;
config[ "modules-search" ] >> rawPaths;
for ( int i = 0; i < rawPaths.length(); ++i )
2014-06-12 18:47:50 +02:00
{
if ( rawPaths[ i ] == "local" )
{
// If we're running in debug mode, we assume we might also be
// running from the build dir, so we add a maximum priority
// module search path in the build dir.
if ( debugMode )
{
QString buildDirModules = QDir::current().absolutePath() +
QDir::separator() + "src" +
QDir::separator() + "modules";
if ( QDir( buildDirModules ).exists() )
m_modulesSearchPaths.append( buildDirModules );
}
// Install path is set in CalamaresAddPlugin.cmake
m_modulesSearchPaths.append( CalamaresUtils::systemLibDir().absolutePath() +
QDir::separator() + "calamares" +
QDir::separator() + "modules" );
}
2014-06-12 18:47:50 +02:00
else
{
QDir path( rawPaths[ i ] );
2014-06-12 18:47:50 +02:00
if ( path.exists() && path.isReadable() )
m_modulesSearchPaths.append( path.absolutePath() );
}
}
config[ "prepare" ] >> m_modulesPrepareList;
config[ "install" ] >> m_modulesInstallList;
config[ "postinstall" ] >> m_modulesPostInstallList;
2014-06-12 18:47:50 +02:00
}
catch ( YAML::Exception& e )
2014-06-12 18:47:50 +02:00
{
cDebug() << "WARNING: YAML parser error " << e.what();
2014-06-12 18:47:50 +02:00
}
}
else
{
cDebug() << "WARNING: Cannot read " << file.fileName();
}
s_instance = this;
}
QStringList
Settings::modulesSearchPaths() const
2014-06-12 18:47:50 +02:00
{
return m_modulesSearchPaths;
}
QStringList
Settings::modules( Phase phase ) const
2014-06-12 18:47:50 +02:00
{
switch ( phase )
{
case Prepare:
return m_modulesPrepareList;
case Install:
return m_modulesInstallList;
case PostInstall:
return m_modulesPostInstallList;
default:
return QStringList();
}
2014-06-12 18:47:50 +02:00
}
bool
Settings::debugMode() const
{
return m_debug;
}
}