File indexing completed on 2025-02-02 05:17:49
0001 /* 0002 * SPDX-FileCopyrightText: 2011, 2012, 2013, 2014 Ivan Cukic <ivan.cukic(at)kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 // Qt 0010 #include <QObject> 0011 #include <QSqlQuery> 0012 #include <QTimer> 0013 #include <QRegularExpression> 0014 // STL 0015 #include <memory> 0016 0017 // Local 0018 #include <Plugin.h> 0019 0020 class ResourceLinking; 0021 0022 /** 0023 * Communication with the outer world. 0024 * 0025 * - Handles configuration 0026 * - Filters the events based on the user's configuration. 0027 */ 0028 class StatsPlugin : public Plugin 0029 { 0030 Q_OBJECT 0031 // Q_CLASSINFO("D-Bus Interface", "org.kde.ActivityManager.Resources.Scoring") 0032 0033 public: 0034 explicit StatsPlugin(QObject *parent); 0035 0036 static StatsPlugin *self(); 0037 0038 bool init(QHash<QString, QObject *> &modules) override; 0039 0040 QString currentActivity() const; 0041 QStringList listActivities() const; 0042 0043 inline QObject *activitiesInterface() const 0044 { 0045 return m_activities; 0046 } 0047 0048 bool isFeatureOperational(const QStringList &feature) const override; 0049 QStringList listFeatures(const QStringList &feature) const override; 0050 0051 QDBusVariant featureValue(const QStringList &property) const override; 0052 void setFeatureValue(const QStringList &property, const QDBusVariant &value) override; 0053 0054 // 0055 // D-BUS Interface methods 0056 // 0057 0058 public Q_SLOTS: 0059 void DeleteRecentStats(const QString &activity, int count, const QString &what); 0060 0061 void DeleteEarlierStats(const QString &activity, int months); 0062 0063 void DeleteStatsForResource(const QString &activity, const QString &client, const QString &resource); 0064 0065 Q_SIGNALS: 0066 void ResourceScoreUpdated(const QString &activity, const QString &client, const QString &resource, double score, uint lastUpdate, uint firstUpdate); 0067 void ResourceScoreDeleted(const QString &activity, const QString &client, const QString &resource); 0068 0069 void RecentStatsDeleted(const QString &activity, int count, const QString &what); 0070 0071 void EarlierStatsDeleted(const QString &activity, int months); 0072 0073 // 0074 // End D-BUS Interface methods 0075 // 0076 0077 private Q_SLOTS: 0078 void addEvents(const EventList &events); 0079 void loadConfiguration(); 0080 0081 void openResourceEvent(const QString &usedActivity, 0082 const QString &initiatingAgent, 0083 const QString &targettedResource, 0084 const QDateTime &start, 0085 const QDateTime &end = QDateTime()); 0086 0087 void closeResourceEvent(const QString &usedActivity, const QString &initiatingAgent, const QString &targettedResource, const QDateTime &end); 0088 0089 void saveResourceTitle(const QString &uri, const QString &title, bool autoTitle = false); 0090 void saveResourceMimetype(const QString &uri, const QString &mimetype, bool autoMimetype = false); 0091 bool insertResourceInfo(const QString &uri); 0092 void detectResourceInfo(const QString &uri); 0093 0094 void deleteOldEvents(); 0095 0096 private: 0097 inline bool acceptedEvent(const Event &event); 0098 inline Event validateEvent(Event event); 0099 0100 enum WhatToRemember { 0101 AllApplications = 0, 0102 SpecificApplications = 1, 0103 NoApplications = 2, 0104 }; 0105 0106 QObject *m_activities; 0107 QObject *m_resources; 0108 0109 QSet<QString> m_apps; 0110 QList<QRegularExpression> m_urlFilters; 0111 QStringList m_otrActivities; 0112 0113 std::unique_ptr<QSqlQuery> openResourceEventQuery; 0114 std::unique_ptr<QSqlQuery> closeResourceEventQuery; 0115 0116 std::unique_ptr<QSqlQuery> insertResourceInfoQuery; 0117 std::unique_ptr<QSqlQuery> getResourceInfoQuery; 0118 std::unique_ptr<QSqlQuery> saveResourceTitleQuery; 0119 std::unique_ptr<QSqlQuery> saveResourceMimetypeQuery; 0120 0121 QTimer m_deleteOldEventsTimer; 0122 0123 bool m_blockedByDefault : 1; 0124 bool m_blockAll : 1; 0125 WhatToRemember m_whatToRemember : 2; 0126 0127 ResourceLinking *m_resourceLinking; 0128 0129 static StatsPlugin *s_instance; 0130 };