File indexing completed on 2024-12-15 03:45:04

0001 /*
0002     SPDX-FileCopyrightText: 2017 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: MIT
0005 */
0006 
0007 #ifndef KUSERFEEDBACK_PROVIDER_P_H
0008 #define KUSERFEEDBACK_PROVIDER_P_H
0009 
0010 #include "provider.h"
0011 
0012 #include <common/surveytargetexpressionevaluator.h>
0013 
0014 #include <QDateTime>
0015 #include <QStringList>
0016 #include <QTime>
0017 #include <QTimer>
0018 #include <QVector>
0019 #include <QElapsedTimer>
0020 
0021 #include <memory>
0022 
0023 QT_BEGIN_NAMESPACE
0024 class QNetworkAccessManager;
0025 class QNetworkReply;
0026 class QSettings;
0027 QT_END_NAMESPACE
0028 
0029 namespace KUserFeedback {
0030 class ProviderPrivate : public SurveyTargetExpressionDataProvider
0031 {
0032 public:
0033     explicit ProviderPrivate(Provider *qq);
0034     ~ProviderPrivate() override;
0035 
0036     int currentApplicationTime() const;
0037 
0038     std::unique_ptr<QSettings> makeSettings() const;
0039     std::unique_ptr<QSettings> makeGlobalSettings() const;
0040     void load();
0041     void store();
0042     void storeOne(const QString &key, const QVariant &value);
0043     void storeOneGlobal(const QString &key, const QVariant &value);
0044 
0045     void aboutToQuit();
0046 
0047     bool isValidSource(AbstractDataSource *source) const;
0048     QByteArray jsonData(Provider::TelemetryMode mode) const;
0049     void scheduleNextSubmission(qint64 minTime = 0);
0050     void submitProbe(const QUrl &url);
0051     void submitProbeFinished(QNetworkReply *reply);
0052     void submit(const QUrl &url);
0053     void submitFinished(QNetworkReply *reply);
0054 
0055     bool selectSurvey(const SurveyInfo &survey) const;
0056 
0057     Provider::TelemetryMode highestTelemetryMode() const;
0058     void scheduleEncouragement();
0059     void emitShowEncouragementMessage();
0060 
0061     void writeAuditLog(const QDateTime &dt);
0062 
0063     QVariant sourceData(const QString &sourceId) const override;
0064 
0065     Provider *q;
0066 
0067     QString productId;
0068 
0069     QTimer submissionTimer;
0070     QNetworkAccessManager *networkAccessManager;
0071     QUrl serverUrl;
0072     QDateTime lastSubmitTime;
0073     int redirectCount;
0074     int submissionInterval;
0075     Provider::TelemetryMode telemetryMode;
0076 
0077     int surveyInterval;
0078     QDateTime lastSurveyTime;
0079     QStringList completedSurveys;
0080 
0081     QElapsedTimer startTime;
0082     int startCount;
0083     int usageTime;
0084 
0085     QTimer encouragementTimer;
0086     QDateTime lastEncouragementTime;
0087     int encouragementStarts;
0088     int encouragementTime;
0089     int encouragementDelay;
0090     int encouragementInterval;
0091 
0092     int backoffIntervalMinutes;
0093 
0094     QVector<AbstractDataSource*> dataSources;
0095     QHash<QString, AbstractDataSource*> dataSourcesById;
0096 };
0097 }
0098 
0099 #endif