File indexing completed on 2024-05-19 04:01:20
0001 /* 0002 SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: MIT 0005 */ 0006 0007 #include "orwell.h" 0008 #include "ui_orwell.h" 0009 0010 #include <KUserFeedback/FeedbackConfigDialog> 0011 #include <KUserFeedback/NotificationPopup> 0012 #include <KUserFeedback/StyleInfoSource> 0013 #include <KUserFeedback/ApplicationVersionSource> 0014 #include <KUserFeedback/CompilerInfoSource> 0015 #include <KUserFeedback/CpuInfoSource> 0016 #include <KUserFeedback/LocaleInfoSource> 0017 #include <KUserFeedback/OpenGLInfoSource> 0018 #include <KUserFeedback/PlatformInfoSource> 0019 #include <KUserFeedback/PropertyRatioSource> 0020 #include <KUserFeedback/QPAInfoSource> 0021 #include <KUserFeedback/QtVersionSource> 0022 #include <KUserFeedback/ScreenInfoSource> 0023 #include <KUserFeedback/StartCountSource> 0024 #include <KUserFeedback/SurveyInfo> 0025 #include <KUserFeedback/UsageTimeSource> 0026 0027 #include <QApplication> 0028 #include <QDesktopServices> 0029 #include <QSettings> 0030 0031 static std::unique_ptr<KUserFeedback::Provider> provider; // TODO make this nicer 0032 0033 Orwell::Orwell(QWidget* parent) : 0034 QMainWindow(parent), 0035 ui(new Ui::Orwell) 0036 { 0037 ui->setupUi(this); 0038 loadStats(); 0039 0040 connect(ui->version, &QLineEdit::textChanged, this, [this]() { 0041 QCoreApplication::setApplicationVersion(ui->version->text()); 0042 }); 0043 0044 connect(ui->submitButton, &QPushButton::clicked, provider.get(), &KUserFeedback::Provider::submit); 0045 connect(ui->overrideButton, &QPushButton::clicked, this, [this] (){ 0046 writeStats(); 0047 QMetaObject::invokeMethod(provider.get(), "load"); 0048 loadStats(); 0049 }); 0050 0051 connect(ui->surveyInterval, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, [](int value) { 0052 provider->setSurveyInterval(value); 0053 }); 0054 0055 ui->actionContribute->setVisible(provider->isEnabled()); 0056 connect(ui->actionContribute, &QAction::triggered, this, [this]() { 0057 KUserFeedback::FeedbackConfigDialog dlg(this); 0058 dlg.setFeedbackProvider(provider.get()); 0059 dlg.exec(); 0060 }); 0061 0062 connect(ui->actionQuit, &QAction::triggered, qApp, &QCoreApplication::quit); 0063 0064 auto propertyMonitorSource = new KUserFeedback::PropertyRatioSource(ui->dial, "value", QStringLiteral("dialRatio")); 0065 propertyMonitorSource->setDescription(QStringLiteral("The dial position.")); 0066 propertyMonitorSource->addValueMapping(0, QStringLiteral("off")); 0067 propertyMonitorSource->addValueMapping(11, QStringLiteral("max")); 0068 propertyMonitorSource->setTelemetryMode(KUserFeedback::Provider::DetailedUsageStatistics); 0069 provider->addDataSource(propertyMonitorSource); 0070 auto notifyPopup = new KUserFeedback::NotificationPopup(this); 0071 notifyPopup->setFeedbackProvider(provider.get()); 0072 } 0073 0074 Orwell::~Orwell() = default; 0075 0076 void Orwell::loadStats() 0077 { 0078 ui->version->setText(QCoreApplication::applicationVersion()); 0079 0080 QSettings settings(QStringLiteral("KDE"), QStringLiteral("UserFeedback.org.kde.orwell")); 0081 ui->startCount->setValue(settings.value(QStringLiteral("UserFeedback/ApplicationStartCount")).toInt()); 0082 ui->runtime->setValue(settings.value(QStringLiteral("UserFeedback/ApplicationTime")).toInt()); 0083 ui->surveys->setText(settings.value(QStringLiteral("UserFeedback/CompletedSurveys")).toStringList().join(QStringLiteral(", "))); 0084 ui->surveyInterval->setValue(provider->surveyInterval()); 0085 } 0086 0087 void Orwell::writeStats() 0088 { 0089 QSettings settings(QStringLiteral("KDE"), QStringLiteral("UserFeedback.org.kde.orwell")); 0090 settings.setValue(QStringLiteral("UserFeedback/ApplicationStartCount"), ui->startCount->value()); 0091 settings.setValue(QStringLiteral("UserFeedback/ApplicationTime"), ui->runtime->value()); 0092 settings.setValue(QStringLiteral("UserFeedback/CompletedSurveys"), ui->surveys->text().split(QStringLiteral(", "))); 0093 } 0094 0095 0096 int main(int argc, char** argv) 0097 { 0098 QCoreApplication::setApplicationName(QStringLiteral("orwell")); 0099 QCoreApplication::setOrganizationName(QStringLiteral("KDE")); 0100 QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org")); 0101 QCoreApplication::setApplicationVersion(QStringLiteral("1984")); 0102 0103 QApplication app(argc, argv); 0104 0105 provider.reset(new KUserFeedback::Provider); 0106 provider->setFeedbackServer(QUrl(QStringLiteral("https://feedback.volkerkrause.eu"))); 0107 provider->setSubmissionInterval(1); 0108 provider->setApplicationStartsUntilEncouragement(5); 0109 provider->setEncouragementDelay(10); 0110 provider->addDataSource(new KUserFeedback::ApplicationVersionSource); 0111 provider->addDataSource(new KUserFeedback::CompilerInfoSource); 0112 provider->addDataSource(new KUserFeedback::CpuInfoSource); 0113 provider->addDataSource(new KUserFeedback::LocaleInfoSource); 0114 provider->addDataSource(new KUserFeedback::OpenGLInfoSource); 0115 provider->addDataSource(new KUserFeedback::PlatformInfoSource); 0116 provider->addDataSource(new KUserFeedback::QPAInfoSource); 0117 provider->addDataSource(new KUserFeedback::QtVersionSource); 0118 provider->addDataSource(new KUserFeedback::ScreenInfoSource); 0119 provider->addDataSource(new KUserFeedback::StartCountSource); 0120 provider->addDataSource(new KUserFeedback::UsageTimeSource); 0121 provider->addDataSource(new KUserFeedback::StyleInfoSource); 0122 0123 Orwell mainWindow; 0124 mainWindow.show(); 0125 0126 return app.exec(); 0127 }