mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 21:20:19 +00:00
0dd40b7a51
The access manager is only one, while we can make requests from different parts of the application, so relying on the manager finished() signal to see if something was done or not was a not very good move. The QNetworkReply is created when a get() is invocked on the AccessManager and that's unique. connect it's finished() signal instead. bonus: code cleanup. Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
125 lines
3.9 KiB
C++
125 lines
3.9 KiB
C++
#include <QShortcut>
|
|
#include <QMessageBox>
|
|
#include <QDebug>
|
|
#include <QSettings>
|
|
|
|
#include "usersurvey.h"
|
|
#include "ui_usersurvey.h"
|
|
#include "ssrf-version.h"
|
|
#include "subsurfacewebservices.h"
|
|
|
|
#include "helpers.h"
|
|
#include "subsurfacesysinfo.h"
|
|
|
|
UserSurvey::UserSurvey(QWidget *parent) : QDialog(parent),
|
|
ui(new Ui::UserSurvey)
|
|
{
|
|
QString osArch, arch;
|
|
ui->setupUi(this);
|
|
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()));
|
|
|
|
// fill in the system data
|
|
QString sysInfo = QString("Subsurface %1").arg(VERSION_STRING);
|
|
os = QString("ssrfVers=%1").arg(VERSION_STRING);
|
|
sysInfo.append(tr("\nOperating System: %1").arg(SubsurfaceSysInfo::prettyOsName()));
|
|
os.append(QString("&prettyOsName=%1").arg(SubsurfaceSysInfo::prettyOsName()));
|
|
arch = SubsurfaceSysInfo::cpuArchitecture();
|
|
sysInfo.append(tr("\nCPU Architecture: %1").arg(arch));
|
|
os.append(QString("&appCpuArch=%1").arg(arch));
|
|
if (arch == "i386") {
|
|
osArch = SubsurfaceSysInfo::osArch();
|
|
if (!osArch.isEmpty()) {
|
|
sysInfo.append(tr("\nOS CPU Architecture: %1").arg(osArch));
|
|
os.append(QString("&osCpuArch=%1").arg(osArch));
|
|
}
|
|
}
|
|
sysInfo.append(tr("\nLanguage: %1").arg(uiLanguage(NULL)));
|
|
os.append(QString("&uiLang=%1").arg(uiLanguage(NULL)));
|
|
ui->system->setPlainText(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.setText(msgText);
|
|
msgbox.setTextFormat(Qt::RichText);
|
|
msgbox.exec();
|
|
reply->deleteLater();
|
|
}
|