19 if (!encoding.isEmpty()) {
20 codec = QTextCodec::codecForName(encoding.toAscii().constData());
22 codec = QTextCodec::codecForLocale();
24 codec = QTextCodec::codecForLocale();
27 programName = progName;
41 sensorResult += codec->toUnicode(buffer);
44 void ProgramSensor::replaceLine(QString &format,
const QString &line)
46 const QStringList tokens = line.split(QRegExp(
"\\s+"), QString::SkipEmptyParts);
47 QRegExp dblDigit(
"%(\\d\\d)");
48 replaceArgs(dblDigit, format, tokens);
49 QRegExp digit(
"%(\\d)");
50 replaceArgs(digit, format, tokens);
53 void ProgramSensor::replaceArgs(QRegExp& regEx, QString& format,
const QStringList& tokens)
57 pos = regEx.indexIn(format, pos);
59 QString matched = regEx.cap(1);
60 int tokenIndex = matched.toInt() - 1;
61 QString replacement =
"";
62 if (tokenIndex < tokens.size()) {
63 replacement = tokens.at(tokenIndex);
65 format.replace(QRegExp(
'%' + matched), replacement);
66 pos += regEx.matchedLength();
78 QVector<QString> lines;
79 QStringList stringList = sensorResult.split(
'\n');
80 QStringList::ConstIterator end(stringList.constEnd());
81 for (QStringList::ConstIterator it = stringList.constBegin(); it != end; ++it) {
85 int count = (int) lines.size();
91 lineNbr = (sp->
getParam(
"LINE")).toInt();
92 if (lineNbr >= 1 && lineNbr <= (
int) count) {
93 value = lines[lineNbr-1];
94 }
else if (-lineNbr >= 1 && -lineNbr <= (
int) count) {
95 value = lines[count+lineNbr];
96 }
else if (lineNbr != 0) {
102 QString format = sp->
getParam(
"FORMAT");
103 if (!format.isEmpty()) {
105 QStringList lineList = value.split(
'\n');
106 QStringList::ConstIterator lineListEnd(lineList.constEnd());
107 for (QStringList::ConstIterator line = lineList.constBegin(); line != lineListEnd; ++line) {
108 QString formatCopy = format;
109 replaceLine(formatCopy, *line);
110 returnValue += formatCopy;
111 if ( lineList.size() > 1) {
127 QString prog = programName;
129 if ( prog.isEmpty() || prog.startsWith(
"%echo ")) {
130 sensorResult += prog.mid(6);
133 ksp.clearArguments();
136 ksp.start(K3ProcIO::NotifyOnExit, K3ProcIO::Stdout);
140 #include "program.moc"
void processExited(K3Process *proc)
void replaceNamedValues(QString *source)
QString getParam(const QString &) const
virtual void setValue(int)
void receivedStdout(K3Process *proc, char *buffer, int buflen)
ProgramSensor(Karamba *k, const QString &programName, int msec=1000, const QString &encoding=QString())
QList< QObject * > * objList