tsettings.cpp - sailfish-safe - Sailfish frontend for safe(1)
(HTM) git clone git://git.z3bra.org/sailfish-safe.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
tsettings.cpp (2638B)
---
1 /*
2 * Copyright (C) 2019 Daniel Vrátil <dvratil@kde.org>
3 * 2021 Willy Goiffon <contact@z3bra.org>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
19 #include "settings.h"
20
21 #include <QStandardPaths>
22 #include <QDir>
23
24 std::unique_ptr<Settings> Settings::kInstance = {};
25
26 static const QString OldSettingsDir = QStringLiteral("Willy Goiffon");
27 static const QString SettingsDir = QStringLiteral("harbour-safe");
28 static const QString SettingsName = QStringLiteral("safe");
29
30 Settings::Settings()
31 : QObject()
32 {
33 // Migrate config directory to new location
34 const auto oldPath = QStandardPaths::locate(QStandardPaths::ConfigLocation,
35 OldSettingsDir,
36 QStandardPaths::LocateDirectory);
37 const QDir newDir(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)
38 + QLatin1Char('/') + SettingsDir);
39 if (!oldPath.isEmpty() && !newDir.exists()) {
40 qDebug("Migrating Safe configuration from %s to %s",
41 qUtf8Printable(oldPath),
42 qUtf8Printable(newDir.absolutePath()));
43 QDir().rename(oldPath, newDir.absolutePath());
44 }
45
46 mSettings.reset(new QSettings(SettingsDir, SettingsName));
47 }
48
49 Settings *Settings::self()
50 {
51 if (!kInstance) {
52 kInstance.reset(new Settings);
53 }
54 return kInstance.get();
55 }
56
57 void Settings::destroy()
58 {
59 kInstance.reset();
60 }
61
62 void Settings::save()
63 {
64 mSettings->sync();
65 }
66
67 #define IMPLEMENT_OPTION(type, lc, uc, name, defValue) \
68 void Settings::set##uc(type val) { \
69 if (lc() != val) { \
70 mSettings->setValue(QStringLiteral(name), val); \
71 Q_EMIT lc##Changed(); \
72 } \
73 } \
74 type Settings::lc() const { \
75 return mSettings->value(QStringLiteral(name), defValue).value<type>(); \
76 }
77
78 IMPLEMENT_OPTION(int, expirationTimeout, ExpirationTimeout, "expirationTimeout", 45)
79
80
81 #undef IMPLEMENT_OPTION