trk: Add support for command line arguments in trk::Launcher.

Initial-patch-by: Shane Kearns <shane.kearns@sosco.com>
This commit is contained in:
Friedemann Kleint
2010-01-21 12:33:34 +01:00
parent e10a07d8b1
commit 670647b820
2 changed files with 36 additions and 9 deletions

View File

@@ -64,6 +64,7 @@ struct LauncherPrivate {
CopyState m_copyState; CopyState m_copyState;
QString m_fileName; QString m_fileName;
QStringList m_commandLineArgs;
QString m_installFileName; QString m_installFileName;
int m_verbose; int m_verbose;
Launcher::Actions m_startupActions; Launcher::Actions m_startupActions;
@@ -146,6 +147,11 @@ void Launcher::setInstallFileName(const QString &name)
d->m_installFileName = name; d->m_installFileName = name;
} }
void Launcher::setCommandLineArgs(const QStringList &args)
{
d->m_commandLineArgs = args;
}
void Launcher::setSerialFrame(bool b) void Launcher::setSerialFrame(bool b)
{ {
d->m_device->setSerialFrame(b); d->m_device->setSerialFrame(b);
@@ -171,8 +177,10 @@ bool Launcher::startServer(QString *errorMessage)
{ {
errorMessage->clear(); errorMessage->clear();
if (d->m_verbose) { if (d->m_verbose) {
const QString msg = QString::fromLatin1("Port=%1 Executable=%2 Package=%3 Remote Package=%4 Install file=%5") const QString msg = QString::fromLatin1("Port=%1 Executable=%2 Arguments=%3 Package=%4 Remote Package=%5 Install file=%6")
.arg(d->m_trkServerName, d->m_fileName, d->m_copyState.sourceFileName, d->m_copyState.destinationFileName, d->m_installFileName); .arg(d->m_trkServerName, d->m_fileName,
d->m_commandLineArgs.join(QString(QLatin1Char(' '))),
d->m_copyState.sourceFileName, d->m_copyState.destinationFileName, d->m_installFileName);
logMessage(msg); logMessage(msg);
} }
if (d->m_startupActions & ActionCopy) { if (d->m_startupActions & ActionCopy) {
@@ -647,6 +655,26 @@ void Launcher::handleInstallPackageFinished(const TrkResult &result)
} }
} }
QByteArray Launcher::startProcessMessage(const QString &executable,
const QStringList &arguments)
{
// It's not started yet
QByteArray ba;
appendShort(&ba, 0, TargetByteOrder); // create new process
appendByte(&ba, 0); // options - currently unused
if(arguments.isEmpty()) {
appendString(&ba, executable.toLocal8Bit(), TargetByteOrder);
return ba;
}
// Append full command line as one string (leading length information).
QByteArray commandLineBa;
commandLineBa.append(executable.toLocal8Bit());
commandLineBa.append('\0');
commandLineBa.append(arguments.join(QString(QLatin1Char(' '))).toLocal8Bit());
appendString(&ba, commandLineBa, TargetByteOrder);
return ba;
}
void Launcher::startInferiorIfNeeded() void Launcher::startInferiorIfNeeded()
{ {
emit startingApplication(); emit startingApplication();
@@ -654,12 +682,7 @@ void Launcher::startInferiorIfNeeded()
logMessage("Process already 'started'"); logMessage("Process already 'started'");
return; return;
} }
// It's not started yet d->m_device->sendTrkMessage(TrkCreateItem, TrkCallback(this, &Launcher::handleCreateProcess),
QByteArray ba; startProcessMessage(d->m_fileName, d->m_commandLineArgs)); // Create Item
appendByte(&ba, 0); // ?
appendByte(&ba, 0); // create new process
appendByte(&ba, 0); // ?
appendString(&ba, d->m_fileName.toLocal8Bit(), TargetByteOrder);
d->m_device->sendTrkMessage(TrkCreateItem, TrkCallback(this, &Launcher::handleCreateProcess), ba); // Create Item
} }
} // namespace trk } // namespace trk

View File

@@ -82,6 +82,7 @@ public:
void setFileName(const QString &name); void setFileName(const QString &name);
void setCopyFileName(const QString &srcName, const QString &dstName); void setCopyFileName(const QString &srcName, const QString &dstName);
void setInstallFileName(const QString &name); void setInstallFileName(const QString &name);
void setCommandLineArgs(const QStringList &args);
bool startServer(QString *errorMessage); bool startServer(QString *errorMessage);
void setVerbose(int v); void setVerbose(int v);
void setSerialFrame(bool b); void setSerialFrame(bool b);
@@ -95,6 +96,9 @@ public:
// becomes valid after successful execution of ActionPingOnly // becomes valid after successful execution of ActionPingOnly
QString deviceDescription(unsigned verbose = 0u) const; QString deviceDescription(unsigned verbose = 0u) const;
static QByteArray startProcessMessage(const QString &executable,
const QStringList &arguments);
signals: signals:
void copyingStarted(); void copyingStarted();
void canNotConnect(const QString &errorMessage); void canNotConnect(const QString &errorMessage);