Skip to content

Commit 37fb2f5

Browse files
committed
Migrate to stricter Qt interface
1 parent 1a1c84d commit 37fb2f5

19 files changed

+165
-161
lines changed

CMakeLists.txt

+7-3
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,22 @@ if (NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug")
4242
endif()
4343
add_definitions(-DSAILFISHOS)
4444

45-
# KDE Connect
46-
add_subdirectory(kdeconnect-kde)
47-
4845
# Sailfish Connect
4946
find_package(ECM 5.99 REQUIRED NO_MODULE)
5047
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
5148
include(ECMQtDeclareLoggingCategory)
5249

50+
# KDE Connect
51+
add_subdirectory(kdeconnect-kde)
52+
5353
find_package(Qt5 REQUIRED COMPONENTS Core DBus Network Gui Sql Quick Feedback)
5454
find_package(KF5 REQUIRED COMPONENTS I18n CoreAddons Config)
5555
include(KDECompilerSettings NO_POLICY_SCOPE)
5656
include(KDECMakeSettings)
57+
remove_definitions(
58+
-DQT_NO_KEYWORDS
59+
-DQT_NO_FOREACH
60+
)
5761

5862
# Options
5963
set(PACKAGE_NAME harbour-sailfishconnect)

app/src/appdaemon.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ void AppDaemon::sendSimpleNotification(const QString &eventId, const QString &ti
104104
notification->setPreviewSummary(title);
105105
notification->setPreviewBody(text);
106106
if (eventId == QStringLiteral("pingReceived")) {
107-
notification->setIcon("image://theme/icon-lock-information");
107+
notification->setIcon(QStringLiteral("image://theme/icon-lock-information"));
108108
}
109109
notification->publish();
110110
}

app/src/dbus/kdeconnect.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@ void DeviceApi::pluginCall(const QString& plugin, const QString& method)
6464
{
6565
QDBusMessage msg = QDBusMessage::createMethodCall(
6666
QStringLiteral("org.kde.kdeconnect"),
67-
QStringLiteral("/modules/kdeconnect/devices/") % id() % QChar('/') % plugin,
67+
QStringLiteral("/modules/kdeconnect/devices/") % id() % QChar::fromLatin1('/') % plugin,
6868
QStringLiteral("org.kde.kdeconnect.device.") + plugin,
6969
method);
7070
checkForDbusError(QDBusConnection::sessionBus().asyncCall(msg));
7171
}
7272

73-
} // namespace SailfishConnect
73+
} // namespace SailfishConnect

app/src/helper/jobsnotificator.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ void JobsNotificator::jobChanged(JobInfo *job)
6464
Q_ASSERT(notification != nullptr);
6565

