config: parser strips "%F" etc., ignore other sections

Parser will ignore "%F", "%f" etc. fields now.
Furthermore it will ignore all subsections except for [Desktop Entry]

Also throws exception when .qsRun file is misformated

Removed some qDebug() calls
This commit is contained in:
Albert S. 2018-01-17 22:36:57 +01:00
parent f60e2a068f
commit 687f88f226
2 changed files with 20 additions and 8 deletions

View File

@ -21,6 +21,7 @@
ConfigReader::ConfigReader(QString directory) ConfigReader::ConfigReader(QString directory)
{ {
this->configDirectory = directory; this->configDirectory = directory;
desktopIgnoreArgs << "%F" << "%f" << "%U" << "%u";
} }
@ -35,7 +36,10 @@ EntryConfig ConfigReader::readFromDesktopFile(const QString &path)
} }
QTextStream stream(&file); QTextStream stream(&file);
QString firstline = stream.readLine(); QString firstline = stream.readLine();
while(firstline[0] == '#')
//There should be nothing preceding this group in the desktop entry file but possibly one or more comments.
//https://standards.freedesktop.org/desktop-entry-spec/latest/ar01s03.html#group-header
while(firstline[0] == '#' && !stream.atEnd())
{ {
firstline = stream.readLine(); firstline = stream.readLine();
} }
@ -47,10 +51,14 @@ EntryConfig ConfigReader::readFromDesktopFile(const QString &path)
while(!stream.atEnd()) while(!stream.atEnd())
{ {
QString line = stream.readLine(); QString line = stream.readLine();
//new group, so we are finished with [Desktop Entry]
if(line.startsWith("[") && line.endsWith("]"))
{
return result;
}
QStringList splitted = line.split("="); QStringList splitted = line.split("=");
if(splitted.length() >= 2) if(splitted.length() >= 2)
{ {
qDebug() << splitted [0] + " " + splitted[1];
QString key = splitted[0].toLower(); QString key = splitted[0].toLower();
if(key == "name") if(key == "name")
{ {
@ -65,14 +73,19 @@ EntryConfig ConfigReader::readFromDesktopFile(const QString &path)
} }
if(key == "exec") if(key == "exec")
{ {
//TODO: the other arguments may also be relevant... except for %f and so
QStringList arguments = splitted[1].split(" "); QStringList arguments = splitted[1].split(" ");
result.command = arguments[0]; result.command = arguments[0];
arguments = arguments.mid(1);
if(arguments.length() > 1) if(arguments.length() > 1)
{ {
arguments = arguments.mid(1); for(QString &arg : arguments)
{
if(!desktopIgnoreArgs.contains(arg))
{
result.arguments.append(arg);
}
}
} }
} }
@ -100,10 +113,8 @@ EntryConfig ConfigReader::readFromFile(const QString &path)
QStringList splitted = line.split(" "); QStringList splitted = line.split(" ");
if(splitted.length() < 2) if(splitted.length() < 2)
{ {
// throw new ConfigFormatException("Format must be [key] [value] for every line"); throw new ConfigFormatException("misformated line in .qsrun config file");
} }
qDebug() << splitted [0] + " " + splitted[1];
QString key = splitted[0]; QString key = splitted[0];
if(key == "arguments") if(key == "arguments")
{ {

View File

@ -43,6 +43,7 @@ class ConfigReader
QString configDirectory; QString configDirectory;
EntryConfig readFromFile(const QString &path); EntryConfig readFromFile(const QString &path);
EntryConfig readFromDesktopFile(const QString &path); EntryConfig readFromDesktopFile(const QString &path);
QStringList desktopIgnoreArgs;
public: public:
ConfigReader(QString path); ConfigReader(QString path);
QVector<EntryConfig> readConfig(); QVector<EntryConfig> readConfig();