Plasma
executable.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "executable.h"
00020 #include <KDebug>
00021
00022 ExecutableContainer::ExecutableContainer(const QString& command, QObject* parent)
00023 : Plasma::DataContainer(parent), m_process(0)
00024 {
00025 setObjectName(command);
00026 connect(this, SIGNAL(updateRequested(DataContainer*)), this, SLOT(exec()));
00027 exec();
00028 }
00029
00030 ExecutableContainer::~ExecutableContainer()
00031 {
00032 delete m_process;
00033 }
00034
00035 void ExecutableContainer::finished(int exitCode, QProcess::ExitStatus exitStatus)
00036 {
00037
00038 setData("exit code", exitCode);
00039 setData("exit status", exitStatus);
00040 setData("stdout", QString::fromLocal8Bit(m_process->readAllStandardOutput()));
00041 setData("stderr", QString::fromLocal8Bit(m_process->readAllStandardError()));
00042 checkForUpdate();
00043 }
00044
00045 void ExecutableContainer::exec()
00046 {
00047
00048 if (!m_process) {
00049 m_process = new KProcess();
00050 connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)),
00051 this, SLOT(finished(int, QProcess::ExitStatus)));
00052 m_process->setOutputChannelMode(KProcess::SeparateChannels);
00053 m_process->setShellCommand(objectName());
00054 }
00055
00056 if (m_process->state() == QProcess::NotRunning) {
00057 m_process->start();
00058 } else {
00059 kDebug() << "Process" << objectName() << "already running. Pid:" << m_process->pid();
00060 }
00061 }
00062
00063
00064 ExecutableEngine::ExecutableEngine(QObject* parent, const QVariantList& args)
00065 : Plasma::DataEngine(parent, args)
00066 {
00067 setMinimumPollingInterval(1000);
00068 }
00069
00070 bool ExecutableEngine::sourceRequestEvent(const QString& source)
00071 {
00072
00073 addSource(new ExecutableContainer(source, this));
00074 return true;
00075 }
00076
00077 #include "executable.moc"