digiKam
Loading...
Searching...
No Matches
tagscache.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2010-04-02
7 * Description : Cache for Tag information
8 *
9 * SPDX-FileCopyrightText: 2010-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2011-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QObject>
21
22// Local includes
23
24#include "coredbchangesets.h"
25#include "digikam_export.h"
26
27namespace Digikam
28{
29
30class DIGIKAM_DATABASE_EXPORT TagsCache : public QObject
31{
32 Q_OBJECT
33
34public:
35
37 {
39 IncludeLeadingSlash
40 };
41
43 {
45 IncludeHiddenTags
46 };
47
48public:
49
55 QString tagName(int id) const;
56 QStringList tagNames(const QList<int>& ids, HiddenTagsPolicy hiddenTagsPolicy = IncludeHiddenTags) const;
57
63 QString tagPath(int id, LeadingSlashPolicy slashPolicy = IncludeLeadingSlash) const;
64 QStringList tagPaths(const QList<int>& ids,
65 LeadingSlashPolicy slashPolicy = IncludeLeadingSlash,
66 HiddenTagsPolicy hiddenTagsPolicy = IncludeHiddenTags) const;
67
71 bool hasTag(int id) const;
72
76 int parentTag(int id) const;
77
83 QList<int> parentTags(int id) const;
84
90 QList<int> tagsForName(const QString& tagName, HiddenTagsPolicy hiddenTagsPolicy = NoHiddenTags) const;
91
97 int tagForName(const QString& tagName, int parentId = 0) const;
98
106 int tagForPath(const QString& path) const;
107 QList<int> tagsForPaths(const QStringList& tagPaths) const;
108
116 int createTag(const QString& tagPathToCreate);
117 QList<int> createTags(const QStringList& tagPaths);
118
124 int getOrCreateTag(const QString& tagPath);
125 QList<int> getOrCreateTags(const QStringList& tagPaths);
126
132 int getOrCreateTagWithProperty(const QString& tagPath,
133 const QString& property,
134 const QString& value = QString());
135
141 bool hasProperty(int tagId, const QString& property, const QString& value = QString()) const;
142
149 QString propertyValue(int tagId, const QString& property) const;
150 QStringList propertyValues(int tagId, const QString& property) const;
151
156 QMap<QString, QString> properties(int tagId) const;
157
164 QList<int> tagsWithProperty(const QString& property, const QString& value = QString()) const;
165
172 QList<int> tagsWithPropertyCached(const QString& property) const;
173
178 bool isInternalTag(int tagId) const;
179
184 QList<int> publicTags(const QList<int>& tagIds) const;
185
190 bool containsPublicTags(const QList<int>& tagIds) const;
191
196 bool canBeWrittenToMetadata(int tagId) const;
197
203 int getOrCreateInternalTag(const QString& tagName);
204
209 int tagForColorLabel(int label);
210
214 QVector<int> colorLabelTags();
215
220 int colorLabelForTag(int tagId);
221
227 int colorLabelFromTags(const QList<int>& tagIds);
228
233 int tagForPickLabel(int label);
234
238 QVector<int> pickLabelTags();
239
244 int pickLabelForTag(int tagId);
245
251 int pickLabelFromTags(const QList<int>& tagIds);
252
256 QList<int> tagsContaining(const QString& fragment,
257 Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive,
258 HiddenTagsPolicy hiddenTagsPolicy = NoHiddenTags);
259 QList<int> tagsStartingWith(const QString& begin,
260 Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive,
261 HiddenTagsPolicy hiddenTagsPolicy = NoHiddenTags);
262
271 QStringList shortenedTagPaths(const QList<int>& ids,
272 LeadingSlashPolicy slashPolicy = IncludeLeadingSlash,
273 HiddenTagsPolicy hiddenTagsPolicy = IncludeHiddenTags) const;
274
275 QStringList shortenedTagPaths(const QList<int>& ids, QList<int>* sortedIds,
276 LeadingSlashPolicy slashPolicy = IncludeLeadingSlash,
277 HiddenTagsPolicy hiddenTagsPolicy = IncludeHiddenTags) const;
278
279public:
280
281 static TagsCache* instance();
282
283 static QLatin1String tagPathOfDigikamInternalTags(LeadingSlashPolicy slashPolicy = IncludeLeadingSlash);
284 static QLatin1String propertyNameDigikamInternalTag();
285 static QLatin1String propertyNameExcludedFromWriting();
286
287Q_SIGNALS:
288
294 void tagAdded(int tagId);
295 void tagDeleted(int tagId);
296 void tagAboutToBeDeleted(QString name);
297
298private Q_SLOTS:
299
300 void slotTagChanged(const TagChangeset& changeset);
301
302private:
303
304 // Disable
305 TagsCache();
306 explicit TagsCache(QObject*) = delete;
307 ~TagsCache() override;
308
309 void initialize();
310 void invalidate();
311
312private:
313
314 friend class CoreDbAccess;
315 friend class TagsCacheCreator;
316 friend class ChangingDB;
317
318private:
319
320 class Private;
321 Private* const d = nullptr;
322};
323
324} // namespace Digikam
Definition albummanager_p.h:214
Definition coredbaccess.h:46
Definition coredbchangesets.h:288
Definition tagscache.h:31
LeadingSlashPolicy
Definition tagscache.h:37
@ NoLeadingSlash
Ex: "Places/Cities/Paris".
Definition tagscache.h:38
void tagAdded(int tagId)
void tagAboutToBeDeleted(QString name)
void tagDeleted(int tagId)
HiddenTagsPolicy
Definition tagscache.h:43
@ NoHiddenTags
Definition tagscache.h:44
qulonglong value
Definition itemviewutilities.cpp:585
Definition datefolderview.cpp:34