6666
if (job->state() == QStringLiteral("running")) {
67-
notification->setHintValue("x-nemo-progress", job->progress());
67+
notification->setHintValue(QStringLiteral("x-nemo-progress"), job->progress());
6868

6969
if (job->totalFiles() > 1) {
7070
notification->setBody(job->title());
@@ -141,7 +141,7 @@ void JobsNotificator::addJob(JobInfo *job)
141141
notification->setPreviewBody(body);
142142
notification->setSummary(i18n("Downloading ..."));
143143
}
144-
notification->setHintValue("x-nemo-progress", job->progress());
144+
notification->setHintValue(QStringLiteral("x-nemo-progress"), job->progress());
145145
if (device) {
146146
notification->setRemoteActions(
147147
{ UI::openDevicePageDbusAction(device->id()) });

app/src/helper/keyboardlayoutprovider.cpp

+44-45
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@ KeyboardLayoutProvider::KeyboardLayoutProvider(QObject *parent)
4343
m_settings.endGroup();
4444

4545
QJsonArray row1;
46-
for (const QString& key : {"esc", "F1", "F2", "F3", "F4", "F5", "F6"}) {
46+
for (const QString& key : {QStringLiteral("esc"), QStringLiteral("F1"), QStringLiteral("F2"), QStringLiteral("F3"), QStringLiteral("F4"), QStringLiteral("F5"), QStringLiteral("F6")}) {
4747
QJsonObject keyObject;
4848
keyObject.insert(QStringLiteral("caption"), key);
49-
if (key.startsWith('F')) {
49+
if (key.startsWith(QChar::fromLatin1('F'))) {
5050
int num = key.at(1).toLatin1() - '0';
51-
QString name = 'F' % QString::number(num + 6);
51+
QString name = QChar::fromLatin1('F') % QString::number(num + 6);
5252
keyObject.insert(QStringLiteral("captionShifted"), name);
5353
}
5454
row1.append(keyObject);
@@ -67,50 +67,50 @@ QString KeyboardLayoutProvider::layout() const
6767
void KeyboardLayoutProvider::setLayout(const QString &layout)
6868
{
6969
// seems to be the only way to get the files stored
70-
QFile layoutFile(MALIIT_LAYOUT_DIR % layout % ".qml");
70+
QFile layoutFile(MALIIT_LAYOUT_DIR % layout % QStringLiteral(".qml"));
7171
if (!layoutFile.open(QIODevice::ReadOnly)) {
7272
qCDebug(logger) << "Unknown layout: " << layout;
7373
return;
7474
}
7575

76-
QRegularExpression caption("caption: \"([\\S])\"");
77-
QRegularExpression captionShifted("captionShifted: \"([\\S])\"");
78-
QRegularExpression symView("symView: \"([\\S]+)\"");
79-
QRegularExpression symView2("symView2: \"([\\S]+)\"");
80-
QByteArray line = layoutFile.readLine();
76+
QRegularExpression caption(QStringLiteral("caption: \"([\\S])\""));
77+
QRegularExpression captionShifted(QStringLiteral("captionShifted: \"([\\S])\""));
78+
QRegularExpression symView(QStringLiteral("symView: \"([\\S]+)\""));
79+
QRegularExpression symView2(QStringLiteral("symView2: \"([\\S]+)\""));
80+
QString line = QString::fromUtf8(layoutFile.readLine());
8181
QJsonArray keys;
8282
QJsonArray row;
8383

8484
while (line.length() > 0) {
85-
if (line.contains(" }")) {
85+
if (line.contains(QStringLiteral(" }"))) {
8686
keys.append(row);
87-
} else if (line.contains("KeyboardRow {")) {
87+
} else if (line.contains(QStringLiteral("KeyboardRow {"))) {
8888
row = QJsonArray();
89-
} else if (line.contains("Key")) {
90-
QByteArray keySequence = line;
91-
while (!line.contains('}')) {
92-
line = layoutFile.readLine();
89+
} else if (line.contains(QStringLiteral("Key"))) {
90+
QString keySequence = line;
91+
while (!line.contains(QChar::fromLatin1('}'))) {
92+
line = QString::fromUtf8(layoutFile.readLine());
9393
keySequence.append(line);
9494
}
95-
while (keySequence.contains('\n')) {
96-
keySequence.replace('\n', ' ');
95+
while (keySequence.contains(QChar::fromLatin1('\n'))) {
96+
keySequence.replace(QChar::fromLatin1('\n'), QChar::fromLatin1(' '));
9797
}
9898

9999
// remove backslash
100-
keySequence.replace("\\\"", "\"");
101-
keySequence.replace("\\\\", "\\");
100+
keySequence.replace(QStringLiteral("\\\""), QStringLiteral("\""));
101+
keySequence.replace(QStringLiteral("\\\\"), QStringLiteral("\\"));
102102

103-
if (keySequence.contains("ShiftKey")) {
103+
if (keySequence.contains(QStringLiteral("ShiftKey"))) {
104104
QJsonObject key;
105-
key["caption"] = "shift";
105+
key[QStringLiteral("caption")] = QStringLiteral("shift");
106106
row.append(key);
107-
} else if (keySequence.contains("BackspaceKey")) {
107+
} else if (keySequence.contains(QStringLiteral("BackspaceKey"))) {
108108
QJsonObject upKey;
109-
upKey["caption"] = "";
110-
upKey["symView"] = "up";
109+
upKey[QStringLiteral("caption")] = QStringLiteral("");
110+
upKey[QStringLiteral("symView")] = QStringLiteral("up");
111111
row.append(upKey);
112112
QJsonObject key;
113-
key["caption"] = "backspace";
113+
key[QStringLiteral("caption")] = QStringLiteral("backspace");
114114
row.append(key);
115115
} else {
116116
QRegularExpressionMatch captionMatch =
@@ -122,21 +122,21 @@ void KeyboardLayoutProvider::setLayout(const QString &layout)
122122
QRegularExpressionMatch symView2Match =
123123
symView2.match(keySequence);
124124
QJsonObject key;
125-
key["caption"] = captionMatch.captured(1);
125+
key[QStringLiteral("caption")] = captionMatch.captured(1);
126126
if (captionShiftedMatch.hasMatch()) {
127-
key["captionShifted"] = captionShiftedMatch.captured(1);
127+
key[QStringLiteral("captionShifted")] = captionShiftedMatch.captured(1);
128128
}
129129
if (symViewMatch.hasMatch()) {
130-
key["symView"] = symViewMatch.captured(1);
130+
key[QStringLiteral("symView")] = symViewMatch.captured(1);
131131
}
132132
if (symView2Match.hasMatch()) {
133-
key["symView2"] = symView2Match.captured(1);
133+
key[QStringLiteral("symView2")] = symView2Match.captured(1);
134134
}
135135
row.append(key);
136136
}
137137
}
138138

139-
line = layoutFile.readLine();
139+
line = QString::fromUtf8(layoutFile.readLine());
140140
}
141141

142142
layoutFile.close();
@@ -150,17 +150,17 @@ void KeyboardLayoutProvider::setLayout(const QString &layout)
150150
m_row4 = keys[2].toArray().toVariantList();
151151

152152
QJsonArray row5;
153-
for (const QString& key : {"?123", "ctrl", ",", " ", ".", "alt", "enter"}) {
153+
for (const QString& key : {QStringLiteral("?123"), QStringLiteral("ctrl"), QStringLiteral(","), QStringLiteral(" "), QStringLiteral("."), QStringLiteral("alt"), QStringLiteral("enter")}) {
154154
QJsonObject keyObject;
155-
keyObject["caption"] = key;
156-
if (key == ".") {
157-
keyObject["symView"] = "left";
158-
} else if (key == "alt") {
159-
keyObject["symView"] = "down";
160-
} else if (key == "enter") {
161-
keyObject["symView"] = "right";
162-
} else if (key == "?123") {
163-
keyObject["symView"] = "ABC";
155+
keyObject[QStringLiteral("caption")] = key;
156+
if (key == QStringLiteral(".")) {
157+
keyObject[QStringLiteral("symView")] = QStringLiteral("left");
158+
} else if (key == QStringLiteral("alt")) {
159+
keyObject[QStringLiteral("symView")] = QStringLiteral("down");
160+
} else if (key == QStringLiteral("enter")) {
161+
keyObject[QStringLiteral("symView")] = QStringLiteral("right");
162+
} else if (key == QStringLiteral("?123")) {
163+
keyObject[QStringLiteral("symView")] = QStringLiteral("ABC");
164164
}
165165
row5.append(keyObject);
166166
}
@@ -261,16 +261,15 @@ void KeyboardLayoutProvider::loadNames()
261261

262262
for (const QString &group : settings.childGroups()) {
263263
settings.beginGroup(group);
264-
longNames[group] = settings.value(
265-
QStringLiteral("name")).toByteArray();
264+
longNames[group] = settings.value(QStringLiteral("name")).toString();
266265
settings.endGroup();
267266
}
268267
}
269268
}
270269

271270
// then load layouts
272271
for (const QString &layout : confDir.entryList()) {
273-
if (layout.endsWith(QStringLiteral(".qml")) && !layout.contains('_')) {
272+
if (layout.endsWith(QStringLiteral(".qml")) && !layout.contains(QChar::fromLatin1('_'))) {
274273
// hi, kn, mr and te are currentently not working
275274
if (layout.contains(QStringLiteral("hi")) || layout.contains(QStringLiteral("kn")) ||
276275
layout.contains(QStringLiteral("mr")) || layout.contains(QStringLiteral("te")) ||
@@ -279,8 +278,8 @@ void KeyboardLayoutProvider::loadNames()
279278
}
280279

281280
QJsonObject language;
282-
language.insert("short", layout.left(layout.indexOf('.')));
283-
language.insert("long", longNames[layout]);
281+
language.insert(QStringLiteral("short"), layout.left(layout.indexOf(QChar::fromLatin1('.'))));
282+
language.insert(QStringLiteral("long"), longNames[layout]);
284283
m_layouts.append(language);
285284
}
286285
}

app/src/models/devicelistmodel.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ static QUrl deviceTypeToIcon(const QString& deviceType)
3535
// TODO: move to qml part
3636
if (deviceType == QLatin1String("smartphone")
3737
|| deviceType == QLatin1String("phone"))
38-
return QStringLiteral("image://theme/icon-m-phone");
38+
return QUrl(QStringLiteral("image://theme/icon-m-phone"));
3939

4040
if (deviceType == QLatin1String("tablet"))
41-
return QStringLiteral("image://theme/icon-m-tablet");
41+
return QUrl(QStringLiteral("image://theme/icon-m-tablet"));
4242

4343
// FUTURE-TODO: use a television icon for "tv" when it exists
4444

45-
return QStringLiteral("image://theme/icon-m-computer");
45+
return QUrl(QStringLiteral("image://theme/icon-m-computer"));
4646
}
4747

4848
DeviceListModel::DeviceListModel(QObject *parent)

app/src/sailfishconnect.cpp

+12-12
Original file line numberDiff line numberDiff line change
@@ -186,21 +186,21 @@ bool copyDirectory(const QString& src, const QString& dst)
186186

187187
for (const QString dir : srcDir.entryList(
188188
QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks)) {
189-
QString dst_path = dst % '/' % dir;
189+
QString dst_path = dst % QChar::fromLatin1('/') % dir;
190190
if (!srcDir.mkpath(dst_path)) {
191191
qCCritical(logger) << "Failed to create directory" << dst_path;
192192
return false;
193193
}
194-
if (!copyDirectory(src % '/' % dir, dst_path)) {
194+
if (!copyDirectory(src % QChar::fromLatin1('/') % dir, dst_path)) {
195195
return false;
196196
}
197197
}
198198

199199
for (const QString file : srcDir.entryList(QDir::Files)) {
200-
if (!QFile::copy(src % '/' % file, dst % '/' % file)) {
200+
if (!QFile::copy(src % QChar::fromLatin1('/') % file, dst % QChar::fromLatin1('/') % file)) {
201201
qCCritical(logger)
202-
<< "Failed to copy file" << (src % '/' % file)
203-
<< "to" << (dst % '/' % file);
202+
<< "Failed to copy file" << (src % QChar::fromLatin1('/') % file)
203+
<< "to" << (dst % QChar::fromLatin1('/') % file);
204204
return false;
205205
}
206206
}
@@ -211,13 +211,13 @@ bool copyDirectory(const QString& src, const QString& dst)
211211
void migrateOldInstallation() {
212212
QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
213213
QString oldConfigPath = configPath
214-
% '/' % QStringLiteral("harbour-sailfishconnect")
215-
% '/' % QStringLiteral("harbour-sailfishconnect");
214+
% QChar::fromLatin1('/') % QStringLiteral("harbour-sailfishconnect")
215+
% QChar::fromLatin1('/') % QStringLiteral("harbour-sailfishconnect");
216216
QString newConfigPath = configPath
217-
% '/' % QStringLiteral("harbour-sailfishconnect");
217+
% QChar::fromLatin1('/') % QStringLiteral("harbour-sailfishconnect");
218218

219-
QString oldCertificatePath = oldConfigPath % '/' % QStringLiteral("certificate.pem");
220-
QString newCertificatePath = newConfigPath % '/' % QStringLiteral("certificate.pem");
219+
QString oldCertificatePath = oldConfigPath % QChar::fromLatin1('/') % QStringLiteral("certificate.pem");
220+
QString newCertificatePath = newConfigPath % QChar::fromLatin1('/') % QStringLiteral("certificate.pem");
221221

222222
if (QFileInfo::exists(oldCertificatePath) && !QFileInfo::exists(newCertificatePath)) {
223223
qCInfo(logger) << "Migrate config from" << oldConfigPath << "to" << newConfigPath;
@@ -247,7 +247,7 @@ Options parseCommandLine(const QCoreApplication &app) {
247247
parser.addHelpOption();
248248
parser.addVersionOption();
249249

250-
QCommandLineOption daemonOption(QStringList() << "d" << "daemon",
250+
QCommandLineOption daemonOption(QStringList() << QStringLiteral("d") << QStringLiteral("daemon"),
251251
QStringLiteral("Start application in daemon mode. "
252252
"Window is not shown until a call without is flag."));
253253
parser.addOption(daemonOption);
@@ -276,7 +276,7 @@ int main(int argc, char *argv[])
276276

277277
// Logging
278278
qInstallMessageHandler(myMessageOutput);
279-
QLoggingCategory::setFilterRules("kdeconnect.*=true");
279+
QLoggingCategory::setFilterRules(QStringLiteral("kdeconnect.*=true"));
280280

281281
// I18n
282282
initI18n();

app/src/ui.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,12 @@ void UI::showMainWindow()
8888
m_view->installEventFilter(this);
8989

9090
setRunInBackground(
91-
m_settings.value("runInBackground", m_runInBackground).toBool());
91+
m_settings.value(QStringLiteral("runInBackground"), m_runInBackground).toBool());
9292

9393
// view
94-
m_view->rootContext()->setContextProperty("daemon", m_daemonApi);
95-
m_view->rootContext()->setContextProperty("ui", this);
96-
m_view->rootContext()->setContextProperty("keyboardLayout", m_keyboardLayoutProvider);
94+
m_view->rootContext()->setContextProperty(QStringLiteral("daemon"), m_daemonApi);
95+
m_view->rootContext()->setContextProperty(QStringLiteral("ui"), this);
96+
m_view->rootContext()->setContextProperty(QStringLiteral("keyboardLayout"), m_keyboardLayoutProvider);
9797
m_view->setSource(SailfishApp::pathToMainQml());
9898
m_view->showFullScreen();
9999
}
@@ -189,7 +189,7 @@ void UI::setRunInBackground(bool value)
189189
return;
190190

191191
m_runInBackground = value;
192-
m_settings.setValue("runInBackground", value);
192+
m_settings.setValue(QStringLiteral("runInBackground"), value);
193193
m_settings.sync();
194194

195195
qGuiApp->setQuitOnLastWindowClosed(!value);
@@ -199,10 +199,10 @@ void UI::setRunInBackground(bool value)
199199
systemctl->setProcessChannelMode(QProcess::MergedChannels);
200200
if (value) {
201201
connect(systemctl, SIGNAL(finished(int)), this, SLOT(onRegisteredService()));
202-
systemctl->start("systemctl", { "--user", "enable", SERVICE_FILE_LOCATION });
202+
systemctl->start(QStringLiteral("systemctl"), { QStringLiteral("--user"), QStringLiteral("enable"), SERVICE_FILE_LOCATION });
203203
} else {
204204
connect(systemctl, SIGNAL(finished(int)), this, SLOT(onUnregisteredService()));
205-
systemctl->start("systemctl", { "--user", "disable", SERVICE_FILE_LOCATION });
205+
systemctl->start(QStringLiteral("systemctl"), { QStringLiteral("--user"), QStringLiteral("disable"), SERVICE_FILE_LOCATION });
206206
}
207207
#endif
208208

@@ -212,7 +212,7 @@ void UI::setRunInBackground(bool value)
212212
QVariant UI::openDevicePageDbusAction(const QString &deviceId)
213213
{
214214
return Notification::remoteAction(
215-
QStringLiteral("default"), QString("default"),
215+
QStringLiteral("default"), QStringLiteral("default"),
216216
DBUS_SERVICE_NAME, UI::DBUS_PATH, UI::DBUS_INTERFACE_NAME,
217217
QStringLiteral("openDevicePage"), { deviceId });
218218
}

conanfile.txt

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
KF5CoreAddons/5.36.0@r1tschy/stable
33
KF5I18n/5.36.0@r1tschy/stable
44
KF5Config/5.36.0@r1tschy/stable
5+
extra-cmake-modules/5.99.0@r1tschy/stable
56
libssh/0.9.5@r1tschy/stable
67

78
[options]

0 commit comments

Comments
 (0)