1 | // SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. |
---|---|
2 | // |
3 | // SPDX-License-Identifier: GPL-3.0-or-later |
4 | |
5 | #include "polkit.h" |
6 | #include "processutil.h" |
7 | |
8 | #include <QProcess> |
9 | |
10 | #define POLKIT_NAME "pkexec" |
11 | |
12 | PolKit::PolKit() |
13 | { |
14 | |
15 | } |
16 | |
17 | PolKit &PolKit::instance() |
18 | { |
19 | static PolKit ins; |
20 | return ins; |
21 | } |
22 | |
23 | qint64 PolKit::execute(const QString &program, const QStringList &arguments) |
24 | { |
25 | if (!ProcessUtil::exists(program)) { |
26 | emit failed(QString("Failed, not found %0").arg(program).toLatin1()); |
27 | return -1; |
28 | } |
29 | |
30 | QProcess process; |
31 | process.setProgram(POLKIT_NAME); |
32 | QStringList argsTemp = arguments; |
33 | argsTemp.push_front(program); |
34 | process.setArguments(argsTemp); |
35 | qint64 polkidID; |
36 | process.startDetached(&polkidID); |
37 | return polkidID; |
38 | } |
39 | |
40 | void PolKit::cancel(qint64 executeID) |
41 | { |
42 | QProcess killProcess; |
43 | killProcess.setProgram("kill"); |
44 | killProcess.setArguments({"-9", QString( "%0").arg(executeID)}); |
45 | killProcess.start(); |
46 | |
47 | emit canceled(); |
48 | } |
49 |