File indexing completed on 2024-05-19 04:03:03
0001 /* 0002 SPDX-FileCopyrightText: 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include <KPluginFactory> 0008 #include <QDebug> 0009 #include <QJsonArray> 0010 #include <QProcess> 0011 #include <QStandardPaths> 0012 #include <purpose/pluginbase.h> 0013 0014 class KDEConnectJob : public Purpose::Job 0015 { 0016 Q_OBJECT 0017 public: 0018 KDEConnectJob(QObject *parent) 0019 : Purpose::Job(parent) 0020 { 0021 } 0022 0023 QStringList arrayToList(const QJsonArray &array) 0024 { 0025 QStringList ret; 0026 for (const QJsonValue &val : array) { 0027 ret += val.toString(); 0028 } 0029 return ret; 0030 } 0031 0032 void start() override 0033 { 0034 QProcess *process = new QProcess(this); 0035 process->setProgram(QStringLiteral("kdeconnect-cli")); 0036 QJsonArray urlsJson = data().value(QLatin1String("urls")).toArray(); 0037 process->setArguments(QStringList(QStringLiteral("--device")) 0038 << data().value(QLatin1String("device")).toString() << QStringLiteral("--share") << arrayToList(urlsJson)); 0039 connect(process, &QProcess::errorOccurred, this, &KDEConnectJob::processError); 0040 connect(process, &QProcess::finished, this, &KDEConnectJob::jobFinished); 0041 connect(process, &QProcess::readyRead, this, [process]() { 0042 qDebug() << "kdeconnect-cli output:" << process->readAll(); 0043 }); 0044 0045 process->start(); 0046 } 0047 0048 void processError(QProcess::ProcessError error) 0049 { 0050 QProcess *process = qobject_cast<QProcess *>(sender()); 0051 qWarning() << "kdeconnect share error:" << error << process->errorString(); 0052 setError(1 + error); 0053 setErrorText(process->errorString()); 0054 emitResult(); 0055 } 0056 0057 void jobFinished(int code, QProcess::ExitStatus status) 0058 { 0059 if (status != QProcess::NormalExit) 0060 qWarning() << "kdeconnect-cli crashed"; 0061 0062 setError(code); 0063 setOutput({{QStringLiteral("url"), QString()}}); 0064 emitResult(); 0065 } 0066 0067 private: 0068 }; 0069 0070 class KDEConnectPlugin : public Purpose::PluginBase 0071 { 0072 Q_OBJECT 0073 public: 0074 using PluginBase::PluginBase; 0075 Purpose::Job *createJob() const override 0076 { 0077 return new KDEConnectJob(nullptr); 0078 } 0079 }; 0080 0081 K_PLUGIN_CLASS_WITH_JSON(KDEConnectPlugin, "kdeconnectplugin.json") 0082 0083 #include "kdeconnectplugin.moc"