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 - - -