diff options
Diffstat (limited to 'desktop-widgets/usersurvey.cpp')
-rw-r--r-- | desktop-widgets/usersurvey.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/desktop-widgets/usersurvey.cpp b/desktop-widgets/usersurvey.cpp new file mode 100644 index 000000000..05da582a1 --- /dev/null +++ b/desktop-widgets/usersurvey.cpp @@ -0,0 +1,133 @@ +#include <QShortcut> +#include <QMessageBox> +#include <QSettings> + +#include "usersurvey.h" +#include "ui_usersurvey.h" +#include "version.h" +#include "subsurfacewebservices.h" +#include "updatemanager.h" + +#include "helpers.h" +#include "subsurfacesysinfo.h" + +UserSurvey::UserSurvey(QWidget *parent) : QDialog(parent), + ui(new Ui::UserSurvey) +{ + ui->setupUi(this); + ui->buttonBox->buttons().first()->setText(tr("Send")); + this->adjustSize(); + QShortcut *closeKey = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this); + connect(closeKey, SIGNAL(activated()), this, SLOT(close())); + QShortcut *quitKey = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this); + connect(quitKey, SIGNAL(activated()), parent, SLOT(close())); + + os = QString("ssrfVers=%1").arg(subsurface_version()); + os.append(QString("&prettyOsName=%1").arg(SubsurfaceSysInfo::prettyOsName())); + QString arch = SubsurfaceSysInfo::buildCpuArchitecture(); + os.append(QString("&appCpuArch=%1").arg(arch)); + if (arch == "i386") { + QString osArch = SubsurfaceSysInfo::currentCpuArchitecture(); + os.append(QString("&osCpuArch=%1").arg(osArch)); + } + os.append(QString("&uiLang=%1").arg(uiLanguage(NULL))); + os.append(QString("&uuid=%1").arg(UpdateManager::getUUID())); + ui->system->setPlainText(getVersion()); +} + +QString UserSurvey::getVersion() +{ + QString arch; + // fill in the system data + QString sysInfo = QString("Subsurface %1").arg(subsurface_version()); + sysInfo.append(tr("\nOperating system: %1").arg(SubsurfaceSysInfo::prettyOsName())); + arch = SubsurfaceSysInfo::buildCpuArchitecture(); + sysInfo.append(tr("\nCPU architecture: %1").arg(arch)); + if (arch == "i386") + sysInfo.append(tr("\nOS CPU architecture: %1").arg(SubsurfaceSysInfo::currentCpuArchitecture())); + sysInfo.append(tr("\nLanguage: %1").arg(uiLanguage(NULL))); + return sysInfo; +} + +UserSurvey::~UserSurvey() +{ + delete ui; +} + +#define ADD_OPTION(_name) values.append(ui->_name->isChecked() ? "&" #_name "=1" : "&" #_name "=0") + +void UserSurvey::on_buttonBox_accepted() +{ + // now we need to collect the data and submit it + QString values = os; + ADD_OPTION(recreational); + ADD_OPTION(tech); + ADD_OPTION(planning); + ADD_OPTION(download); + ADD_OPTION(divecomputer); + ADD_OPTION(manual); + ADD_OPTION(companion); + values.append(QString("&suggestion=%1").arg(ui->suggestions->toPlainText())); + UserSurveyServices uss(this); + connect(uss.sendSurvey(values), SIGNAL(finished()), SLOT(requestReceived())); + hide(); +} + +void UserSurvey::on_buttonBox_rejected() +{ + QMessageBox response(this); + response.setText(tr("Should we ask you later?")); + response.addButton(tr("Don't ask me again"), QMessageBox::RejectRole); + response.addButton(tr("Ask later"), QMessageBox::AcceptRole); + response.setWindowTitle(tr("Ask again?")); // Not displayed on MacOSX as described in Qt API + response.setIcon(QMessageBox::Question); + response.setWindowModality(Qt::WindowModal); + switch (response.exec()) { + case QDialog::Accepted: + // nothing to do here, we'll just ask again the next time they start + break; + case QDialog::Rejected: + QSettings s; + s.beginGroup("UserSurvey"); + s.setValue("SurveyDone", "declined"); + break; + } + hide(); +} + +void UserSurvey::requestReceived() +{ + QMessageBox msgbox; + QString msgTitle = tr("Submit user survey."); + QString msgText = "<h3>" + tr("Subsurface was unable to submit the user survey.") + "</h3>"; + + QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender()); + if (reply->error() != QNetworkReply::NoError) { + //Network Error + msgText = msgText + "<br/><b>" + tr("The following error occurred:") + "</b><br/>" + reply->errorString() + + "<br/><br/><b>" + tr("Please check your internet connection.") + "</b>"; + } else { + //No network error + QString response(reply->readAll()); + QString responseBody = response.split("\"").at(1); + + msgbox.setIcon(QMessageBox::Information); + + if (responseBody == "OK") { + msgText = tr("Survey successfully submitted."); + QSettings s; + s.beginGroup("UserSurvey"); + s.setValue("SurveyDone", "submitted"); + } else { + msgText = tr("There was an error while trying to check for updates.<br/><br/>%1").arg(responseBody); + msgbox.setIcon(QMessageBox::Warning); + } + } + + msgbox.setWindowTitle(msgTitle); + msgbox.setWindowIcon(QIcon(":/subsurface-icon")); + msgbox.setText(msgText); + msgbox.setTextFormat(Qt::RichText); + msgbox.exec(); + reply->deleteLater(); +} |