summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2014-06-30 07:19:22 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-06-30 12:30:46 -0700
commitb2f473d927bdc42129f673a0ee2f5ab65bb57f2e (patch)
tree3c76ce3863f0aa85e05e68cd1b8063c1bafdfaac
parentbc1e9edd5d7da20e73735824b9c457b13ae87026 (diff)
downloadsubsurface-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.cpp13
-rw-r--r--qt-ui/subsurfacewebservices.h7
-rw-r--r--qt-ui/usersurvey.cpp69
-rw-r--r--qt-ui/usersurvey.h7
-rw-r--r--qt-ui/usersurvey.ui54
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>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Suggestions and missing features&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</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>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</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>