Failed to start the local drone agent - " "error 0x%1, exit status 0x%2 exit code 0x%3.
") .arg(localServer_->error(), 0, 16) .arg(localServer_->exitStatus(), 0, 16) .arg(localServer_->exitCode(), 0, 16); if (localServer_->error() == QProcess::FailedToStart) errorStr.append(tr("The drone program does not exist at %1 or you " "don't have sufficient permissions to execute it." "
") .arg(QCoreApplication::applicationDirPath())); if (localServer_->exitCode() == 1) errorStr.append(tr("The drone program was not able to bind to " "TCP port 7878 - maybe a drone process is already " "running?
")); #ifdef Q_OS_WIN32 if (localServer_->exitCode() == STATUS_DLL_NOT_FOUND) errorStr.append(tr("This is most likely because Packet.dll " "was not found - make sure you have " "WinPcap" " installed.
") .arg(jumpUrl("winpcap"))); #endif msgBox.setText(errorStr); msgBox.setInformativeText(tr("Try running drone directly.")); msgBox.exec(); QMessageBox::information(this, QString(), tr("If you have remote drone agents running, you can still add " "and connect to them.
" "If you don't want to start the local drone agent at startup, " "provide the -c option to Ostinato on the command line.
" "Learn about Ostinato's Controller-Agent " "architecture
").arg(jumpUrl("arch"))); } void MainWindow::onNewVersion(QString newVersion) { QDate today = QDate::currentDate(); QDate lastChecked = QDate::fromString( appSettings->value(kLastUpdateCheck).toString(), Qt::ISODate); if (lastChecked.daysTo(today) >= 5) { QMessageBox::information(this, tr("Update check"), tr("Ostinato version %1 is now available (you have %2). " "See change log.
" "Visit ostinato.org to download.
") .arg(newVersion) .arg(version) .arg(jumpUrl("changelog", "app", "status", "update")) .arg(jumpUrl("download", "app", "status", "update"))); } else { QLabel *msg = new QLabel(tr("New Ostinato version %1 available. Visit " "ostinato.org to download") .arg(newVersion) .arg(jumpUrl("download", "app", "status", "update"))); msg->setOpenExternalLinks(true); statusBar()->addPermanentWidget(msg); } appSettings->setValue(kLastUpdateCheck, today.toString(Qt::ISODate)); sender()->deleteLater(); } void MainWindow::onLatestVersion(QString latestVersion) { if (version != latestVersion) { QMessageBox::information(this, tr("Update check"), tr("Ostinato version %1 is now available (you have %2). " "See change log.
" "Visit ostinato.org to download.
") .arg(latestVersion) .arg(version) .arg(jumpUrl("changelog", "app", "status", "update")) .arg(jumpUrl("download", "app", "status", "update"))); } else { QMessageBox::information(this, tr("Update check"), tr("You are already running the latest Ostinato version - %1") .arg(version)); } sender()->deleteLater(); } //! Returns true on success (or user cancel) and false on failure bool MainWindow::openSession(QString fileName, QString &error) { bool ret = false; QDialog *optDialog; QProgressDialog progress("Opening Session", "Cancel", 0, 0, this); OstProto::SessionContent session; SessionFileFormat *fmt = SessionFileFormat::fileFormatFromFile(fileName); if (fmt == NULL) { error = tr("Unknown session file format"); goto _fail; } if ((optDialog = fmt->openOptionsDialog())) { int ret; optDialog->setParent(this, Qt::Dialog); ret = optDialog->exec(); optDialog->setParent(0, Qt::Dialog); if (ret == QDialog::Rejected) goto _user_opt_cancel; } progress.setAutoReset(false); progress.setAutoClose(false); progress.setMinimumDuration(0); progress.show(); setDisabled(true); progress.setEnabled(true); // to override the mainWindow disable connect(fmt, SIGNAL(status(QString)),&progress,SLOT(setLabelText(QString))); connect(fmt, SIGNAL(target(int)), &progress, SLOT(setMaximum(int))); connect(fmt, SIGNAL(progress(int)), &progress, SLOT(setValue(int))); connect(&progress, SIGNAL(canceled()), fmt, SLOT(cancel())); fmt->openAsync(fileName, session, error); qDebug("after open async"); while (!fmt->isFinished()) qApp->processEvents(); qDebug("wait over for async operation"); if (!fmt->result()) goto _fail; // process any remaining events posted from the thread for (int i = 0; i < 10; i++) qApp->processEvents(); // XXX: user can't cancel operation from here on! progress.close(); portsWindow->openSession(&session, error); _user_opt_cancel: ret = true; _fail: progress.close(); setEnabled(true); return ret; } bool MainWindow::saveSession(QString fileName, QString fileType, QString &error) { bool ret = false; QProgressDialog progress("Saving Session", "Cancel", 0, 0, this); SessionFileFormat *fmt = SessionFileFormat::fileFormatFromType(fileType); OstProto::SessionContent session; if (fmt == NULL) goto _fail; progress.setAutoReset(false); progress.setAutoClose(false); progress.setMinimumDuration(0); progress.show(); setDisabled(true); progress.setEnabled(true); // to override the mainWindow disable // Fill in session ret = portsWindow->saveSession(&session, error, &progress); if (!ret) goto _user_cancel; connect(fmt, SIGNAL(status(QString)),&progress,SLOT(setLabelText(QString))); connect(fmt, SIGNAL(target(int)), &progress, SLOT(setMaximum(int))); connect(fmt, SIGNAL(progress(int)), &progress, SLOT(setValue(int))); connect(&progress, SIGNAL(canceled()), fmt, SLOT(cancel())); fmt->saveAsync(session, fileName, error); qDebug("after save async"); while (!fmt->isFinished()) qApp->processEvents(); qDebug("wait over for async operation"); ret = fmt->result(); goto _exit; _user_cancel: goto _exit; _fail: error = QString("Unsupported File Type - %1").arg(fileType); goto _exit; _exit: progress.close(); setEnabled(true); return ret; }