int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QCoreApplication::setApplicationName(QLatin1String("trklauncher")); QCoreApplication::setOrganizationName(QLatin1String("Nokia")); bool bluetooth; const TrkLauncherPtr launcher = parseArguments(app.arguments(), &bluetooth); if (launcher.isNull()) { usage(); return 1; } QObject::connect(launcher.data(), SIGNAL(finished()), &app, SLOT(quit())); QObject::connect(launcher.data(), SIGNAL(processStopped(uint,uint,uint,QString)), launcher.data(), SLOT(terminate())); // BLuetooth: Open with prompt QString errorMessage; if (bluetooth && !trk::ConsoleBluetoothStarter::startBluetooth(launcher->trkDevice(), launcher.data(), 30, &errorMessage)) { qWarning("%s\n", qPrintable(errorMessage)); return -1; } if (launcher->startServer(&errorMessage)) return app.exec(); qWarning("%s\n", qPrintable(errorMessage)); return 4; }
void ApplicationLauncher::stop() { if (!isRunning()) return; if (d->m_currentMode == Gui) { d->m_guiProcess.terminate(); if (!d->m_guiProcess.waitForFinished(1000)) { // This is blocking, so be fast. d->m_guiProcess.kill(); d->m_guiProcess.waitForFinished(); } } else { d->m_consoleProcess.stop(); processStopped(); } }
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString serialPortName; QString serialPortFriendlyName; QString sisFile; QString exeFile; QStringList cmdLine; QStringList args = QCoreApplication::arguments(); QTextStream outstream(stdout); QTextStream errstream(stderr); QString uploadLocalFile; QString uploadRemoteFile; QString downloadRemoteFile; QString downloadLocalFile; QString dstName = "c:\\data\\testtemp.sis"; int loglevel=1; int timeout=0; bool crashlog = true; enum {AgentUnknown, AgentCoda, AgentTRK} debugAgent = AgentUnknown; QString crashlogpath; QListIterator<QString> it(args); it.next(); //skip name of program while (it.hasNext()) { QString arg = it.next(); if (arg.startsWith("-")) { if (arg == "--portname" || arg == "-p") { CHECK_PARAMETER_EXISTS serialPortName = it.next(); } else if (arg == "--portfriendlyname" || arg == "-f") { CHECK_PARAMETER_EXISTS serialPortFriendlyName = it.next(); } else if (arg == "--sis" || arg == "-s") { CHECK_PARAMETER_EXISTS sisFile = it.next(); if (!QFileInfo(sisFile).exists()) { errstream << "Sis file (" << sisFile << ") doesn't exist" << endl; return 1; } } else if (arg == "--upload" || arg == "-u") { CHECK_PARAMETER_EXISTS uploadLocalFile = it.next(); if (!QFileInfo(uploadLocalFile).exists()) { errstream << "Executable file (" << uploadLocalFile << ") doesn't exist" << endl; return 1; } CHECK_PARAMETER_EXISTS uploadRemoteFile = it.next(); } else if (arg == "--download" || arg == "-d") { CHECK_PARAMETER_EXISTS downloadRemoteFile = it.next(); CHECK_PARAMETER_EXISTS downloadLocalFile = it.next(); QFileInfo downloadInfo(downloadLocalFile); if (downloadInfo.exists() && !downloadInfo.isFile()) { errstream << downloadLocalFile << " is not a file." << endl; return 1; } } else if (arg == "--timeout" || arg == "-t") { CHECK_PARAMETER_EXISTS bool ok; timeout = it.next().toInt(&ok); if (!ok) { errstream << "Timeout must be specified in milliseconds" << endl; return 1; } } else if (arg == "--coda") debugAgent = AgentCoda; else if (arg == "--trk") debugAgent = AgentTRK; else if (arg == "--tempfile" || arg == "-T") { CHECK_PARAMETER_EXISTS dstName = it.next(); } else if (arg == "--verbose" || arg == "-v") loglevel=2; else if (arg == "--quiet" || arg == "-q") loglevel=0; else if (arg == "--nocrashlog") crashlog = false; else if (arg == "--crashlogpath") { CHECK_PARAMETER_EXISTS crashlogpath = it.next(); } else errstream << "unknown command line option " << arg << endl; } else { exeFile = arg; while(it.hasNext()) { cmdLine.append(it.next()); } } } if (exeFile.isEmpty() && sisFile.isEmpty() && (uploadLocalFile.isEmpty() || uploadRemoteFile.isEmpty()) && (downloadLocalFile.isEmpty() || downloadRemoteFile.isEmpty())) { printUsage(outstream, args[0]); return 1; } if (!uploadLocalFile.isEmpty() && (!downloadLocalFile.isEmpty() || !downloadRemoteFile.isEmpty())) { errstream << "Upload option can't be used together with download" << endl; printUsage(outstream, args[0]); return 1; } if (serialPortName.isEmpty()) { if (loglevel > 0) outstream << "Detecting serial ports" << endl; foreach (const SerialPortId &id, enumerateSerialPorts(loglevel)) { if (loglevel > 0) outstream << "Port Name: " << id.portName << ", " << "Friendly Name:" << id.friendlyName << endl; if (!id.friendlyName.isEmpty() && serialPortFriendlyName.isEmpty() && (id.friendlyName.contains("symbian", Qt::CaseInsensitive) || id.friendlyName.contains("s60", Qt::CaseInsensitive) || id.friendlyName.contains("nokia", Qt::CaseInsensitive))) { serialPortName = id.portName; break; } else if (!id.friendlyName.isEmpty() && !serialPortFriendlyName.isEmpty() && id.friendlyName.contains(serialPortFriendlyName)) { serialPortName = id.portName; break; } } if (serialPortName.isEmpty()) { errstream << "No phone found, ensure USB cable is connected or specify manually with -p" << endl; return 1; } } CodaSignalHandler codaHandler; QScopedPointer<trk::Launcher> launcher; TrkSignalHandler trkHandler; QFileInfo info(exeFile); QFileInfo uploadInfo(uploadLocalFile); if (debugAgent == AgentUnknown) { outstream << "detecting debug agent..." << endl; CodaSignalHandler codaDetector; //auto detect agent codaDetector.setSerialPortName(serialPortName); codaDetector.setLogLevel(loglevel); codaDetector.setActionType(ActionPingOnly); codaDetector.setTimeout(1000); if (!codaDetector.run()) { debugAgent = AgentCoda; outstream << " - Coda is found" << endl; } else { debugAgent = AgentTRK; outstream << " - Coda is not found, defaulting to TRK" << endl; } } if (debugAgent == AgentCoda) { codaHandler.setSerialPortName(serialPortName); codaHandler.setLogLevel(loglevel); if (!sisFile.isEmpty()) { codaHandler.setActionType(ActionCopyInstall); codaHandler.setCopyFileName(sisFile, dstName); } else if (!uploadLocalFile.isEmpty() && uploadInfo.exists()) { codaHandler.setActionType(ActionCopy); codaHandler.setCopyFileName(uploadLocalFile, uploadRemoteFile); } if (!exeFile.isEmpty()) { codaHandler.setActionType(ActionRun); codaHandler.setAppFileName(QString("c:\\sys\\bin\\") + info.fileName()); codaHandler.setCommandLineArgs(cmdLine.join(QLatin1String(", "))); } if (!downloadRemoteFile.isEmpty() && !downloadLocalFile.isEmpty()) { codaHandler.setActionType(ActionDownload); codaHandler.setDownloadFileName(downloadRemoteFile, downloadLocalFile); } if (loglevel > 0) outstream << "Connecting to target via " << serialPortName << endl; if (timeout > 0) codaHandler.setTimeout(timeout); QObject::connect(OsSignalConverter::instance(), SIGNAL(terminate()), &codaHandler, SLOT(terminate()), Qt::QueuedConnection); return codaHandler.run(); } else { launcher.reset(new trk::Launcher(trk::Launcher::ActionPingOnly, SymbianUtils::SymbianDeviceManager::instance()->acquireDevice(serialPortName))); QStringList srcNames, dstNames; if (!sisFile.isEmpty()) { launcher->addStartupActions(trk::Launcher::ActionCopyInstall); srcNames.append(sisFile); dstNames.append(dstName); launcher->setInstallFileNames(QStringList(dstName)); } if (!uploadLocalFile.isEmpty() && uploadInfo.exists()) { launcher->addStartupActions(trk::Launcher::ActionCopy); srcNames.append(uploadLocalFile); dstNames.append(uploadRemoteFile); } launcher->setCopyFileNames(srcNames, dstNames); if (!exeFile.isEmpty()) { launcher->addStartupActions(trk::Launcher::ActionRun); launcher->setFileName(QString("c:\\sys\\bin\\") + info.fileName()); launcher->setCommandLineArgs(cmdLine.join(QLatin1String(" "))); } if (!downloadRemoteFile.isEmpty() && !downloadLocalFile.isEmpty()) { launcher->addStartupActions(trk::Launcher::ActionDownload); launcher->setDownloadFileName(downloadRemoteFile, downloadLocalFile); } if (loglevel > 0) outstream << "Connecting to target via " << serialPortName << endl; launcher->setTrkServerName(serialPortName); if (loglevel > 1) launcher->setVerbose(1); trkHandler.setLogLevel(loglevel); trkHandler.setCrashLogging(crashlog); trkHandler.setCrashLogPath(crashlogpath); QObject::connect(launcher.data(), SIGNAL(copyingStarted(const QString &)), &trkHandler, SLOT(copyingStarted(const QString &))); QObject::connect(launcher.data(), SIGNAL(canNotConnect(const QString &)), &trkHandler, SLOT(canNotConnect(const QString &))); QObject::connect(launcher.data(), SIGNAL(canNotCreateFile(const QString &, const QString &)), &trkHandler, SLOT(canNotCreateFile(const QString &, const QString &))); QObject::connect(launcher.data(), SIGNAL(canNotWriteFile(const QString &, const QString &)), &trkHandler, SLOT(canNotWriteFile(const QString &, const QString &))); QObject::connect(launcher.data(), SIGNAL(canNotCloseFile(const QString &, const QString &)), &trkHandler, SLOT(canNotCloseFile(const QString &, const QString &))); QObject::connect(launcher.data(), SIGNAL(installingStarted(const QString &)), &trkHandler, SLOT(installingStarted(const QString &))); QObject::connect(launcher.data(), SIGNAL(canNotInstall(const QString &, const QString &)), &trkHandler, SLOT(canNotInstall(const QString &, const QString &))); QObject::connect(launcher.data(), SIGNAL(installingFinished()), &trkHandler, SLOT(installingFinished())); QObject::connect(launcher.data(), SIGNAL(startingApplication()), &trkHandler, SLOT(startingApplication())); QObject::connect(launcher.data(), SIGNAL(applicationRunning(uint)), &trkHandler, SLOT(applicationRunning(uint))); QObject::connect(launcher.data(), SIGNAL(canNotRun(const QString &)), &trkHandler, SLOT(canNotRun(const QString &))); QObject::connect(launcher.data(), SIGNAL(applicationOutputReceived(const QString &)), &trkHandler, SLOT(applicationOutputReceived(const QString &))); QObject::connect(launcher.data(), SIGNAL(copyProgress(int)), &trkHandler, SLOT(copyProgress(int))); QObject::connect(launcher.data(), SIGNAL(stateChanged(int)), &trkHandler, SLOT(stateChanged(int))); QObject::connect(launcher.data(), SIGNAL(processStopped(uint,uint,uint,QString)), &trkHandler, SLOT(stopped(uint,uint,uint,QString))); QObject::connect(launcher.data(), SIGNAL(libraryLoaded(trk::Library)), &trkHandler, SLOT(libraryLoaded(trk::Library))); QObject::connect(launcher.data(), SIGNAL(libraryUnloaded(trk::Library)), &trkHandler, SLOT(libraryUnloaded(trk::Library))); QObject::connect(launcher.data(), SIGNAL(registersAndCallStackReadComplete(const QList<uint> &,const QByteArray &)), &trkHandler, SLOT(registersAndCallStackReadComplete(const QList<uint> &,const QByteArray &))); QObject::connect(&trkHandler, SIGNAL(resume(uint,uint)), launcher.data(), SLOT(resumeProcess(uint,uint))); QObject::connect(&trkHandler, SIGNAL(terminate()), launcher.data(), SLOT(terminate())); QObject::connect(&trkHandler, SIGNAL(getRegistersAndCallStack(uint,uint)), launcher.data(), SLOT(getRegistersAndCallStack(uint,uint))); QObject::connect(launcher.data(), SIGNAL(finished()), &trkHandler, SLOT(finished())); QObject::connect(OsSignalConverter::instance(), SIGNAL(terminate()), launcher.data(), SLOT(terminate()), Qt::QueuedConnection); QTimer timer; timer.setSingleShot(true); QObject::connect(&timer, SIGNAL(timeout()), &trkHandler, SLOT(timeout())); if (timeout > 0) { timer.start(timeout); } QString errorMessage; if (!launcher->startServer(&errorMessage)) { errstream << errorMessage << endl; return 1; } } return a.exec(); }
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString serialPortName; QString serialPortFriendlyName; QString sisFile; QString exeFile; QStringList cmdLine; QStringList args = QCoreApplication::arguments(); QTextStream outstream(stdout); QTextStream errstream(stderr); QString downloadRemoteFile; QString downloadLocalFile; int loglevel=1; int timeout=0; QListIterator<QString> it(args); it.next(); //skip name of program while (it.hasNext()) { QString arg = it.next(); if (arg.startsWith("-")) { if (arg == "--portname" || arg == "-p") { CHECK_PARAMETER_EXISTS serialPortName = it.next(); } else if (arg == "--portfriendlyname" || arg == "-f") { CHECK_PARAMETER_EXISTS serialPortFriendlyName = it.next(); } else if (arg == "--sis" || arg == "-s") { CHECK_PARAMETER_EXISTS sisFile = it.next(); } else if (arg == "--download" || arg == "-d") { CHECK_PARAMETER_EXISTS downloadRemoteFile = it.next(); CHECK_PARAMETER_EXISTS downloadLocalFile = it.next(); } else if (arg == "--timeout" || arg == "-t") { CHECK_PARAMETER_EXISTS bool ok; timeout = it.next().toInt(&ok); if (!ok) { errstream << "Timeout must be specified in milliseconds" << endl; return 1; } } else if (arg == "--verbose" || arg == "-v") loglevel=2; else if (arg == "--quiet" || arg == "-q") loglevel=0; else errstream << "unknown command line option " << arg << endl; } else { exeFile = arg; while(it.hasNext()) { cmdLine.append(it.next()); } } } if (exeFile.isEmpty() && sisFile.isEmpty() && (downloadLocalFile.isEmpty() || downloadRemoteFile.isEmpty())) { printUsage(outstream, args[0]); return 1; } if (serialPortName.isEmpty()) { if (loglevel > 0) outstream << "Detecting serial ports" << endl; foreach (const SerialPortId &id, enumerateSerialPorts()) { if (loglevel > 0) outstream << "Port Name: " << id.portName << ", " << "Friendly Name:" << id.friendlyName << endl; if (!id.friendlyName.isEmpty() && serialPortFriendlyName.isEmpty() && (id.friendlyName.contains("symbian", Qt::CaseInsensitive) || id.friendlyName.contains("s60", Qt::CaseInsensitive) || id.friendlyName.contains("nokia", Qt::CaseInsensitive))) { serialPortName = id.portName; break; } else if (!id.friendlyName.isEmpty() && !serialPortFriendlyName.isEmpty() && id.friendlyName.contains(serialPortFriendlyName)) { serialPortName = id.portName; break; } } if (serialPortName.isEmpty()) { errstream << "No phone found, ensure USB cable is connected or specify manually with -p" << endl; return 1; } } QScopedPointer<trk::Launcher> launcher; launcher.reset(new trk::Launcher(trk::Launcher::ActionPingOnly)); QFileInfo info(exeFile); if (!sisFile.isEmpty()) { launcher->addStartupActions(trk::Launcher::ActionCopyInstall); launcher->setCopyFileName(sisFile, "c:\\data\\testtemp.sis"); launcher->setInstallFileName("c:\\data\\testtemp.sis"); } else if (info.exists()) { launcher->addStartupActions(trk::Launcher::ActionCopy); launcher->setCopyFileName(exeFile, QString("c:\\sys\\bin\\") + info.fileName()); } if (!exeFile.isEmpty()) { launcher->addStartupActions(trk::Launcher::ActionRun); launcher->setFileName(QString("c:\\sys\\bin\\") + info.fileName()); launcher->setCommandLineArgs(cmdLine); } if (!downloadRemoteFile.isEmpty() && !downloadLocalFile.isEmpty()) { launcher->addStartupActions(trk::Launcher::ActionDownload); launcher->setDownloadFileName(downloadRemoteFile, downloadLocalFile); } if (loglevel > 0) outstream << "Connecting to target via " << serialPortName << endl; launcher->setTrkServerName(serialPortName); if (loglevel > 1) launcher->setVerbose(1); TrkSignalHandler handler; handler.setLogLevel(loglevel); QObject::connect(launcher.data(), SIGNAL(copyingStarted()), &handler, SLOT(copyingStarted())); QObject::connect(launcher.data(), SIGNAL(canNotConnect(const QString &)), &handler, SLOT(canNotConnect(const QString &))); QObject::connect(launcher.data(), SIGNAL(canNotCreateFile(const QString &, const QString &)), &handler, SLOT(canNotCreateFile(const QString &, const QString &))); QObject::connect(launcher.data(), SIGNAL(canNotWriteFile(const QString &, const QString &)), &handler, SLOT(canNotWriteFile(const QString &, const QString &))); QObject::connect(launcher.data(), SIGNAL(canNotCloseFile(const QString &, const QString &)), &handler, SLOT(canNotCloseFile(const QString &, const QString &))); QObject::connect(launcher.data(), SIGNAL(installingStarted()), &handler, SLOT(installingStarted())); QObject::connect(launcher.data(), SIGNAL(canNotInstall(const QString &, const QString &)), &handler, SLOT(canNotInstall(const QString &, const QString &))); QObject::connect(launcher.data(), SIGNAL(installingFinished()), &handler, SLOT(installingFinished())); QObject::connect(launcher.data(), SIGNAL(startingApplication()), &handler, SLOT(startingApplication())); QObject::connect(launcher.data(), SIGNAL(applicationRunning(uint)), &handler, SLOT(applicationRunning(uint))); QObject::connect(launcher.data(), SIGNAL(canNotRun(const QString &)), &handler, SLOT(canNotRun(const QString &))); QObject::connect(launcher.data(), SIGNAL(applicationOutputReceived(const QString &)), &handler, SLOT(applicationOutputReceived(const QString &))); QObject::connect(launcher.data(), SIGNAL(copyProgress(int)), &handler, SLOT(copyProgress(int))); QObject::connect(launcher.data(), SIGNAL(stateChanged(int)), &handler, SLOT(stateChanged(int))); QObject::connect(launcher.data(), SIGNAL(processStopped(uint,uint,uint,QString)), &handler, SLOT(stopped(uint,uint,uint,QString))); QObject::connect(&handler, SIGNAL(resume(uint,uint)), launcher.data(), SLOT(resumeProcess(uint,uint))); QObject::connect(&handler, SIGNAL(terminate()), launcher.data(), SLOT(terminate())); QObject::connect(launcher.data(), SIGNAL(finished()), &handler, SLOT(finished())); QTimer timer; timer.setSingleShot(true); QObject::connect(&timer, SIGNAL(timeout()), &handler, SLOT(timeout())); if (timeout > 0) { timer.start(timeout); } QString errorMessage; if (!launcher->startServer(&errorMessage)) { errstream << errorMessage << endl; return 1; } return a.exec(); }
ReplayGainScanner::ReplayGainScanner( Config* _config, Logger* _logger, bool showMainWindowButton, QWidget *parent, Qt::WFlags f ) : KDialog( parent, f ), config( _config ), logger( _logger ) { setButtons( 0 ); setCaption( i18n("Replay Gain tool") ); setWindowIcon( KIcon("soundkonverter-replaygain") ); QWidget *widget = new QWidget( this ); setMainWidget( widget ); QGridLayout* grid = new QGridLayout( widget ); QHBoxLayout* filterBox = new QHBoxLayout(); grid->addLayout( filterBox, 0, 0 ); cAdd = new ComboButton( widget ); cAdd->insertItem( KIcon("folder"), i18n("Add folder...") ); cAdd->insertItem( KIcon("audio-x-generic"), i18n("Add files...") ); filterBox->addWidget( cAdd ); connect( cAdd, SIGNAL(clicked(int)), this, SLOT(addClicked(int)) ); filterBox->addStretch(); pShowMainWindow = new KPushButton( KIcon("soundkonverter"), i18n("Show soundKonverter main window"), widget ); pShowMainWindow->setVisible( showMainWindowButton ); filterBox->addWidget( pShowMainWindow ); connect( pShowMainWindow, SIGNAL(clicked()), this, SLOT(showMainWindowClicked()) ); fileList = new ReplayGainFileList( config, logger, widget ); grid->addWidget( fileList, 1, 0 ); connect( fileList, SIGNAL(processStarted()), this, SLOT(processStarted()) ); connect( fileList, SIGNAL(processStopped()), this, SLOT(processStopped()) ); QHBoxLayout* progressBox = new QHBoxLayout(); grid->addLayout( progressBox, 2, 0 ); progressIndicator = new ProgressIndicator( this ); progressBox->addWidget( progressIndicator ); connect( fileList, SIGNAL(timeChanged(float)), progressIndicator, SLOT(timeChanged(float)) ); connect( fileList, SIGNAL(finished(bool)), progressIndicator, SLOT(finished(bool)) ); connect( progressIndicator, SIGNAL(progressChanged(const QString&)), this, SLOT(progressChanged(const QString&)) ); QHBoxLayout* buttonBox = new QHBoxLayout(); grid->addLayout( buttonBox, 3, 0 ); pTagVisible = new KPushButton( KIcon("list-add"), i18n("Tag untagged"), widget ); pTagVisible->setToolTip( i18n("Calculate Replay Gain tags for all files in the file list without Replay Gain tags.") ); buttonBox->addWidget( pTagVisible ); connect( pTagVisible, SIGNAL(clicked()), this, SLOT(calcReplayGainClicked()) ); pRemoveTag = new KPushButton( KIcon("list-remove"), i18n("Untag tagged"), widget ); pRemoveTag->setToolTip( i18n("Remove the Replay Gain tags from all files in the file list.") ); buttonBox->addWidget( pRemoveTag ); connect( pRemoveTag, SIGNAL(clicked()), this, SLOT(removeReplayGainClicked()) ); pCancel = new KPushButton( KIcon("dialog-cancel"), i18n("Cancel"), widget ); pCancel->hide(); buttonBox->addWidget( pCancel ); connect( pCancel, SIGNAL(clicked()), this, SLOT(cancelClicked()) ); cForce = new QCheckBox( i18n("Force recalculation"), this ); cForce->setToolTip( i18n("Recalculate Replay Gain tags for files that already have Replay Gain tags set.") ); buttonBox->addWidget( cForce ); buttonBox->addStretch(); pClose = new KPushButton( KIcon("dialog-close"), i18n("Close"), widget ); pClose->setFocus(); buttonBox->addWidget( pClose ); connect( pClose, SIGNAL(clicked()), this, SLOT(closeClicked()) ); ReplayGainProcessor *replayGainProcessor = new ReplayGainProcessor( config, fileList, logger ); connect( fileList, SIGNAL(processItem(ReplayGainFileListItem*,ReplayGainPlugin::ApplyMode)), replayGainProcessor, SLOT(add(ReplayGainFileListItem*,ReplayGainPlugin::ApplyMode)) ); connect( fileList, SIGNAL(killItem(ReplayGainFileListItem*)), replayGainProcessor, SLOT(kill(ReplayGainFileListItem*)) ); connect( replayGainProcessor, SIGNAL(finished(ReplayGainFileListItem*,ReplayGainFileListItem::ReturnCode)), fileList, SLOT(itemFinished(ReplayGainFileListItem*,ReplayGainFileListItem::ReturnCode)) ); connect( replayGainProcessor, SIGNAL(finishedProcess(int,bool)), logger, SLOT(processCompleted(int,bool)) ); connect( replayGainProcessor, SIGNAL(updateTime(float)), progressIndicator, SLOT(update(float)) ); connect( replayGainProcessor, SIGNAL(timeFinished(float)), progressIndicator, SLOT(timeFinished(float)) ); setInitialSize( QSize(600,400) ); KSharedConfig::Ptr conf = KGlobal::config(); KConfigGroup group = conf->group( "ReplayGainTool" ); restoreDialogSize( group ); }