File indexing completed on 2024-04-28 05:34:16
0001 // SPDX-FileCopyrightText: 2023 Daniel Vrátil <dvratil@kde.org> 0002 // 0003 // SPDX-License-Identifier: LGPL-2.1-or-later 0004 0005 #include "klipperutils.h" 0006 0007 #include <QProcess> 0008 #include <QRegularExpression> 0009 #include <QStandardPaths> 0010 0011 namespace 0012 { 0013 0014 const int klipperMinMajorVersion = 5; 0015 const int klipperMinMinorVersion = 13; 0016 0017 } 0018 0019 using namespace PlasmaPass; 0020 0021 KlipperUtils::State KlipperUtils::getState() 0022 { 0023 const auto klipperExecutable = QStandardPaths::findExecutable(QStringLiteral("klipper")); 0024 if (klipperExecutable.isEmpty()) { 0025 return State::Missing; 0026 } 0027 0028 QProcess process{}; 0029 process.setProgram(klipperExecutable); 0030 process.setArguments({QStringLiteral("--version")}); 0031 process.start(QIODevice::ReadOnly); 0032 process.waitForFinished(); 0033 if (process.exitStatus() != QProcess::NormalExit) { 0034 return State::Missing; 0035 } 0036 const auto output = process.readAllStandardOutput(); 0037 0038 const QRegularExpression rx(QStringLiteral(R"/(^klipper ([0-9]+)\.([0-9]+))/")); 0039 const auto match = rx.match(QString::fromUtf8(output)); 0040 if (!match.hasMatch()) { 0041 return State::Available; 0042 } 0043 0044 const auto majorVersionStr = match.capturedView(1); 0045 bool ok = false; 0046 const int majorVersion = majorVersionStr.toInt(&ok); 0047 if (!ok) { 0048 return State::Available; 0049 } 0050 0051 const auto minorVersionStr = match.capturedView(2); 0052 ok = false; 0053 const int minorVersion = minorVersionStr.toInt(&ok); 0054 if (!ok) { 0055 return State::Available; 0056 } 0057 0058 // Klipper supports x-kde-passwordManagerHint since Plasma 5.13 0059 const auto verdict = ((majorVersion > klipperMinMajorVersion) || (majorVersion == klipperMinMajorVersion && minorVersion >= klipperMinMinorVersion)); 0060 return verdict ? State::SupportsPasswordManagerHint : State::Available; 0061 }