From 5c7f21c0a721fe32d21f7e02e85c644b964b1b37 Mon Sep 17 00:00:00 2001 From: Christian Kandeler <christian.kandeler@nokia.com> Date: Wed, 13 Oct 2010 11:04:24 +0200 Subject: [PATCH] Maemo: Fix device environment reader's error reporting. The error() signal was not connected anywhere. Also, there was no way to interrupt a failing operation. Reviewed-by: kh1 --- .../qt-maemo/maemodeviceenvreader.cpp | 29 +++++++++++----- .../qt-maemo/maemodeviceenvreader.h | 3 ++ .../qt-maemo/maemorunconfigurationwidget.cpp | 34 ++++++++++++++++--- .../qt-maemo/maemorunconfigurationwidget.h | 2 ++ 4 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp index eab38d78f58..9275ec81d3f 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp @@ -84,8 +84,9 @@ void MaemoDeviceEnvReader::start() void MaemoDeviceEnvReader::stop() { m_stop = true; - disconnect(m_connection.data(), 0, this, 0); + if (m_connection) + disconnect(m_connection.data(), 0, this, 0); if (m_remoteProcess) { disconnect(m_remoteProcess.data()); m_remoteProcess->closeChannel(); @@ -109,6 +110,7 @@ void MaemoDeviceEnvReader::executeRemoteCall() SLOT(remoteErrorOutput(QByteArray))); m_remoteOutput.clear(); + m_remoteErrorOutput.clear(); m_remoteProcess->start(); } @@ -116,7 +118,7 @@ void MaemoDeviceEnvReader::handleConnectionFailure() { emit error(tr("Could not connect to host: %1") .arg(m_connection->errorString())); - emit finished(); + setFinished(); } void MaemoDeviceEnvReader::handleCurrentDeviceConfigChanged() @@ -124,7 +126,7 @@ void MaemoDeviceEnvReader::handleCurrentDeviceConfigChanged() m_devConfig = m_runConfig->deviceConfig(); m_env.clear(); - emit finished(); + setFinished(); } void MaemoDeviceEnvReader::remoteProcessFinished(int exitCode) @@ -143,10 +145,15 @@ void MaemoDeviceEnvReader::remoteProcessFinished(int exitCode) QString::SkipEmptyParts)); } } else { - emit error(tr("Error running remote process: %1") - .arg(m_remoteProcess->errorString())); + QString errorMsg = tr("Error running remote process: %1") + .arg(m_remoteProcess->errorString()); + if (!m_remoteErrorOutput.isEmpty()) { + errorMsg += tr("\nRemote stderr was: '%1'") + .arg(QString::fromUtf8(m_remoteErrorOutput)); + } + emit error(errorMsg); } - emit finished(); + setFinished(); } void MaemoDeviceEnvReader::remoteOutput(const QByteArray &data) @@ -156,8 +163,14 @@ void MaemoDeviceEnvReader::remoteOutput(const QByteArray &data) void MaemoDeviceEnvReader::remoteErrorOutput(const QByteArray &data) { - emit error(data); + m_remoteErrorOutput += data; +} + +void MaemoDeviceEnvReader::setFinished() +{ + stop(); + emit finished(); } - } // Internal +} // Internal } // Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h index e5ad89e4635..d31c6b0427c 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h @@ -77,8 +77,11 @@ private slots: void remoteErrorOutput(const QByteArray &data); private: + void setFinished(); + bool m_stop; QString m_remoteOutput; + QByteArray m_remoteErrorOutput; Utils::Environment m_env; MaemoDeviceConfig m_devConfig; MaemoRunConfiguration *m_runConfig; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp index ddc20d8ce50..7abb2e4473a 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp @@ -51,6 +51,7 @@ #include <qt4projectmanager/qt4target.h> #include <utils/detailswidget.h> +#include <QtCore/QCoreApplication> #include <QtGui/QComboBox> #include <QtGui/QFileDialog> #include <QtGui/QFormLayout> @@ -59,6 +60,7 @@ #include <QtGui/QHeaderView> #include <QtGui/QLabel> #include <QtGui/QLineEdit> +#include <QtGui/QMessageBox> #include <QtGui/QPushButton> #include <QtGui/QRadioButton> #include <QtGui/QTableView> @@ -66,6 +68,11 @@ namespace Qt4ProjectManager { namespace Internal { +namespace { +const QString FetchEnvButtonText + = QCoreApplication::translate("Qt4ProjectManager::Internal::MaemoRunConfigurationWidget", + "Fetch Device Environment"); +} // anonymous namespace MaemoRunConfigurationWidget::MaemoRunConfigurationWidget( MaemoRunConfiguration *runConfiguration, QWidget *parent) @@ -246,7 +253,7 @@ void MaemoRunConfigurationWidget::addEnvironmentWidgets(QVBoxLayout *mainLayout) m_baseEnvironmentComboBox->setCurrentIndex(m_runConfiguration->baseEnvironmentBase()); baseEnvironmentLayout->addWidget(m_baseEnvironmentComboBox); - m_fetchEnv = new QPushButton(tr("Fetch Device Environment")); + m_fetchEnv = new QPushButton(FetchEnvButtonText); baseEnvironmentLayout->addWidget(m_fetchEnv); baseEnvironmentLayout->addStretch(10); @@ -267,8 +274,10 @@ void MaemoRunConfigurationWidget::addEnvironmentWidgets(QVBoxLayout *mainLayout) connect(m_runConfiguration, SIGNAL(userEnvironmentChangesChanged(QList<Utils::EnvironmentItem>)), this, SLOT(userEnvironmentChangesChanged(QList<Utils::EnvironmentItem>))); - connect(m_fetchEnv, SIGNAL(pressed()), this, SLOT(fetchEnvironment())); + connect(m_fetchEnv, SIGNAL(clicked()), this, SLOT(fetchEnvironment())); connect(m_deviceEnvReader, SIGNAL(finished()), this, SLOT(fetchEnvironmentFinished())); + connect(m_deviceEnvReader, SIGNAL(error(QString)), this, + SLOT(fetchEnvironmentError(QString))); } void MaemoRunConfigurationWidget::argumentsEdited(const QString &text) @@ -387,16 +396,33 @@ void MaemoRunConfigurationWidget::handleDebuggingTypeChanged(bool useGdb) void MaemoRunConfigurationWidget::fetchEnvironment() { + disconnect(m_fetchEnv, SIGNAL(clicked()), this, SLOT(fetchEnvironment())); + connect(m_fetchEnv, SIGNAL(clicked()), this, SLOT(stopFetchEnvironment())); + m_fetchEnv->setText(tr("Cancel Fetch Operation")); m_deviceEnvReader->start(); - m_fetchEnv->setEnabled(false); +} + +void MaemoRunConfigurationWidget::stopFetchEnvironment() +{ + m_deviceEnvReader->stop(); + fetchEnvironmentFinished(); } void MaemoRunConfigurationWidget::fetchEnvironmentFinished() { - m_fetchEnv->setEnabled(true); + disconnect(m_fetchEnv, SIGNAL(clicked()), this, + SLOT(stopFetchEnvironment())); + connect(m_fetchEnv, SIGNAL(clicked()), this, SLOT(fetchEnvironment())); + m_fetchEnv->setText(FetchEnvButtonText); m_runConfiguration->setSystemEnvironment(m_deviceEnvReader->deviceEnvironment()); } +void MaemoRunConfigurationWidget::fetchEnvironmentError(const QString &error) +{ + QMessageBox::warning(this, tr("Device error"), + tr("Fetching environment failed: %1").arg(error)); +} + void MaemoRunConfigurationWidget::userChangesEdited() { m_ignoreChange = true; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h index be686ac0000..e97c10712e8 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h @@ -85,6 +85,8 @@ private slots: void handleDebuggingTypeChanged(bool useGdb); void fetchEnvironment(); void fetchEnvironmentFinished(); + void fetchEnvironmentError(const QString &error); + void stopFetchEnvironment(); void userChangesEdited(); void baseEnvironmentSelected(int index); void baseEnvironmentChanged(); -- GitLab