PlasmaActivitiesStats

query.h
1/*
2 SPDX-FileCopyrightText: 2015, 2016 Ivan Cukic <ivan.cukic(at)kde.org>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
6
7#ifndef KACTIVITIES_STATS_QUERY_H
8#define KACTIVITIES_STATS_QUERY_H
9
10#include <initializer_list>
11
12#include <QString>
13#include <QStringList>
14
15#include "plasmaactivitiesstats_export.h"
16
17#include "terms.h"
18
19namespace KActivities
20{
21namespace Stats
22{
23class QueryPrivate;
24
25/**
26 * @class KActivities::Stats::Query query.h <KActivities/Stats/Query>
27 *
28 * The activities system tracks resources (documents, contacts, etc.)
29 * that the user has used. It also allows linking resources to
30 * specific activities (like bookmarks, favorites, etc.).
31 *
32 * The Query class specifies which resources to return -
33 * the previously used ones, the linked ones, or to
34 * combine these two.
35 *
36 * It allows filtering the results depending on the resource type,
37 * the agent (application that reported the usage event,
38 * see KActivities::ResourceInstance) and the activity the resource
39 * has been used in, or linked to. It also allows filtering
40 * on the URL of the resource.
41 *
42 * While it can be explicitly instantiated, a preferred approach
43 * is to use the pipe syntax like this:
44 *
45 * @code
46 * auto query = UsedResources
47 * | RecentlyUsedFirst
48 * | Agent::any()
49 * | Type::any()
50 * | Activity::current();
51 * @endcode
52 */
53class PLASMAACTIVITIESSTATS_EXPORT Query
54{
55public:
56 Query(Terms::Select selection = Terms::AllResources);
57
58 // The damned rule of five minus one :)
59 Query(Query &&source);
60 Query(const Query &source);
61 Query &operator=(Query source);
62 ~Query();
63
64 // Not all are born equal
65 bool operator==(const Query &right) const;
66 bool operator!=(const Query &right) const;
67
68 Terms::Select selection() const;
69 QStringList types() const;
70 QStringList agents() const;
71 QStringList activities() const;
72
73 QStringList urlFilters() const;
74 Terms::Order ordering() const;
75 QStringList titleFilters() const;
76 int offset() const;
77 int limit() const;
78 QDate dateStart() const;
79 QDate dateEnd() const;
80
81 void setSelection(Terms::Select selection);
82
83 void addTypes(const QStringList &types);
84 void addAgents(const QStringList &agents);
85 void addActivities(const QStringList &activities);
86 void addUrlFilters(const QStringList &urlFilters);
87 void addTitleFilters(const QStringList &urlFilters);
88 /**
89 * @since 5.62
90 */
91 void setTypes(const Terms::Type &types);
92 /**
93 * @since 5.62
94 */
95 void setAgents(const Terms::Agent &agents);
96 /**
97 * @since 5.62
98 */
99 void setActivities(const Terms::Activity &activities);
100 /**
101 * @since 5.62
102 */
103 void setUrlFilters(const Terms::Url &urlFilters);
104 void setOrdering(Terms::Order ordering);
105 void setOffset(int offset);
106 void setLimit(int limit);
107 void setTitleFilters(const Terms::Title &title);
108 /**
109 * @since 5.62
110 */
111 void setDate(const Terms::Date &date);
112 void setDateStart(QDate date);
113 void setDateEnd(QDate date);
114
115 void clearTypes();
116 void clearAgents();
117 void clearActivities();
118 void clearUrlFilters();
119 void clearTitleFilters();
120
121 void removeTypes(const QStringList &types);
122 void removeAgents(const QStringList &agents);
123 void removeActivities(const QStringList &activities);
124 void removeUrlFilters(const QStringList &urlFilters);
125
126private:
127 inline void addTerm(const Terms::Type &term)
128 {
129 addTypes(term.values);
130 }
131
132 inline void addTerm(const Terms::Agent &term)
133 {
134 addAgents(term.values);
135 }
136
137 inline void addTerm(const Terms::Activity &term)
138 {
139 addActivities(term.values);
140 }
141
142 inline void addTerm(const Terms::Url &term)
143 {
144 addUrlFilters(term.values);
145 }
146
147 inline void addTerm(Terms::Order ordering)
148 {
149 setOrdering(ordering);
150 }
151
152 inline void addTerm(Terms::Select selection)
153 {
154 setSelection(selection);
155 }
156
157 inline void addTerm(Terms::Limit limit)
158 {
159 setLimit(limit.value);
160 }
161
162 inline void addTerm(Terms::Offset offset)
163 {
164 setOffset(offset.value);
165 }
166
167 inline void addTerm(Terms::Date date)
168 {
169 setDateStart(date.start);
170 setDateEnd(date.end);
171 }
172 inline void addTerm(Terms::Title title)
173 {
174 setTitleFilters(title);
175 }
176
177public:
178 template<typename Term>
179 friend inline Query operator|(const Query &query, Term &&term)
180 {
181 Query result(query);
182 result.addTerm(term);
183 return result;
184 }
185
186 template<typename Term>
187 friend inline Query operator|(Query &&query, Term &&term)
188 {
189 query.addTerm(term);
190 return std::move(query);
191 }
192
193private:
194 QueryPrivate *d;
195};
196
197template<typename Term>
198inline Query operator|(Terms::Select selection, Term &&term)
199{
200 return Query(selection) | term;
201}
202
203} // namespace Stats
204} // namespace KActivities
205
206PLASMAACTIVITIESSTATS_EXPORT
207QDebug operator<<(QDebug dbg, const KActivities::Stats::Query &query);
208
209#endif // KACTIVITIES_STATS_QUERY_H
The activities system tracks resources (documents, contacts, etc.) that the user has used.
Definition query.h:54
void setAgents(const Terms::Agent &agents)
void setTypes(const Terms::Type &types)
void setUrlFilters(const Terms::Url &urlFilters)
void setDate(const Terms::Date &date)
Definition query.cpp:174
void setActivities(const Terms::Activity &activities)
KSERVICE_EXPORT KService::List query(FilterFunc filterFunc)
Term to filter the resources according the activity in which they were accessed.
Definition terms.h:139
Term to filter the resources according the agent (application) which accessed it.
Definition terms.h:106
On which start access date do you want to filter ?
Definition terms.h:226
Term to filter the resources according to their types.
Definition terms.h:75
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Feb 28 2025 12:01:02 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.