Chris@662
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
Chris@662
|
2
|
Chris@662
|
3 /*
|
Chris@662
|
4 Sonic Visualiser
|
Chris@662
|
5 An audio file viewer and annotation editor.
|
Chris@662
|
6 Centre for Digital Music, Queen Mary, University of London.
|
Chris@662
|
7
|
Chris@662
|
8 This program is free software; you can redistribute it and/or
|
Chris@662
|
9 modify it under the terms of the GNU General Public License as
|
Chris@662
|
10 published by the Free Software Foundation; either version 2 of the
|
Chris@662
|
11 License, or (at your option) any later version. See the file
|
Chris@662
|
12 COPYING included with this distribution for more information.
|
Chris@662
|
13 */
|
Chris@662
|
14
|
Chris@662
|
15 #include "Surveyer.h"
|
Chris@662
|
16
|
Chris@662
|
17 #include <iostream>
|
Chris@662
|
18
|
Chris@662
|
19 #include <QNetworkAccessManager>
|
Chris@662
|
20
|
Chris@662
|
21 #include <QSettings>
|
Chris@662
|
22 #include <QMessageBox>
|
Chris@662
|
23 #include <QDesktopServices>
|
Chris@662
|
24 #include <QPushButton>
|
Chris@662
|
25 #include <QUrl>
|
Chris@662
|
26
|
Chris@1538
|
27 #include "../version.h"
|
Chris@662
|
28
|
Chris@662
|
29 #include "transform/TransformFactory.h"
|
Chris@662
|
30 #include "plugin/PluginIdentifier.h"
|
Chris@662
|
31
|
Chris@662
|
32 Surveyer::Surveyer(QString hostname, QString testPath, QString surveyPath) :
|
Chris@662
|
33 m_httpFailed(false),
|
Chris@662
|
34 m_hostname(hostname),
|
Chris@662
|
35 m_testPath(testPath),
|
Chris@662
|
36 m_surveyPath(surveyPath),
|
Chris@2126
|
37 m_reply(nullptr),
|
Chris@662
|
38 m_nm(new QNetworkAccessManager)
|
Chris@662
|
39 {
|
Chris@662
|
40 QSettings settings;
|
Chris@662
|
41 settings.beginGroup("Survey");
|
Chris@662
|
42 if (!settings.contains("countdown")) {
|
Chris@662
|
43 settings.setValue("countdown", 15);
|
Chris@662
|
44 settings.endGroup();
|
Chris@662
|
45 return;
|
Chris@662
|
46 }
|
Chris@662
|
47 int countdown = settings.value("countdown").toInt();
|
Chris@662
|
48 if (countdown == 0) {
|
Chris@662
|
49 // The countdown value will now remain 0 until we have
|
Chris@662
|
50 // successfully tested for a survey and offered it to the
|
Chris@662
|
51 // user. If the survey doesn't exist any more, then we'll
|
Chris@662
|
52 // simply never present it to the user and the countdown will
|
Chris@662
|
53 // remain 0 forever. If the survey does exist, then we offer
|
Chris@662
|
54 // the user the chance to respond to it and (regardless of
|
Chris@662
|
55 // whether they want to or not) set the countdown to -1 so
|
Chris@662
|
56 // that it is never offered again.
|
Chris@662
|
57 QUrl url(QString("http://%1/%2").arg(m_hostname).arg(m_testPath));
|
Chris@665
|
58 cerr << "Surveyer: Test URL is " << url << endl;
|
Chris@662
|
59 m_reply = m_nm->get(QNetworkRequest(url));
|
Chris@662
|
60 connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),
|
Chris@662
|
61 this, SLOT(error(QNetworkReply::NetworkError)));
|
Chris@662
|
62 connect(m_reply, SIGNAL(finished()), this, SLOT(finished()));
|
Chris@662
|
63 } else if (countdown > 0) {
|
Chris@662
|
64 settings.setValue("countdown", countdown-1);
|
Chris@662
|
65 }
|
Chris@662
|
66 settings.endGroup();
|
Chris@662
|
67 }
|
Chris@662
|
68
|
Chris@662
|
69 Surveyer::~Surveyer()
|
Chris@662
|
70 {
|
Chris@662
|
71 if (m_reply) {
|
Chris@662
|
72 m_reply->abort();
|
Chris@662
|
73 m_reply->deleteLater();
|
Chris@662
|
74 }
|
Chris@662
|
75 delete m_nm;
|
Chris@662
|
76 }
|
Chris@662
|
77
|
Chris@662
|
78 void
|
Chris@662
|
79 Surveyer::error(QNetworkReply::NetworkError)
|
Chris@662
|
80 {
|
Chris@665
|
81 cerr << "Surveyer: error: " << m_reply->errorString() << endl;
|
Chris@662
|
82 m_httpFailed = true;
|
Chris@662
|
83 }
|
Chris@662
|
84
|
Chris@662
|
85 void
|
Chris@662
|
86 Surveyer::finished()
|
Chris@662
|
87 {
|
Chris@662
|
88 if (m_httpFailed) return;
|
Chris@662
|
89
|
Chris@662
|
90 QString title = "Sonic Visualiser - User Survey";
|
Chris@662
|
91 QString text = "<h3>Sonic Visualiser: Take part in our survey!</h3><p>We at Queen Mary, University of London are running a short survey for users of Sonic Visualiser. We are trying to find out how useful Sonic Visualiser is to people, and what we can do to improve it.</p><p>We do not ask for any personal information, and it should only take five minutes.</p><p>Would you like to take part?</p>";
|
Chris@662
|
92
|
Chris@662
|
93 QMessageBox mb(dynamic_cast<QWidget *>(parent()));
|
Chris@662
|
94 mb.setWindowTitle(title);
|
Chris@662
|
95 mb.setText(text);
|
Chris@662
|
96
|
Chris@662
|
97 QPushButton *yes = mb.addButton(tr("Yes! Take me to the survey"), QMessageBox::ActionRole);
|
Chris@662
|
98 mb.addButton(tr("No, thanks"), QMessageBox::RejectRole);
|
Chris@662
|
99
|
Chris@662
|
100 mb.exec();
|
Chris@662
|
101
|
Chris@662
|
102 QSettings settings;
|
Chris@662
|
103 settings.beginGroup("Survey");
|
Chris@662
|
104 settings.setValue("countdown", -1);
|
Chris@662
|
105 settings.endGroup();
|
Chris@662
|
106
|
Chris@662
|
107 if (mb.clickedButton() == yes) {
|
Chris@662
|
108 QString svarg = SV_VERSION;
|
Chris@662
|
109 QString platformarg = "unknown";
|
Chris@662
|
110 #ifdef Q_OS_WIN32
|
Chris@662
|
111 platformarg = "win32";
|
Chris@662
|
112 #else
|
Chris@662
|
113 #ifdef Q_OS_MAC
|
Chris@662
|
114 platformarg = "osx";
|
Chris@662
|
115 #else
|
Chris@662
|
116 platformarg = "posix";
|
Chris@662
|
117 #endif
|
Chris@662
|
118 #endif
|
Chris@662
|
119 QString plugsarg;
|
Chris@662
|
120 TransformFactory *tf = TransformFactory::getInstance();
|
Chris@662
|
121 if (tf) {
|
Chris@662
|
122 TransformList tl = tf->getAllTransformDescriptions();
|
Chris@662
|
123 std::set<QString> packages;
|
Chris@662
|
124 for (size_t i = 0; i < tl.size(); ++i) {
|
Chris@662
|
125 TransformId id = tl[i].identifier;
|
Chris@662
|
126 Transform t;
|
Chris@662
|
127 t.setIdentifier(id);
|
Chris@662
|
128 QString plugid = t.getPluginIdentifier();
|
Chris@662
|
129 QString type, soname, label;
|
Chris@662
|
130 PluginIdentifier::parseIdentifier(plugid, type, soname, label);
|
Chris@662
|
131 if (type == "vamp") packages.insert(soname);
|
Chris@662
|
132 }
|
Chris@662
|
133 for (std::set<QString>::const_iterator i = packages.begin();
|
Chris@662
|
134 i != packages.end(); ++i) {
|
Chris@662
|
135 if (plugsarg != "") plugsarg = plugsarg + ",";
|
Chris@662
|
136 plugsarg = plugsarg + *i;
|
Chris@662
|
137 }
|
Chris@662
|
138 }
|
Chris@662
|
139 QDesktopServices::openUrl(QUrl(QString("http://%1/%2?sv=%3&plugs=%4&platform=%5").arg(m_hostname).arg(m_surveyPath).arg(svarg).arg(plugsarg).arg(platformarg)));
|
Chris@662
|
140 }
|
Chris@662
|
141 }
|
Chris@662
|
142
|
Chris@662
|
143
|