aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoroldmud0 <oldmud0@users.noreply.github.com>2021-12-18 20:29:55 -0600
committeroldmud0 <oldmud0@users.noreply.github.com>2021-12-18 20:29:55 -0600
commitf1107aeac51658a0525d4231b2f1f39131acbcb5 (patch)
tree02d5feabb5fe171c72b97276dd2e250d95db03e1 /src
parentb682d69e494acdbf5fc97a81109faa667ad1918f (diff)
Finish out feature
- Add periodic timer for heartbeat - Add option to settings for opting out from heartbeat/player metrics - Change base URL to permanent URL
Diffstat (limited to 'src')
-rw-r--r--src/aooptionsdialog.cpp16
-rw-r--r--src/main.cpp1
-rw-r--r--src/networkmanager.cpp9
-rw-r--r--src/text_file_functions.cpp6
4 files changed, 28 insertions, 4 deletions
diff --git a/src/aooptionsdialog.cpp b/src/aooptionsdialog.cpp
index f3ca768c..eb0a3b55 100644
--- a/src/aooptionsdialog.cpp
+++ b/src/aooptionsdialog.cpp
@@ -908,7 +908,16 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app)
ui_settings_tabs->addTab(ui_privacy_tab, tr("Privacy"));
ui_privacy_layout = new QVBoxLayout(ui_privacy_tab);
- ui_privacy_layout->setContentsMargins(0, 0, 0, 0);
+
+ ui_privacy_optout_cb = new QCheckBox(ui_privacy_tab);
+ ui_privacy_optout_cb->setText(tr("Do not include me in public player counts"));
+ ui_privacy_layout->addWidget(ui_privacy_optout_cb);
+
+ ui_privacy_separator = new QFrame(ui_privacy_tab);
+ ui_privacy_separator->setObjectName(QString::fromUtf8("line"));
+ ui_privacy_separator->setFrameShape(QFrame::HLine);
+ ui_privacy_separator->setFrameShadow(QFrame::Sunken);
+ ui_privacy_layout->addWidget(ui_privacy_separator);
ui_privacy_policy = new QTextBrowser(ui_privacy_tab);
QSizePolicy privacySizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
@@ -993,6 +1002,7 @@ void AOOptionsDialog::update_values() {
ui_blips_volume_spinbox->setValue(ao_app->get_default_blip());
ui_bliprate_spinbox->setValue(ao_app->read_blip_rate());
ui_default_showname_textbox->setText(ao_app->get_default_showname());
+ ui_privacy_optout_cb->setChecked(ao_app->get_player_count_optout());
ao_app->net_manager->request_document(MSDocumentType::PrivacyPolicy, [this](QString document) {
if (document.isEmpty())
@@ -1079,11 +1089,11 @@ void AOOptionsDialog::save_pressed()
configini->setValue("casing_can_host_cases",
ui_casing_cm_cases_textbox->text());
+ configini->setValue("player_count_optout", ui_privacy_optout_cb->isChecked());
+
if (audioChanged)
ao_app->initBASS();
- callwordsini->close();
-
// We most probably pressed "Restore defaults" at some point. Since we're saving our settings, remove the temporary file.
if (QFile::exists(ao_app->get_base_path() + "config.temp"))
QFile::remove(ao_app->get_base_path() + "config.temp");
diff --git a/src/main.cpp b/src/main.cpp
index 600f40f5..e6e977c7 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -56,6 +56,7 @@ int main(int argc, char *argv[])
main_app.construct_lobby();
main_app.net_manager->get_server_list(std::bind(&Lobby::list_servers, main_app.w_lobby));
+ main_app.net_manager->send_heartbeat();
main_app.w_lobby->show();
return main_app.exec();
}
diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp
index 14c2686a..f886c767 100644
--- a/src/networkmanager.cpp
+++ b/src/networkmanager.cpp
@@ -14,6 +14,7 @@ NetworkManager::NetworkManager(AOApplication *parent) : QObject(parent)
server_socket = new QTcpSocket(this);
http = new QNetworkAccessManager(this);
+ heartbeat_timer = new QTimer(this);
connect(server_socket, SIGNAL(readyRead()), this,
SLOT(handle_server_packet()));
@@ -24,6 +25,9 @@ NetworkManager::NetworkManager(AOApplication *parent) : QObject(parent)
ao_app->configini->value("master", "").value<QString>();
if (!master_config.isEmpty())
ms_baseurl = master_config;
+
+ connect(heartbeat_timer, &QTimer::timeout, this, &NetworkManager::send_heartbeat);
+ heartbeat_timer->start(heartbeat_interval);
}
NetworkManager::~NetworkManager() {}
@@ -69,12 +73,15 @@ void NetworkManager::ms_request_finished(QNetworkReply *reply,
reply->deleteLater();
}
-void NetworkManager::heartbeat_playing()
+void NetworkManager::send_heartbeat()
{
// Ping the server periodically to tell the MS that you've been playing
// within a 5 minute window, so that the the number of people playing within
// that time period can be counted and an accurate player count be displayed.
// What do I care about your personal information, I really don't want it.
+ if (ao_app->get_player_count_optout())
+ return;
+
QNetworkRequest req(QUrl(ms_baseurl + "/playing"));
req.setRawHeader("User-Agent", get_user_agent().toUtf8());
req.setTransferTimeout(timeout_milliseconds);
diff --git a/src/text_file_functions.cpp b/src/text_file_functions.cpp
index 1d36689f..d0bebbb1 100644
--- a/src/text_file_functions.cpp
+++ b/src/text_file_functions.cpp
@@ -1095,3 +1095,9 @@ QString AOApplication::get_default_scaling()
{
return configini->value("default_scaling", "fast").value<QString>();
}
+
+bool AOApplication::get_player_count_optout()
+{
+ return configini->value("player_count_optout", "false").value<QString>()
+ .startsWith("true");
+}