/*************************************************************************** * Copyright © 2018 Nicolas Fella * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * * published by the Free Software Foundation; either version 2 of * * the License or (at your option) version 3 or any later version * * accepted by the membership of KDE e.V. (or its successor approved * * by the membership of KDE e.V.), which shall act as a proxy * * defined in Section 14 of version 3 of the license. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * ***************************************************************************/ #include "remotecommandsrunner.h" #include K_EXPORT_PLASMA_RUNNER(installer, RemoteCommandsRunner) RemoteCommandsRunner::RemoteCommandsRunner(QObject *parent, const QVariantList &args) : Plasma::AbstractRunner(parent, args) , m_daemonInterface(new DaemonDbusInterface) { Q_UNUSED(args) setObjectName(QStringLiteral("Run Commands")); setPriority(AbstractRunner::HighestPriority); } RemoteCommandsRunner::~RemoteCommandsRunner() { } void RemoteCommandsRunner::match(Plasma::RunnerContext &context) { QDBusReply devicesReply = m_daemonInterface.devices(true, true); if (devicesReply.isValid()) { const auto devices = devicesReply.value(); for (const QString& deviceId : devices) { DeviceDbusInterface deviceInterface(deviceId, this); if(!deviceInterface.hasPlugin(QStringLiteral("kdeconnect_remotecommands"))) { continue; } RemoteCommandsDbusInterface remoteCommandsInterface(deviceId, this); const auto cmds = QJsonDocument::fromJson(remoteCommandsInterface.commands()).object(); for (auto it = cmds.constBegin(), itEnd = cmds.constEnd(); it!=itEnd; ++it) { const QJsonObject cont = it->toObject(); const QString deviceName = deviceInterface.name(); const QString commandName = cont.value(QStringLiteral("name")).toString(); if (deviceName.contains(context.query(), Qt::CaseInsensitive) || commandName.contains(context.query(), Qt::CaseInsensitive)) { Plasma::QueryMatch match(this); match.setType(Plasma::QueryMatch::PossibleMatch); match.setId(it.key()); match.setIconName(QStringLiteral("kdeconnect")); match.setText(deviceName + QStringLiteral(": ") + commandName); match.setSubtext(cont.value(QStringLiteral("command")).toString()); match.setData(deviceId + QStringLiteral("$") + it.key()); context.addMatch(match); } } } } } void RemoteCommandsRunner::run(const Plasma::RunnerContext &/*context*/, const Plasma::QueryMatch &match) { RemoteCommandsDbusInterface remoteCommandsInterface(match.data().toString().split(QStringLiteral("$"))[0], this); remoteCommandsInterface.triggerCommand(match.data().toString().split(QStringLiteral("$"))[1]); } #include "remotecommandsrunner.moc"