NOISSUE add analytics settings (enable/disable)
This commit is contained in:
parent
295c6e808a
commit
121e2fd46c
@ -513,14 +513,11 @@ void MultiMC::initAnalytics()
|
|||||||
{
|
{
|
||||||
if(BuildConfig.ANALYTICS_ID.isEmpty())
|
if(BuildConfig.ANALYTICS_ID.isEmpty())
|
||||||
{
|
{
|
||||||
qDebug() << "Analytics disabled by build.";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(!m_settings->get("Analytics").toBool())
|
|
||||||
{
|
|
||||||
qDebug() << "Analytics disabled by user.";
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto analyticsSetting = m_settings->getSetting("Analytics");
|
||||||
|
connect(analyticsSetting.get(), &Setting::SettingChanged, this, &MultiMC::analyticsSettingChanged);
|
||||||
QString clientID = m_settings->get("AnalyticsClientID").toString();
|
QString clientID = m_settings->get("AnalyticsClientID").toString();
|
||||||
if(clientID.isEmpty())
|
if(clientID.isEmpty())
|
||||||
{
|
{
|
||||||
@ -533,9 +530,15 @@ void MultiMC::initAnalytics()
|
|||||||
m_analytics->setLogLevel(GAnalytics::Debug);
|
m_analytics->setLogLevel(GAnalytics::Debug);
|
||||||
m_analytics->setAnonymizeIPs(true);
|
m_analytics->setAnonymizeIPs(true);
|
||||||
m_analytics->setNetworkAccessManager(&ENV.qnam());
|
m_analytics->setNetworkAccessManager(&ENV.qnam());
|
||||||
m_analytics->startSending();
|
|
||||||
|
if(!m_settings->get("Analytics").toBool())
|
||||||
|
{
|
||||||
|
qDebug() << "Analytics disabled by user.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_analytics->enable();
|
||||||
qDebug() << "Initialized analytics with tid" << BuildConfig.ANALYTICS_ID << "and cid" << clientID;
|
qDebug() << "Initialized analytics with tid" << BuildConfig.ANALYTICS_ID << "and cid" << clientID;
|
||||||
// TODO: load unsent messages?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiMC::shutdownAnalytics()
|
void MultiMC::shutdownAnalytics()
|
||||||
@ -546,6 +549,22 @@ void MultiMC::shutdownAnalytics()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MultiMC::analyticsSettingChanged(const Setting&, QVariant value)
|
||||||
|
{
|
||||||
|
if(!m_analytics)
|
||||||
|
return;
|
||||||
|
bool enabled = value.toBool();
|
||||||
|
if(enabled)
|
||||||
|
{
|
||||||
|
qDebug() << "Analytics enabled by user.";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug() << "Analytics disabled by user.";
|
||||||
|
}
|
||||||
|
m_analytics->enable(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
void MultiMC::initInstances()
|
void MultiMC::initInstances()
|
||||||
{
|
{
|
||||||
auto InstDirSetting = m_settings->getSetting("InstanceDir");
|
auto InstDirSetting = m_settings->getSetting("InstanceDir");
|
||||||
@ -703,9 +722,12 @@ void MultiMC::initGlobalSettings()
|
|||||||
// paste.ee API key
|
// paste.ee API key
|
||||||
m_settings->registerSetting("PasteEEAPIKey", "multimc");
|
m_settings->registerSetting("PasteEEAPIKey", "multimc");
|
||||||
|
|
||||||
// Analytics
|
if(!BuildConfig.ANALYTICS_ID.isEmpty())
|
||||||
m_settings->registerSetting("Analytics", true);
|
{
|
||||||
m_settings->registerSetting("AnalyticsClientID", QString());
|
// Analytics
|
||||||
|
m_settings->registerSetting("Analytics", true);
|
||||||
|
m_settings->registerSetting("AnalyticsClientID", QString());
|
||||||
|
}
|
||||||
|
|
||||||
// Init page provider
|
// Init page provider
|
||||||
{
|
{
|
||||||
|
@ -162,6 +162,7 @@ private slots:
|
|||||||
|
|
||||||
void controllerSucceeded();
|
void controllerSucceeded();
|
||||||
void controllerFailed(const QString & error);
|
void controllerFailed(const QString & error);
|
||||||
|
void analyticsSettingChanged(const Setting &setting, QVariant value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initLogger();
|
void initLogger();
|
||||||
|
@ -75,6 +75,11 @@ MultiMCPage::MultiMCPage(QWidget *parent) : QWidget(parent), ui(new Ui::MultiMCP
|
|||||||
{
|
{
|
||||||
ui->updateSettingsBox->setHidden(true);
|
ui->updateSettingsBox->setHidden(true);
|
||||||
}
|
}
|
||||||
|
// Analytics
|
||||||
|
if(BuildConfig.ANALYTICS_ID.isEmpty())
|
||||||
|
{
|
||||||
|
ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->analyticsTab));
|
||||||
|
}
|
||||||
connect(ui->fontSizeBox, SIGNAL(valueChanged(int)), SLOT(refreshFontPreview()));
|
connect(ui->fontSizeBox, SIGNAL(valueChanged(int)), SLOT(refreshFontPreview()));
|
||||||
connect(ui->consoleFont, SIGNAL(currentFontChanged(QFont)), SLOT(refreshFontPreview()));
|
connect(ui->consoleFont, SIGNAL(currentFontChanged(QFont)), SLOT(refreshFontPreview()));
|
||||||
}
|
}
|
||||||
@ -346,6 +351,12 @@ void MultiMCPage::applySettings()
|
|||||||
s->set("InstSortMode", "Name");
|
s->set("InstSortMode", "Name");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Analytics
|
||||||
|
if(!BuildConfig.ANALYTICS_ID.isEmpty())
|
||||||
|
{
|
||||||
|
s->set("Analytics", ui->analyticsCheck->isChecked());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void MultiMCPage::loadSettings()
|
void MultiMCPage::loadSettings()
|
||||||
{
|
{
|
||||||
@ -467,6 +478,12 @@ void MultiMCPage::loadSettings()
|
|||||||
{
|
{
|
||||||
ui->sortByNameBtn->setChecked(true);
|
ui->sortByNameBtn->setChecked(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Analytics
|
||||||
|
if(!BuildConfig.ANALYTICS_ID.isEmpty())
|
||||||
|
{
|
||||||
|
ui->analyticsCheck->setChecked(s->get("Analytics").toBool());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiMCPage::refreshFontPreview()
|
void MultiMCPage::refreshFontPreview()
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>487</width>
|
<width>458</width>
|
||||||
<height>614</height>
|
<height>614</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -31,6 +31,9 @@
|
|||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
<property name="tabShape">
|
<property name="tabShape">
|
||||||
<enum>QTabWidget::Rounded</enum>
|
<enum>QTabWidget::Rounded</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -431,7 +434,7 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="tab">
|
<widget class="QWidget" name="consoleTab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Console</string>
|
<string>Console</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
@ -566,6 +569,69 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QWidget" name="analyticsTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Analytics</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="consoleSettingsBox_2">
|
||||||
|
<property name="title">
|
||||||
|
<string>Analytics Settings</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="analyticsCheck">
|
||||||
|
<property name="text">
|
||||||
|
<string>Send anonymous usage statistics?</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string><html><head/>
|
||||||
|
<body>
|
||||||
|
<p>MultiMC sends anonymous usage statistics on every start of the application.</p><p>The following data is collected:</p>
|
||||||
|
<ul>
|
||||||
|
<li>MultiMC version.</li>
|
||||||
|
<li>Operating system name, version and architecture.</li>
|
||||||
|
<li>CPU architecture (kernel architecture on linux).</li>
|
||||||
|
<li>Size of system memory.</li>
|
||||||
|
<li>Java version, architecture and memory settings.</li>
|
||||||
|
</ul>
|
||||||
|
</body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -39,8 +39,8 @@ public:
|
|||||||
void setSendInterval(int milliseconds);
|
void setSendInterval(int milliseconds);
|
||||||
int sendInterval() const;
|
int sendInterval() const;
|
||||||
|
|
||||||
void startSending();
|
void enable(bool state = true);
|
||||||
bool isSending() const;
|
bool isEnabled();
|
||||||
|
|
||||||
/// Get or set the network access manager. If none is set, the class creates its own on the first request
|
/// Get or set the network access manager. If none is set, the class creates its own on the first request
|
||||||
void setNetworkAccessManager(QNetworkAccessManager *networkAccessManager);
|
void setNetworkAccessManager(QNetworkAccessManager *networkAccessManager);
|
||||||
@ -54,9 +54,6 @@ public slots:
|
|||||||
void startSession();
|
void startSession();
|
||||||
void endSession();
|
void endSession();
|
||||||
|
|
||||||
signals:
|
|
||||||
void isSendingChanged(bool isSending);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GAnalyticsWorker *d;
|
GAnalyticsWorker *d;
|
||||||
|
|
||||||
|
@ -80,15 +80,14 @@ int GAnalytics::sendInterval() const
|
|||||||
return (d->m_timer.interval());
|
return (d->m_timer.interval());
|
||||||
}
|
}
|
||||||
|
|
||||||
void GAnalytics::startSending()
|
bool GAnalytics::isEnabled()
|
||||||
{
|
{
|
||||||
if (!isSending())
|
return d->m_isEnabled;
|
||||||
d->postMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GAnalytics::isSending() const
|
void GAnalytics::enable(bool state)
|
||||||
{
|
{
|
||||||
return d->m_isSending;
|
d->enable(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GAnalytics::setNetworkAccessManager(QNetworkAccessManager *networkAccessManager)
|
void GAnalytics::setNetworkAccessManager(QNetworkAccessManager *networkAccessManager)
|
||||||
|
@ -23,10 +23,31 @@ GAnalyticsWorker::GAnalyticsWorker(GAnalytics *parent)
|
|||||||
m_language = QLocale::system().name().toLower().replace("_", "-");
|
m_language = QLocale::system().name().toLower().replace("_", "-");
|
||||||
m_screenResolution = getScreenResolution();
|
m_screenResolution = getScreenResolution();
|
||||||
|
|
||||||
m_timer.start(30000);
|
m_timer.setInterval(m_timerInterval);
|
||||||
connect(&m_timer, &QTimer::timeout, this, &GAnalyticsWorker::postMessage);
|
connect(&m_timer, &QTimer::timeout, this, &GAnalyticsWorker::postMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GAnalyticsWorker::enable(bool state)
|
||||||
|
{
|
||||||
|
// state change to the same is not valid.
|
||||||
|
if(m_isEnabled == state)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_isEnabled = state;
|
||||||
|
if(m_isEnabled)
|
||||||
|
{
|
||||||
|
// enable -> start doing things :)
|
||||||
|
m_timer.start();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// disable -> stop the timer
|
||||||
|
m_timer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GAnalyticsWorker::logMessage(GAnalytics::LogLevel level, const QString &message)
|
void GAnalyticsWorker::logMessage(GAnalytics::LogLevel level, const QString &message)
|
||||||
{
|
{
|
||||||
if (m_logLevel > level)
|
if (m_logLevel > level)
|
||||||
@ -145,30 +166,6 @@ void GAnalyticsWorker::enqueQueryWithCurrentTime(const QUrlQuery &query)
|
|||||||
m_messageQueue.enqueue(buffer);
|
m_messageQueue.enqueue(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Change status of class. Emit signal that status was changed.
|
|
||||||
*/
|
|
||||||
void GAnalyticsWorker::setIsSending(bool doSend)
|
|
||||||
{
|
|
||||||
if (doSend)
|
|
||||||
{
|
|
||||||
m_timer.stop();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_timer.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool changed = (m_isSending != doSend);
|
|
||||||
|
|
||||||
m_isSending = doSend;
|
|
||||||
|
|
||||||
if (changed)
|
|
||||||
{
|
|
||||||
emit q->isSendingChanged(m_isSending);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function is called by a timer interval.
|
* This function is called by a timer interval.
|
||||||
* The function tries to send a messages from the queue.
|
* The function tries to send a messages from the queue.
|
||||||
@ -183,12 +180,14 @@ void GAnalyticsWorker::postMessage()
|
|||||||
{
|
{
|
||||||
if (m_messageQueue.isEmpty())
|
if (m_messageQueue.isEmpty())
|
||||||
{
|
{
|
||||||
setIsSending(false);
|
// queue empty -> try sending later
|
||||||
|
m_timer.start();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
setIsSending(true);
|
// queue has messages -> stop timer and start sending
|
||||||
|
m_timer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString connection = "close";
|
QString connection = "close";
|
||||||
@ -243,8 +242,8 @@ void GAnalyticsWorker::postMessageFinished()
|
|||||||
{
|
{
|
||||||
logMessage(GAnalytics::Error, QString("Error posting message: %s").arg(reply->errorString()));
|
logMessage(GAnalytics::Error, QString("Error posting message: %s").arg(reply->errorString()));
|
||||||
|
|
||||||
// An error ocurred.
|
// An error ocurred. Try sending later.
|
||||||
setIsSending(false);
|
m_timer.start();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -38,7 +38,8 @@ public:
|
|||||||
QString m_viewportSize;
|
QString m_viewportSize;
|
||||||
|
|
||||||
bool m_anonymizeIPs = false;
|
bool m_anonymizeIPs = false;
|
||||||
bool m_isSending = false;
|
bool m_isEnabled = false;
|
||||||
|
int m_timerInterval = 30000;
|
||||||
|
|
||||||
const static int fourHours = 4 * 60 * 60 * 1000;
|
const static int fourHours = 4 * 60 * 60 * 1000;
|
||||||
const static QLatin1String dateTimeFormat;
|
const static QLatin1String dateTimeFormat;
|
||||||
@ -54,6 +55,7 @@ public:
|
|||||||
|
|
||||||
void enqueQueryWithCurrentTime(const QUrlQuery &query);
|
void enqueQueryWithCurrentTime(const QUrlQuery &query);
|
||||||
void setIsSending(bool doSend);
|
void setIsSending(bool doSend);
|
||||||
|
void enable(bool state);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void postMessage();
|
void postMessage();
|
||||||
|
Loading…
Reference in New Issue
Block a user