diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt
index 25fa377e7..198b48598 100644
--- a/companion/src/CMakeLists.txt
+++ b/companion/src/CMakeLists.txt
@@ -164,6 +164,7 @@ set(companion_SRCS
qcustomplot.cpp
wizarddata.cpp
wizarddialog.cpp
+ googleanalytics.cpp
)
set(companion_MOC_HDRS
@@ -190,6 +191,7 @@ set(companion_MOC_HDRS
qautocombobox.h
helpers.h
wizarddialog.h
+ googleanalytics.h
)
set(companion_UIS
diff --git a/companion/src/appdata.cpp b/companion/src/appdata.cpp
index ebd0e8ef5..3d3453e73 100644
--- a/companion/src/appdata.cpp
+++ b/companion/src/appdata.cpp
@@ -480,7 +480,6 @@ QString AppData::armMcu() { return _armMcu; }
QString AppData::avrArguments() { return _avrArguments; }
QString AppData::avrPort() { return _avrPort; }
QString AppData::avrdudeLocation() { return _avrdudeLocation; }
-QString AppData::cpuId() { return _cpuId; }
QString AppData::dfuArguments() { return _dfuArguments; }
QString AppData::dfuLocation() { return _dfuLocation; }
QString AppData::locale() { return _locale; }
@@ -531,7 +530,6 @@ void AppData::armMcu (const QString x) { store(x, _armMcu,
void AppData::avrArguments (const QString x) { store(x, _avrArguments, "avr_arguments" );}
void AppData::avrPort (const QString x) { store(x, _avrPort, "avr_port" );}
void AppData::avrdudeLocation (const QString x) { store(x, _avrdudeLocation, "avrdudeLocation" );}
-void AppData::cpuId (const QString x) { store(x, _cpuId, "cpu_id" );}
void AppData::dfuArguments (const QString x) { store(x, _dfuArguments, "dfu_arguments" );}
void AppData::dfuLocation (const QString x) { store(x, _dfuLocation, "dfu_location" );}
void AppData::locale (const QString x) { store(x, _locale, "locale" );}
@@ -655,7 +653,6 @@ AppData::AppData()
getset( _avrArguments, "avr_arguments" ,"" );
getset( _avrPort, "avr_port" ,"" );
getset( _avrdudeLocation, "avrdudeLocation" ,"" );
- getset( _cpuId, "cpu_id" ,"" );
getset( _dfuArguments, "dfu_arguments" ,"-a 0" );
getset( _dfuLocation, "dfu_location" ,"" );
getset( _locale, "locale" ,"" );
diff --git a/companion/src/appdata.h b/companion/src/appdata.h
index 8e737f348..0633ebb92 100644
--- a/companion/src/appdata.h
+++ b/companion/src/appdata.h
@@ -206,7 +206,6 @@ class AppData: protected CompStoreObj
QString _avrArguments;
QString _avrPort;
QString _avrdudeLocation;
- QString _cpuId;
QString _dfuArguments;
QString _dfuLocation;
QString _locale;
@@ -258,7 +257,6 @@ class AppData: protected CompStoreObj
QString avrArguments();
QString avrPort();
QString avrdudeLocation();
- QString cpuId();
QString dfuArguments();
QString dfuLocation();
QString lastFw();
@@ -310,7 +308,6 @@ class AppData: protected CompStoreObj
void avrArguments (const QString);
void avrPort (const QString);
void avrdudeLocation (const QString);
- void cpuId (const QString);
void dfuArguments (const QString);
void dfuLocation (const QString);
void lastFw (const QString);
diff --git a/companion/src/apppreferencesdialog.cpp b/companion/src/apppreferencesdialog.cpp
index 1e8ddd91a..dfbdefbac 100644
--- a/companion/src/apppreferencesdialog.cpp
+++ b/companion/src/apppreferencesdialog.cpp
@@ -79,7 +79,6 @@ void AppPreferencesDialog::writeValues()
g.profile[g.id()].name(ui->profileNameLE->text());
// If a new fw type has been choosen, several things need to reset
- g.cpuId( ui->CPU_ID_LE->text() );
current_firmware_variant = getFirmwareVariant();
if (g.profile[g.id()].fwType() != current_firmware_variant.id) {
g.profile[g.id()].fwName("");
@@ -186,8 +185,6 @@ void AppPreferencesDialog::initSettings()
}
ui->lblGeneralSettings->setText(hwSettings);
-
- ui->CPU_ID_LE->setText(g.cpuId());
FirmwareInterface * current_firmware = GetCurrentFirmware();
foreach(FirmwareInterface * firmware, firmwares) {
@@ -470,14 +467,6 @@ void AppPreferencesDialog::firmwareChanged()
QString stamp;
stamp.append(variant.firmware->getStampUrl());
QString url = variant.getFirmwareUrl();
- // B-Plan
- if (false) {
- ui->CPU_ID_LE->show();
- ui->CPU_ID_LABEL->show();
- } else {
- ui->CPU_ID_LE->hide();
- ui->CPU_ID_LABEL->hide();
- }
}
void AppPreferencesDialog::populateFirmwareOptions(const FirmwareInterface * firmware)
diff --git a/companion/src/apppreferencesdialog.ui b/companion/src/apppreferencesdialog.ui
index beff86b4e..d1211ab36 100644
--- a/companion/src/apppreferencesdialog.ui
+++ b/companion/src/apppreferencesdialog.ui
@@ -162,9 +162,6 @@
- -
-
-
-
diff --git a/companion/src/googleanalytics.cpp b/companion/src/googleanalytics.cpp
new file mode 100755
index 000000000..516379ddd
--- /dev/null
+++ b/companion/src/googleanalytics.cpp
@@ -0,0 +1,72 @@
+#include "googleanalytics.h"
+#include
+
+#define TRACKING_ID "UA-40098569-1"
+
+GoogleAnalytics ga;
+
+GoogleAnalytics::GoogleAnalytics():
+ userId(qrand()),
+ networkManager(new QNetworkAccessManager(this))
+{
+}
+
+GoogleAnalytics::~GoogleAnalytics()
+{
+ delete networkManager;
+}
+
+void GoogleAnalytics::sendPageView(QString page)
+{
+ // create request and set URL of receiver
+ QNetworkRequest request;
+ QUrl host("http://www.google-analytics.com/collect");
+ request.setUrl(host);
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
+
+ // setup parameters of request
+ QString requestParams;
+ requestParams += "v=1"; // version of protocol
+ requestParams += "&t=pageview"; // type of request
+ requestParams += "&tid=" TRACKING_ID; // Google Analytics account
+ requestParams += "&cid=" + QString::number(userId); // unique user identifier
+ requestParams += "&dp=" + page; // name of page (or app name)
+ requestParams += "&ul=" + QLocale::system().name(); // language
+
+ // send request via post method
+ networkManager->post(request, requestParams.toStdString().c_str());
+}
+
+void GoogleAnalytics::sendEvent(QString category, QString action, QString label)
+{
+ // create request and set URL of receiver
+ QNetworkRequest request;
+ QUrl host("http://www.google-analytics.com/collect");
+ request.setUrl(host);
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
+
+ // setup parameters of request
+ QString requestParams;
+ requestParams += "v=1"; // version of protocol
+ requestParams += "&t=event"; // type of request
+ requestParams += "&ec=" + category;
+ requestParams += "&ea=" + action;
+ requestParams += "&el=" + label;
+ requestParams += "&tid=" TRACKING_ID; // Google Analytics account
+ requestParams += "&cid=" + QString::number(userId); // unique user identifier
+ requestParams += "&dt=Companion"; // name of page (or app name)
+ requestParams += "&ul=" + QLocale::system().name(); // language
+
+ // send request via post method
+ networkManager->post(request, requestParams.toStdString().c_str());
+}
+
+void GoogleAnalytics::slot_receive(QNetworkReply * reply)
+{
+ // output information about reply
+ qDebug() << "RequestUrl:" << reply->request().url();
+ qDebug() << "Status:" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+ qDebug() << "Error:"<< reply->error();
+ QByteArray bytes = reply->readAll();
+ qDebug() << "Contents" << QString::fromUtf8(bytes.data(), bytes.size());
+}
diff --git a/companion/src/googleanalytics.h b/companion/src/googleanalytics.h
new file mode 100755
index 000000000..80eafe22e
--- /dev/null
+++ b/companion/src/googleanalytics.h
@@ -0,0 +1,21 @@
+#include
+
+class GoogleAnalytics: public QObject
+{
+ Q_OBJECT
+
+ public:
+ GoogleAnalytics();
+ ~GoogleAnalytics();
+ void sendPageView(QString page);
+ void sendEvent(QString category, QString action, QString label);
+
+ protected slots:
+ void slot_receive(QNetworkReply * reply);
+
+ protected:
+ int userId;
+ QNetworkAccessManager * networkManager;
+};
+
+extern GoogleAnalytics ga;
diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp
index 1e5fbf5e2..ba7a6f46d 100644
--- a/companion/src/mainwindow.cpp
+++ b/companion/src/mainwindow.cpp
@@ -64,6 +64,7 @@
#include "helpers.h"
#include "appdata.h"
#include "taranisnotfound.h"
+#include "googleanalytics.h"
#include "firmwares/opentx/opentxinterface.h" // TODO get rid of this include
#define DONATE_STR "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QUZ48K4SEXDP2"
@@ -162,6 +163,8 @@ MainWindow::MainWindow():
if (printing) {
QTimer::singleShot(0, this, SLOT(autoClose()));
}
+
+ ga.sendPageView("Companion");
}
void MainWindow::displayWarnings()
@@ -319,22 +322,13 @@ void MainWindow::updateDownloaded()
void MainWindow::downloadLatestFW(FirmwareVariant & firmware)
{
- QString url, ext, cpuid;
+ QString url, ext;
url = firmware.getFirmwareUrl();
- cpuid = g.cpuId();
ext = url.mid(url.lastIndexOf("."));
- QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), g.flashDir() + "/" + firmware.id + ext);
- if (!fileName.isEmpty()) {
+ QString filename = QFileDialog::getSaveFileName(this, tr("Save As"), g.flashDir() + "/" + firmware.id + ext);
+ if (!filename.isEmpty()) {
needRename = true;
- g.profile[g.id()].fwName(fileName);
- if (!cpuid.isEmpty()) {
- url.append("&cpuid=");
- url.append(cpuid);
- }
- g.flashDir(QFileInfo(fileName).dir().absolutePath());
- downloadDialog * dd = new downloadDialog(this, url, fileName);
- connect(dd, SIGNAL(accepted()), this, SLOT(firmwareDownloadAccepted()));
- dd->exec();
+ startFirmwareDownload(url, filename);
}
}
@@ -407,9 +401,7 @@ void MainWindow::checkForFirmwareUpdateFinished(QNetworkReply * reply)
{
bool download = false;
bool ignore = false;
- QString cpuid;
- cpuid = g.cpuId();
QByteArray qba = reply->readAll();
long version = 0;
@@ -510,20 +502,9 @@ void MainWindow::checkForFirmwareUpdateFinished(QNetworkReply * reply)
else if (download == true) {
QString url = GetFirmwareVariant(current_firmware_variant.id).getFirmwareUrl();
QString ext = url.mid(url.lastIndexOf("."));
- needRename=false;
- QString fileName;
- fileName = QFileDialog::getSaveFileName(this, tr("Save As"), g.flashDir() + "/" + current_firmware_variant.id + ext);
- if (!fileName.isEmpty()) {
- if (!cpuid.isEmpty()) {
- url.append("&cpuid=");
- url.append(cpuid);
- }
- g.profile[g.id()].fwName(fileName);
- g.flashDir(QFileInfo(fileName).dir().absolutePath());
- downloadDialog * dd = new downloadDialog(this, url, fileName);
- connect(dd, SIGNAL(accepted()), this, SLOT(firmwareDownloadAccepted()));
- dd->exec();
- }
+ needRename = false;
+ QString filename = QFileDialog::getSaveFileName(this, tr("Save As"), g.flashDir() + "/" + current_firmware_variant.id + ext);
+ startFirmwareDownload(url, filename);
}
}
else {
@@ -534,6 +515,18 @@ void MainWindow::checkForFirmwareUpdateFinished(QNetworkReply * reply)
checkForUpdates();
}
+void MainWindow::startFirmwareDownload(QString url, QString filename)
+{
+ if (!filename.isEmpty()) {
+ g.profile[g.id()].fwName(filename);
+ g.flashDir(QFileInfo(filename).dir().absolutePath());
+ downloadDialog * dd = new downloadDialog(this, url, filename);
+ connect(dd, SIGNAL(accepted()), this, SLOT(firmwareDownloadAccepted()));
+ dd->exec();
+ ga.sendEvent("Firmwares", "Download", url);
+ }
+}
+
void MainWindow::closeEvent(QCloseEvent *event)
{
g.mainWinGeo(saveGeometry());
diff --git a/companion/src/mainwindow.h b/companion/src/mainwindow.h
index c3f538d0f..46040e995 100644
--- a/companion/src/mainwindow.h
+++ b/companion/src/mainwindow.h
@@ -76,11 +76,11 @@ class MainWindow : public QMainWindow
MainWindow();
protected:
+ void startFirmwareDownload(QString url, QString filename);
void closeEvent(QCloseEvent *event);
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
-
public slots:
void downloadLatestFW(FirmwareVariant & firmware);
diff --git a/companion/src/preferencesdialog.ui b/companion/src/preferencesdialog.ui
index d432c66bb..7fa210b48 100644
--- a/companion/src/preferencesdialog.ui
+++ b/companion/src/preferencesdialog.ui
@@ -896,9 +896,6 @@ May be different from firmware language
-
- -
-
-
-