• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IJHack / QtPass / 27479632126

13 Jun 2026 09:28PM UTC coverage: 56.384%. First build
27479632126

Pull #1528

github

web-flow
Merge 34529d5dd into 170de6b6b
Pull Request #1528: refactor: introduce AppSettings struct + SettingsSerializer (#1511)

132 of 133 new or added lines in 1 file covered. (99.25%)

3864 of 6853 relevant lines covered (56.38%)

36.36 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

99.25
/src/settingsserializer.cpp
1
// SPDX-FileCopyrightText: 2016 Anne Jan Brouwer
2
// SPDX-License-Identifier: GPL-3.0-or-later
3

4
/**
5
 * @class SettingsSerializer
6
 * @brief AppSettings <-> QSettings mapping implementation.
7
 *
8
 * @see settingsserializer.h
9
 */
10

11
#include "settingsserializer.h"
12
#include "settingsconstants.h"
13

14
#include <QSettings>
15

16
auto SettingsSerializer::load(QSettings &qs) -> AppSettings {
2✔
17
  AppSettings s;
2✔
18

19
  // Window / session
20
  s.version = qs.value(SettingsConstants::version).toString();
4✔
21
  s.geometry = qs.value(SettingsConstants::geometry).toByteArray();
4✔
22
  s.savestate = qs.value(SettingsConstants::savestate).toByteArray();
4✔
23
  s.pos = qs.value(SettingsConstants::pos).toPoint();
2✔
24
  s.size = qs.value(SettingsConstants::size).toSize();
2✔
25
  s.maximized = qs.value(SettingsConstants::maximized, false).toBool();
2✔
26
  s.activeProfile = qs.value(SettingsConstants::profile).toString();
4✔
27

28
  // Backend selection / store
29
  s.usePass = qs.value(SettingsConstants::usePass, false).toBool();
2✔
30
  s.passStore = qs.value(SettingsConstants::passStore).toString();
4✔
31
  s.passSigningKey = qs.value(SettingsConstants::passSigningKey).toString();
4✔
32

33
  // Executables
34
  s.passExecutable = qs.value(SettingsConstants::passExecutable).toString();
4✔
35
  s.gitExecutable = qs.value(SettingsConstants::gitExecutable).toString();
4✔
36
  s.gpgExecutable = qs.value(SettingsConstants::gpgExecutable).toString();
4✔
37
  s.pwgenExecutable = qs.value(SettingsConstants::pwgenExecutable).toString();
4✔
38
  s.qrencodeExecutable =
39
      qs.value(SettingsConstants::qrencodeExecutable).toString();
4✔
40
  s.gpgHome = qs.value(SettingsConstants::gpgHome).toString();
4✔
41
  s.sshAuthSockOverride =
42
      qs.value(SettingsConstants::sshAuthSockOverride).toString();
4✔
43

44
  // Clipboard / autoclear
45
  s.clipBoardType = static_cast<Enums::clipBoardType>(
2✔
46
      qs.value(SettingsConstants::clipBoardType,
4✔
47
               static_cast<int>(Enums::CLIPBOARD_NEVER))
48
          .toInt());
2✔
49
  s.useSelection = qs.value(SettingsConstants::useSelection, false).toBool();
2✔
50
  s.useAutoclear = qs.value(SettingsConstants::useAutoclear, false).toBool();
2✔
51
  s.autoclearSeconds = qs.value(SettingsConstants::autoclearSeconds, 0).toInt();
2✔
52
  s.useAutoclearPanel =
2✔
53
      qs.value(SettingsConstants::useAutoclearPanel, false).toBool();
2✔
54
  s.autoclearPanelSeconds =
2✔
55
      qs.value(SettingsConstants::autoclearPanelSeconds, 0).toInt();
2✔
56

57
  // Content display
58
  s.hidePassword = qs.value(SettingsConstants::hidePassword, false).toBool();
2✔
59
  s.hideContent = qs.value(SettingsConstants::hideContent, false).toBool();
2✔
60
  s.useMonospace = qs.value(SettingsConstants::useMonospace, false).toBool();
2✔
61
  s.displayAsIs = qs.value(SettingsConstants::displayAsIs, false).toBool();
2✔
62
  s.noLineWrapping =
2✔
63
      qs.value(SettingsConstants::noLineWrapping, false).toBool();
2✔
64

65
  // Features
66
  s.addGPGId = qs.value(SettingsConstants::addGPGId, false).toBool();
2✔
67
  s.useGit = qs.value(SettingsConstants::useGit, false).toBool();
2✔
68
  s.useGrepSearch = qs.value(SettingsConstants::useGrepSearch, false).toBool();
2✔
69
  s.useOtp = qs.value(SettingsConstants::useOtp, false).toBool();
2✔
70
  s.useQrencode = qs.value(SettingsConstants::useQrencode, false).toBool();
2✔
71
  s.usePwgen = qs.value(SettingsConstants::usePwgen, false).toBool();
2✔
72
  s.useWebDav = qs.value(SettingsConstants::useWebDav, false).toBool();
2✔
73
  s.webDavUrl = qs.value(SettingsConstants::webDavUrl).toString();
4✔
74
  s.webDavUser = qs.value(SettingsConstants::webDavUser).toString();
4✔
75
  s.webDavPassword = qs.value(SettingsConstants::webDavPassword).toString();
4✔
76
  s.autoPull = qs.value(SettingsConstants::autoPull, false).toBool();
2✔
77
  s.autoPush = qs.value(SettingsConstants::autoPush, false).toBool();
2✔
78
  s.showProcessOutput =
2✔
79
      qs.value(SettingsConstants::showProcessOutput, false).toBool();
2✔
80

81
  // Templates
82
  s.passTemplate = qs.value(SettingsConstants::passTemplate).toString();
4✔
83
  s.useTemplate = qs.value(SettingsConstants::useTemplate, false).toBool();
2✔
84
  s.templateAllFields =
2✔
85
      qs.value(SettingsConstants::templateAllFields, false).toBool();
2✔
86

87
  // Password generation
88
  int length = qs.value(SettingsConstants::passwordLength, 16).toInt();
2✔
89
  if (length <= 0) {
2✔
90
    length = 16;
91
  }
92
  s.passwordConfiguration.length = length;
2✔
93
  s.passwordConfiguration.selected =
2✔
94
      static_cast<PasswordConfiguration::characterSet>(
2✔
95
          qs.value(SettingsConstants::passwordCharsSelection, 0).toInt());
2✔
96
  s.passwordConfiguration.Characters[PasswordConfiguration::CUSTOM] =
97
      qs.value(SettingsConstants::passwordChars, QString()).toString();
4✔
98
  s.avoidCapitals = qs.value(SettingsConstants::avoidCapitals, false).toBool();
2✔
99
  s.avoidNumbers = qs.value(SettingsConstants::avoidNumbers, false).toBool();
2✔
100
  s.lessRandom = qs.value(SettingsConstants::lessRandom, false).toBool();
2✔
101
  s.useSymbols = qs.value(SettingsConstants::useSymbols, false).toBool();
2✔
102

103
  // System / tray
104
  s.useTrayIcon = qs.value(SettingsConstants::useTrayIcon, false).toBool();
2✔
105
  s.hideOnClose = qs.value(SettingsConstants::hideOnClose, false).toBool();
2✔
106
  s.startMinimized =
2✔
107
      qs.value(SettingsConstants::startMinimized, false).toBool();
2✔
108
  s.alwaysOnTop = qs.value(SettingsConstants::alwaysOnTop, false).toBool();
2✔
109

110
  return s;
2✔
NEW
111
}
×
112

