Skip to content

Commit

Permalink
Move variablesection specific code to SsuVariable class
Browse files Browse the repository at this point in the history
  • Loading branch information
Bernd Wachter committed Jul 5, 2013
1 parent be4c599 commit 69ac444
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 39 deletions.
39 changes: 3 additions & 36 deletions libssu/ssudeviceinfo.cpp
Expand Up @@ -18,6 +18,7 @@ extern "C" {
#include "ssudeviceinfo.h"
#include "ssucoreconfig.h"
#include "ssulog.h"
#include "ssuvariables.h"

#include "../constants.h"

Expand Down Expand Up @@ -365,45 +366,11 @@ QStringList SsuDeviceInfo::repos(bool rnd, int filter){
}

QVariant SsuDeviceInfo::variable(QString section, const QString &key){
if (!section.startsWith("var-"))
section = "var-" + section;

if (boardMappings->contains(section + "/" + key)){
return boardMappings->value(section + "/" + key);
}

if (boardMappings->contains(section + "/variables")){
QStringList sections = boardMappings->value(section + "/variables").toStringList();
foreach(const QString &section, sections){
QVariant value = variable(section, key);
if (value.type() != QMetaType::UnknownType)
return value;
}
}

return QVariant();
return SsuVariables::variable(boardMappings, section, key);
}

void SsuDeviceInfo::variableSection(QString section, QHash<QString, QString> *storageHash){
if (!section.startsWith("var-"))
section = "var-" + section;

if (boardMappings->contains(section + "/variables")){
QStringList sections = boardMappings->value(section + "/variables").toStringList();
foreach(const QString &section, sections)
variableSection(section, storageHash);
return;
}

boardMappings->beginGroup(section);
if (boardMappings->group() != section)
return;

QStringList keys = boardMappings->allKeys();
foreach (const QString &key, keys){
storageHash->insert(key, boardMappings->value(key).toString());
}
boardMappings->endGroup();
SsuVariables::variableSection(boardMappings, section, storageHash);
}

void SsuDeviceInfo::setDeviceModel(QString model){
Expand Down
66 changes: 66 additions & 0 deletions libssu/ssuvariables.cpp
Expand Up @@ -17,6 +17,10 @@ SsuVariables::SsuVariables(): QObject() {

}

void SsuVariables::resolveSection(QString section, QHash<QString, QString> *storageHash){
resolveSection(m_settings, section, storageHash);
}

void SsuVariables::resolveSection(SsuSettings *settings, QString section, QHash<QString, QString> *storageHash){
QStringList repoVariables;

Expand Down Expand Up @@ -121,3 +125,65 @@ QString SsuVariables::resolveVariable(QString variable, QHash<QString, QString>
// no proper substitution found -> return default value
return variableValue;
}

void SsuVariables::setSettings(SsuSettings *settings){
m_settings = settings;
}

SsuSettings *SsuVariables::settings(){
return m_settings;
}

QVariant SsuVariables::variable(QString section, const QString &key){
if (m_settings != NULL)
return variable(m_settings, section, key);
else
return QVariant();
}

QVariant SsuVariables::variable(SsuSettings *settings, QString section, const QString &key){
if (!section.startsWith("var-"))
section = "var-" + section;

if (settings->contains(section + "/" + key)){
return settings->value(section + "/" + key);
}

if (settings->contains(section + "/variables")){
QStringList sections = settings->value(section + "/variables").toStringList();
foreach(const QString &section, sections){
QVariant value = variable(settings, section, key);
if (value.type() != QMetaType::UnknownType)
return value;
}
}

return QVariant();
}

void SsuVariables::variableSection(QString section, QHash<QString, QString> *storageHash){
if (m_settings != NULL)
variableSection(m_settings, section, storageHash);
}

void SsuVariables::variableSection(SsuSettings *settings, QString section, QHash<QString, QString> *storageHash){
if (!section.startsWith("var-"))
section = "var-" + section;

if (settings->contains(section + "/variables")){
QStringList sections = settings->value(section + "/variables").toStringList();
foreach(const QString &section, sections)
variableSection(settings, section, storageHash);
return;
}

settings->beginGroup(section);
if (settings->group() != section)
return;

QStringList keys = settings->allKeys();
foreach (const QString &key, keys){
storageHash->insert(key, settings->value(key).toString());
}
settings->endGroup();
}
32 changes: 29 additions & 3 deletions libssu/ssuvariables.h
Expand Up @@ -23,15 +23,41 @@ class SsuVariables: public QObject {
* run them through the variable expander, and add them to the supplied
* QHash
*/
void resolveSection(SsuSettings *settings, QString section, QHash<QString, QString> *storageHash);
void resolveSection(QString section, QHash<QString, QString> *storageHash);
static void resolveSection(SsuSettings *settings, QString section, QHash<QString, QString> *storageHash);
/**
* Resolve a whole string, containing several variables. Variables inside variables are allowed
*/
QString resolveString(QString pattern, QHash<QString, QString> *variables, int recursionDepth=0);
static QString resolveString(QString pattern, QHash<QString, QString> *variables, int recursionDepth=0);
/**
* Resolve variables; variable can be passed as %(var) or var
*/
QString resolveVariable(QString variable, QHash<QString, QString> *variables);
static QString resolveVariable(QString variable, QHash<QString, QString> *variables);
/**
* Set the settings object to use
*/
void setSettings(SsuSettings *settings);
/*
* Return the settings object used
*/
SsuSettings *settings();
/**
* Return a variable from the given variable section. 'var'- is automatically
* prepended to the section name if not specified already. Recursive search
* through several variable sections (specified in the section) is supported,
* returned will be the first occurence of the variable.
*/
QVariant variable(QString section, const QString &key);
static QVariant variable(SsuSettings *settings, QString section, const QString &key);
/**
* Return the requested variable section. 'var-' is automatically
* prepended to the section name if not specified already.
*/
void variableSection(QString section, QHash<QString, QString> *storageHash);
static void variableSection(SsuSettings *settings, QString section, QHash<QString, QString> *storageHash);

private:
SsuSettings *m_settings;
};

#endif

0 comments on commit 69ac444

Please sign in to comment.