diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2014-06-30 07:19:22 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-06-30 12:30:46 -0700 |
commit | b2f473d927bdc42129f673a0ee2f5ab65bb57f2e (patch) | |
tree | 3c76ce3863f0aa85e05e68cd1b8063c1bafdfaac | |
parent | bc1e9edd5d7da20e73735824b9c457b13ae87026 (diff) | |
download | subsurface-b2f473d927bdc42129f673a0ee2f5ab65bb57f2e.tar.gz |
User survey: actually collect and send the data to the backend
This switches the QTextEdit fields to QPlainTextEdit (I don't see a reason
why we should allow HTML here), no longer tries to have a default text but
instead adds labels for the two fields, connects the UI so th data is
collected and uses a bastardized WebServices subclass to send the data to
our backend.
Fixes #546
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | qt-ui/subsurfacewebservices.cpp | 13 | ||||
-rw-r--r-- | qt-ui/subsurfacewebservices.h | 7 | ||||
-rw-r--r-- | qt-ui/usersurvey.cpp | 69 | ||||
-rw-r--r-- | qt-ui/usersurvey.h | 7 | ||||
-rw-r--r-- | qt-ui/usersurvey.ui | 54 |
5 files changed, 122 insertions, 28 deletions
diff --git a/qt-ui/subsurfacewebservices.cpp b/qt-ui/subsurfacewebservices.cpp index 1babdaa8e..f545345d5 100644 --- a/qt-ui/subsurfacewebservices.cpp +++ b/qt-ui/subsurfacewebservices.cpp @@ -911,3 +911,16 @@ void DivelogsDeWebServices::buttonClicked(QAbstractButton *button) break; } } + +UserSurveyServices::UserSurveyServices(QWidget *parent, Qt::WindowFlags f) : WebServices(parent, f) +{ + +} + +void UserSurveyServices::sendSurvey(QString values) +{ + QNetworkRequest request; + request.setUrl(QString("http://subsurface.hohndel.org/survey?%1").arg(values)); + request.setRawHeader("Accept", "text/xml"); + reply = manager()->get(request); +} diff --git a/qt-ui/subsurfacewebservices.h b/qt-ui/subsurfacewebservices.h index b54da67c7..9c13e21df 100644 --- a/qt-ui/subsurfacewebservices.h +++ b/qt-ui/subsurfacewebservices.h @@ -97,6 +97,13 @@ private: bool uploadMode; }; +class UserSurveyServices : public WebServices { + Q_OBJECT +public: + void sendSurvey(QString values); + explicit UserSurveyServices(QWidget *parent = 0, Qt::WindowFlags f = 0); +}; + #ifdef __cplusplus extern "C" { #endif diff --git a/qt-ui/usersurvey.cpp b/qt-ui/usersurvey.cpp index 10beb94ee..f08168ed3 100644 --- a/qt-ui/usersurvey.cpp +++ b/qt-ui/usersurvey.cpp @@ -6,9 +6,11 @@ #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) { @@ -19,10 +21,17 @@ UserSurvey::UserSurvey(QWidget *parent) : QDialog(parent), connect(quitKey, SIGNAL(activated()), parent, SLOT(close())); // fill in the system data - ui->system->append(tr("Subsurface %1").arg(VERSION_STRING)); - ui->system->append(tr("Operating System: %1").arg(SubsurfaceSysInfo::prettyOsName())); - ui->system->append(tr("CPU Architecture: %1").arg(SubsurfaceSysInfo::cpuArchitecture())); - ui->system->append(tr("Language: %1").arg(uiLanguage(NULL))); + 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())); + sysInfo.append(tr("\nCPU Architecture: %1").arg(SubsurfaceSysInfo::cpuArchitecture())); + os.append(QString("&cpuArch=%1").arg(SubsurfaceSysInfo::cpuArchitecture())); + sysInfo.append(tr("\nLanguage: %1").arg(uiLanguage(NULL))); + os.append(QString("&uiLang=%1").arg(uiLanguage(NULL))); + ui->system->setPlainText(sysInfo); + manager = SubsurfaceWebServices::manager(); + connect(manager, SIGNAL(finished(QNetworkReply *)), SLOT(requestReceived(QNetworkReply *))); } UserSurvey::~UserSurvey() @@ -30,12 +39,22 @@ 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 - QSettings s; - s.beginGroup("UserSurvey"); - s.setValue("SurveyDone", "submitted"); + 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); + uss.sendSurvey(values); hide(); } @@ -60,3 +79,39 @@ void UserSurvey::on_buttonBox_rejected() } hide(); } + +void UserSurvey::requestReceived(QNetworkReply *reply) +{ + QMessageBox msgbox; + QString msgTitle = tr("Submit User Survey."); + QString msgText = tr("<h3>Subsurface was unable to submit the user survey.</h3>"); + + + if (reply->error() != QNetworkReply::NoError) { + //Network Error + msgText = msgText + tr("<br/><b>The following error occurred:</b><br/>") + reply->errorString() + + tr("<br/><br/><b>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(); +} diff --git a/qt-ui/usersurvey.h b/qt-ui/usersurvey.h index e1663c7e0..b9221852b 100644 --- a/qt-ui/usersurvey.h +++ b/qt-ui/usersurvey.h @@ -2,6 +2,8 @@ #define USERSURVEY_H #include <QDialog> +class QNetworkAccessManager; +class QNetworkReply; namespace Ui { class UserSurvey; @@ -18,8 +20,13 @@ private slots: void on_buttonBox_accepted(); void on_buttonBox_rejected(); + void requestReceived(QNetworkReply *reply); private: Ui::UserSurvey *ui; + QString os; + QString checkboxes; + QString suggestions; + QNetworkAccessManager *manager; }; #endif // USERSURVEY_H diff --git a/qt-ui/usersurvey.ui b/qt-ui/usersurvey.ui index 67d8d9870..386dee504 100644 --- a/qt-ui/usersurvey.ui +++ b/qt-ui/usersurvey.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>500</width> - <height>524</height> + <height>600</height> </rect> </property> <property name="windowTitle"> @@ -17,7 +17,7 @@ <property name="geometry"> <rect> <x>40</x> - <y>490</y> + <y>560</y> <width>451</width> <height>32</height> </rect> @@ -118,7 +118,7 @@ <string>I am downloading dives from supported dive computer</string> </property> </widget> - <widget class="QCheckBox" name="import_2"> + <widget class="QCheckBox" name="divecomputer"> <property name="geometry"> <rect> <x>10</x> @@ -144,22 +144,15 @@ <string>I am manually entering dives</string> </property> </widget> - <widget class="QTextEdit" name="suggestions"> + <widget class="QPlainTextEdit" name="suggestions"> <property name="geometry"> <rect> <x>10</x> - <y>270</y> + <y>300</y> <width>481</width> <height>101</height> </rect> </property> - <property name="html"> - <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Suggestions and missing features</p></body></html></string> - </property> </widget> <widget class="QCheckBox" name="companion"> <property name="geometry"> @@ -174,21 +167,40 @@ p, li { white-space: pre-wrap; } <string>I use the Android companion app to track dive locations</string> </property> </widget> - <widget class="QTextEdit" name="system"> + <widget class="QPlainTextEdit" name="system"> <property name="geometry"> <rect> <x>10</x> - <y>380</y> + <y>450</y> <width>481</width> <height>101</height> </rect> </property> - <property name="html"> - <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></string> + </widget> + <widget class="QLabel" name="label_3"> + <property name="geometry"> + <rect> + <x>10</x> + <y>270</y> + <width>471</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Please type suggestions (in English) in the following box</string> + </property> + </widget> + <widget class="QLabel" name="label_4"> + <property name="geometry"> + <rect> + <x>10</x> + <y>420</y> + <width>471</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>The following information about your system will also be submitted</string> </property> </widget> </widget> @@ -197,7 +209,7 @@ p, li { white-space: pre-wrap; } <tabstop>tech</tabstop> <tabstop>planning</tabstop> <tabstop>download</tabstop> - <tabstop>import_2</tabstop> + <tabstop>divecomputer</tabstop> <tabstop>manual</tabstop> <tabstop>companion</tabstop> <tabstop>suggestions</tabstop> |