1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
// SPDX-FileCopyrightText: 2023 Daniel Vrátil <dvratil@kde.org>
//
// SPDX-License-Identifier: LGPL-2.1-or-later
#include "klipperutils.h"
#include <QProcess>
#include <QRegularExpression>
#include <QStandardPaths>
namespace
{
const int klipperMinMajorVersion = 5;
const int klipperMinMinorVersion = 13;
}
using namespace PlasmaPass;
KlipperUtils::State KlipperUtils::getState()
{
const auto klipperExecutable = QStandardPaths::findExecutable(QStringLiteral("klipper"));
if (klipperExecutable.isEmpty()) {
return State::Missing;
}
QProcess process{};
process.setProgram(klipperExecutable);
process.setArguments({QStringLiteral("--version")});
process.start(QIODevice::ReadOnly);
process.waitForFinished();
if (process.exitStatus() != QProcess::NormalExit) {
return State::Missing;
}
const auto output = process.readAllStandardOutput();
const QRegularExpression rx(QStringLiteral(R"/(^klipper ([0-9]+)\.([0-9]+))/"));
const auto match = rx.match(QString::fromUtf8(output));
if (!match.hasMatch()) {
return State::Available;
}
const auto majorVersionStr = match.capturedView(1);
bool ok = false;
const int majorVersion = majorVersionStr.toInt(&ok);
if (!ok) {
return State::Available;
}
const auto minorVersionStr = match.capturedView(2);
ok = false;
const int minorVersion = minorVersionStr.toInt(&ok);
if (!ok) {
return State::Available;
}
// Klipper supports x-kde-passwordManagerHint since Plasma 5.13
const auto verdict = ((majorVersion > klipperMinMajorVersion) || (majorVersion == klipperMinMajorVersion && minorVersion >= klipperMinMinorVersion));
return verdict ? State::SupportsPasswordManagerHint : State::Available;
}
|