113
void SettingsSerializer::save(QSettings &qs, const AppSettings &s) {
2✔
114
  // Window / session
115
  qs.setValue(SettingsConstants::version, s.version);
2✔
116
  qs.setValue(SettingsConstants::geometry, s.geometry);
2✔
117
  qs.setValue(SettingsConstants::savestate, s.savestate);
2✔
118
  qs.setValue(SettingsConstants::pos, s.pos);
2✔
119
  qs.setValue(SettingsConstants::size, s.size);
2✔
120
  qs.setValue(SettingsConstants::maximized, s.maximized);
2✔
121
  qs.setValue(SettingsConstants::profile, s.activeProfile);
2✔
122

123
  // Backend selection / store
124
  qs.setValue(SettingsConstants::usePass, s.usePass);
2✔
125
  qs.setValue(SettingsConstants::passStore, s.passStore);
2✔
126
  qs.setValue(SettingsConstants::passSigningKey, s.passSigningKey);
2✔
127

128
  // Executables
129
  qs.setValue(SettingsConstants::passExecutable, s.passExecutable);
2✔
130
  qs.setValue(SettingsConstants::gitExecutable, s.gitExecutable);
2✔
131
  qs.setValue(SettingsConstants::gpgExecutable, s.gpgExecutable);
4✔
132
  qs.setValue(SettingsConstants::pwgenExecutable, s.pwgenExecutable);
2✔
133
  qs.setValue(SettingsConstants::qrencodeExecutable, s.qrencodeExecutable);
2✔
134
  qs.setValue(SettingsConstants::gpgHome, s.gpgHome);
2✔
135
  qs.setValue(SettingsConstants::sshAuthSockOverride, s.sshAuthSockOverride);
2✔
136

137
  // Clipboard / autoclear
138
  qs.setValue(SettingsConstants::clipBoardType,
2✔
139
              static_cast<int>(s.clipBoardType));
2✔
140
  qs.setValue(SettingsConstants::useSelection, s.useSelection);
2✔
141
  qs.setValue(SettingsConstants::useAutoclear, s.useAutoclear);
2✔
142
  qs.setValue(SettingsConstants::autoclearSeconds, s.autoclearSeconds);
2✔
143
  qs.setValue(SettingsConstants::useAutoclearPanel, s.useAutoclearPanel);
2✔
144
  qs.setValue(SettingsConstants::autoclearPanelSeconds,
2✔
145
              s.autoclearPanelSeconds);
2✔
146

147
  // Content display
148
  qs.setValue(SettingsConstants::hidePassword, s.hidePassword);
2✔
149
  qs.setValue(SettingsConstants::hideContent, s.hideContent);
2✔
150
  qs.setValue(SettingsConstants::useMonospace, s.useMonospace);
2✔
151
  qs.setValue(SettingsConstants::displayAsIs, s.displayAsIs);
2✔
152
  qs.setValue(SettingsConstants::noLineWrapping, s.noLineWrapping);
2✔
153

154
  // Features
155
  qs.setValue(SettingsConstants::addGPGId, s.addGPGId);
2✔
156
  qs.setValue(SettingsConstants::useGit, s.useGit);
2✔
157
  qs.setValue(SettingsConstants::useGrepSearch, s.useGrepSearch);
2✔
158
  qs.setValue(SettingsConstants::useOtp, s.useOtp);
2✔
159
  qs.setValue(SettingsConstants::useQrencode, s.useQrencode);
2✔
160
  qs.setValue(SettingsConstants::usePwgen, s.usePwgen);
2✔
161
  qs.setValue(SettingsConstants::useWebDav, s.useWebDav);
2✔
162
  qs.setValue(SettingsConstants::webDavUrl, s.webDavUrl);
2✔
163
  qs.setValue(SettingsConstants::webDavUser, s.webDavUser);
2✔
164
  qs.setValue(SettingsConstants::webDavPassword, s.webDavPassword);
2✔
165
  qs.setValue(SettingsConstants::autoPull, s.autoPull);
2✔
166
  qs.setValue(SettingsConstants::autoPush, s.autoPush);
2✔
167
  qs.setValue(SettingsConstants::showProcessOutput, s.showProcessOutput);
2✔
168

169
  // Templates
170
  qs.setValue(SettingsConstants::passTemplate, s.passTemplate);
2✔
171
  qs.setValue(SettingsConstants::useTemplate, s.useTemplate);
2✔
172
  qs.setValue(SettingsConstants::templateAllFields, s.templateAllFields);
2✔
173

174
  // Password generation
175
  qs.setValue(SettingsConstants::passwordLength,
2✔
176
              s.passwordConfiguration.length);
2✔
177
  qs.setValue(SettingsConstants::passwordCharsSelection,
2✔
178
              static_cast<int>(s.passwordConfiguration.selected));
2✔
179
  qs.setValue(
2✔
180
      SettingsConstants::passwordChars,
181
      s.passwordConfiguration.Characters[PasswordConfiguration::CUSTOM]);
2✔
182
  qs.setValue(SettingsConstants::avoidCapitals, s.avoidCapitals);
2✔
183
  qs.setValue(SettingsConstants::avoidNumbers, s.avoidNumbers);
2✔
184
  qs.setValue(SettingsConstants::lessRandom, s.lessRandom);
2✔
185
  qs.setValue(SettingsConstants::useSymbols, s.useSymbols);
2✔
186

187
  // System / tray
188
  qs.setValue(SettingsConstants::useTrayIcon, s.useTrayIcon);
2✔
189
  qs.setValue(SettingsConstants::hideOnClose, s.hideOnClose);
2✔
190
  qs.setValue(SettingsConstants::startMinimized, s.startMinimized);
2✔
191
  qs.setValue(SettingsConstants::alwaysOnTop, s.alwaysOnTop);
2✔
192
}
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc