From 1988a098b1dc37dd59b02c2ef038db30e4e29b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20F=C3=BCrmetz?= Date: Thu, 22 Jun 2017 13:24:19 +0200 Subject: [PATCH] Serialize PassAction into a KconfigGroup --- config.cpp | 15 +++++++++------ config.h | 24 ++++++++++++++++-------- pass.cpp | 7 ++++--- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/config.cpp b/config.cpp index 9b46592..e342161 100644 --- a/config.cpp +++ b/config.cpp @@ -150,10 +150,11 @@ void PassConfig::load() // Load saved actions this->ui->clearPassActions(); - auto configActions = passCfg.group(Config::Group::Actions); - for (int i = 0; i < configActions.keyList().count(); i++) { - QString passStr = configActions.readEntry(QString::number(i)); - auto passAction = PassAction::fromString(passStr); + auto actionGroup = passCfg.group(Config::Group::Actions); + auto groups = actionGroup.groupList(); + Q_FOREACH (auto name, groups) { + auto group = actionGroup.group(name); + auto passAction = PassAction::fromConfig(group); this->ui->addPassAction(passAction.name, passAction.icon, passAction.regex, false); } @@ -181,8 +182,10 @@ void PassConfig::save() if (showActions) { int i = 0; - for (PassAction act: this->ui->passActions()) - passCfg.group(Config::Group::Actions).writeEntry(QString::number(i++), act.toString()); + for (PassAction act: this->ui->passActions()) { + auto group = passCfg.group(Config::Group::Actions).group(QString::number(i++)); + act.writeToConfig(group); + } } emit changed(false); diff --git a/config.h b/config.h index 2c47078..f11e293 100644 --- a/config.h +++ b/config.h @@ -30,24 +30,32 @@ struct Config { struct Group { constexpr static const char *Actions = "AdditionalActions"; }; + struct Entry { + constexpr static const char *Name = "Name"; + constexpr static const char *Icon = "Icon"; + constexpr static const char *Regex = "Regex"; + }; }; struct PassAction { QString name, icon, regex; - // Using QDataStream doesn't work with KConfig (at least I was not able to get it work) - // So I'm just implementing my own serialization function for this struct - QString toString() + void writeToConfig(KConfigGroup &group) { - return QString("PassAction {\"%1\", \"%2\", \"%3\"}").arg(name).arg(icon).arg(regex); + group.writeEntry(Config::Entry::Name, name); + group.writeEntry(Config::Entry::Icon, icon); + group.writeEntry(Config::Entry::Regex, regex); } - static PassAction fromString(const QString &str) + static PassAction fromConfig(const KConfigGroup &group) { - QRegularExpression re("PassAction {\"(.+?)\", \"(.+?)\", \"(.+?)\"}"); - auto match = re.match(str); - return PassAction {match.captured(1), match.captured(2), match.captured(3)}; + PassAction action; + action.name = group.readEntry(Config::Entry::Name); + action.icon = group.readEntry(Config::Entry::Icon); + action.regex = group.readEntry(Config::Entry::Regex); + + return action; } }; Q_DECLARE_METATYPE(PassAction) diff --git a/pass.cpp b/pass.cpp index c020425..f1267f6 100644 --- a/pass.cpp +++ b/pass.cpp @@ -63,9 +63,10 @@ void Pass::reloadConfiguration() auto configActions = cfg.group(Config::Group::Actions); // Create actions for every additional field - for (int i = 0; i < configActions.keyList().count(); i++) { - QString passStr = configActions.readEntry(QString::number(i)); - PassAction passAction = PassAction::fromString(passStr); + auto groups = configActions.groupList(); + Q_FOREACH (auto name, groups) { + auto group = configActions.group(name); + auto passAction = PassAction::fromConfig(group); auto icon = QIcon::fromTheme(passAction.icon, QIcon::fromTheme("object-unlocked")); QAction *act = addAction(passAction.name, icon , passAction.name);