File indexing completed on 2024-05-12 05:37:17
0001 /* 0002 SPDX-FileCopyrightText: 2007, 2008 Petri Damsten <damu@iki.fi> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #include "executable.h" 0008 #include <QDebug> 0009 ExecutableContainer::ExecutableContainer(const QString &command, QObject *parent) 0010 : Plasma5Support::DataContainer(parent) 0011 , m_process(nullptr) 0012 { 0013 setObjectName(command); 0014 connect(this, &Plasma5Support::DataContainer::updateRequested, this, &ExecutableContainer::exec); 0015 exec(); 0016 } 0017 0018 ExecutableContainer::~ExecutableContainer() 0019 { 0020 if (m_process) { 0021 disconnect(m_process, nullptr, this, nullptr); 0022 } 0023 delete m_process; 0024 } 0025 0026 void ExecutableContainer::finished(int exitCode, QProcess::ExitStatus exitStatus) 0027 { 0028 setData(QStringLiteral("exit code"), exitCode); 0029 setData(QStringLiteral("exit status"), exitStatus); 0030 setData(QStringLiteral("stdout"), QString::fromLocal8Bit(m_process->readAllStandardOutput())); 0031 setData(QStringLiteral("stderr"), QString::fromLocal8Bit(m_process->readAllStandardError())); 0032 checkForUpdate(); 0033 } 0034 0035 void ExecutableContainer::exec() 0036 { 0037 if (!m_process) { 0038 m_process = new KProcess(); 0039 connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(finished(int, QProcess::ExitStatus))); 0040 m_process->setOutputChannelMode(KProcess::SeparateChannels); 0041 m_process->setShellCommand(objectName()); 0042 } 0043 0044 if (m_process->state() == QProcess::NotRunning) { 0045 m_process->start(); 0046 } else { 0047 qDebug() << "Process" << objectName() << "already running. Pid:" << m_process->processId(); 0048 } 0049 } 0050 0051 ExecutableEngine::ExecutableEngine(QObject *parent) 0052 : Plasma5Support::DataEngine(parent) 0053 { 0054 setMinimumPollingInterval(1000); 0055 } 0056 0057 bool ExecutableEngine::sourceRequestEvent(const QString &source) 0058 { 0059 addSource(new ExecutableContainer(source, this)); 0060 return true; 0061 } 0062 0063 K_PLUGIN_CLASS_WITH_JSON(ExecutableEngine, "plasma-dataengine-executable.json") 0064 0065 #include "executable.moc"