summaryrefslogtreecommitdiffhomepage
path: root/gui/process_detector.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2018-01-03 14:00:44 +0100
committerStanislaw Halik <sthalik@misaki.pl>2018-01-03 14:35:56 +0100
commitabf0bf769a8f1fb7bc3022aa69d519e261e1d595 (patch)
tree5487392e621f6446fab2c45c90de857069d57d2e /gui/process_detector.cpp
parentcbaafb9a828f13abb55b99f8f2c4caa2337ef9e9 (diff)
gui/process-detector: change separator characters
Prevent common characters from breaking the saved list. Use unprintable characters. Add migration.
Diffstat (limited to 'gui/process_detector.cpp')
-rw-r--r--gui/process_detector.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/gui/process_detector.cpp b/gui/process_detector.cpp
index b1ad541d..806f0b47 100644
--- a/gui/process_detector.cpp
+++ b/gui/process_detector.cpp
@@ -17,6 +17,9 @@
#include <QPushButton>
#include <QSettings>
+static constexpr inline auto RECORD_SEPARATOR = QChar(char(0x1e)); // RS ^]
+static constexpr inline auto UNIT_SEPARATOR = QChar(char(0x1f)); // US ^_
+
void settings::set_game_list(const QString &game_list)
{
group::with_global_settings_object([&](QSettings& settings) {
@@ -49,12 +52,18 @@ QHash<QString, QString> settings::split_process_names()
{
QHash<QString, QString> ret;
QString str = get_game_list();
- QStringList pairs = str.split('|');
+ QStringList pairs = str.split(RECORD_SEPARATOR, QString::SkipEmptyParts);
for (auto pair : pairs)
{
- QList<QString> tmp = pair.split(':');
+ QList<QString> tmp = pair.split(UNIT_SEPARATOR);
if (tmp.count() != 2)
continue;
+ if (tmp[0].contains(UNIT_SEPARATOR) || tmp[0].contains(RECORD_SEPARATOR))
+ continue;
+ if (tmp[1].contains(UNIT_SEPARATOR) || tmp[1].contains(RECORD_SEPARATOR))
+ continue;
+ if (tmp[0] == QLatin1String("") || tmp[1] == QLatin1String(""))
+ continue;
ret[tmp[0]] = tmp[1];
}
return ret;
@@ -136,7 +145,7 @@ void process_detector::save()
{
auto exe = ui.tableWidget->item(i, 0)->text();
auto profile = reinterpret_cast<QComboBox*>(ui.tableWidget->cellWidget(i, 1))->currentText();
- str += "|" + exe + ":" + profile;
+ str += RECORD_SEPARATOR + exe + UNIT_SEPARATOR + profile;
}
s.set_game_list(str);