digiKam
Loading...
Searching...
No Matches
collectionscannerhints.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 : 2008-09-09
7 * Description : Hint data containers for the collection scanner
8 *
9 * SPDX-FileCopyrightText: 2008 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2009-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#include "digikam_config.h"
19
20// Qt includes
21
22#include <QDateTime>
23#include <QList>
24#include <QStringList>
25
26#ifdef HAVE_DBUS
27# include <QDBusArgument>
28# include "dbenginedbusutils.h"
29#endif
30
31// Local includes
32
33#include "digikam_export.h"
34#include "digikam_globals.h"
35
36namespace Digikam
37{
38
39class AlbumCopyMoveHint;
40class CollectionLocation;
41class CollectionScannerObserver;
42class ItemInfo;
43class ItemCopyMoveHint;
44class ItemChangeHint;
45class ItemMetadataAdjustmentHint;
46
48{
49public:
50
52
55
56 virtual void recordHints(const QList<AlbumCopyMoveHint>& hints) = 0;
57 virtual void recordHints(const QList<ItemCopyMoveHint>& hints) = 0;
58 virtual void recordHints(const QList<ItemChangeHint>& hints) = 0;
59 virtual void recordHint(const ItemMetadataAdjustmentHint& hints) = 0;
60
61 virtual void clear() = 0;
62
63private:
64
65 Q_DISABLE_COPY(CollectionScannerHintContainer)
66};
67
68// ------------------------------------------------------------------------------
69
70namespace CollectionScannerHints
71{
72
73class DIGIKAM_DATABASE_EXPORT Album
74{
75public:
76
77 Album() = default;
78 Album(int albumRootId, int albumId);
79
80 bool isNull() const;
81 QT_HASH_TYPE qHash() const;
82 bool operator==(const Album& other) const;
83
84public:
85
86 int albumRootId = 0;
87 int albumId = 0;
88};
89
90// ---------------------------------------------------------------------------
91
92class DIGIKAM_DATABASE_EXPORT DstPath
93{
94public:
95
96 DstPath() = default;
97 DstPath(int albumRootId, const QString& relativePath);
98
99 bool isNull() const;
100 QT_HASH_TYPE qHash() const;
101 bool operator==(const DstPath& other) const;
102
103public:
104
105 int albumRootId = 0;
106 QString relativePath;
107};
108
109// ---------------------------------------------------------------------------
110
111class DIGIKAM_DATABASE_EXPORT Item
112{
113public:
114
115 Item() = default;
116 explicit Item(qlonglong id);
117
118 bool isNull() const;
119 QT_HASH_TYPE qHash() const;
120 bool operator==(const Item& other) const;
121
122public:
123
124 qlonglong id = 0;
125};
126
127// ---------------------------------------------------------------------------
128
129inline QT_HASH_TYPE qHash(const Album& src)
130{
131 return src.qHash();
132}
133
134inline QT_HASH_TYPE qHash(const DstPath& dst)
135{
136 return dst.qHash();
137}
138
139inline QT_HASH_TYPE qHash(const Item& item)
140{
141 return item.qHash();
142}
143
144} // namespace CollectionScannerHints
145
146// ---------------------------------------------------------------------------
147
148class DIGIKAM_DATABASE_EXPORT AlbumCopyMoveHint
149{
150public:
151
157 AlbumCopyMoveHint() = default;
158 AlbumCopyMoveHint(int srcAlbumRootId, int srcAlbum,
159 int dstAlbumRootId, const QString& dstRelativePath);
160
161 int albumRootIdSrc() const;
162 int albumIdSrc() const;
163 bool isSrcAlbum(int albumRootId, int albumId) const;
164
165 CollectionScannerHints::Album src() const
166 {
167 return m_src;
168 }
169
170 int albumRootIdDst() const;
171 QString relativePathDst() const;
172 bool isDstAlbum(int albumRootId, const QString& relativePath) const;
173
174 CollectionScannerHints::DstPath dst() const
175 {
176 return m_dst;
177 }
178
179 QT_HASH_TYPE qHash() const;
180
181 bool operator==(const CollectionScannerHints::Album& src) const
182 {
183 return (src == m_src);
184 }
185
186 bool operator==(const CollectionScannerHints::DstPath& dst) const
187 {
188 return (dst == m_dst);
189 }
190
191#ifdef HAVE_DBUS
192
193 AlbumCopyMoveHint& operator<<(const QDBusArgument& argument);
194 const AlbumCopyMoveHint& operator>>(QDBusArgument& argument) const;
195
196#endif
197
198 operator const CollectionScannerHints::Album& () const
199 {
200 return m_src;
201 }
202
203 operator const CollectionScannerHints::DstPath& () const
204 {
205 return m_dst;
206 }
207
208protected:
209
210 CollectionScannerHints::Album m_src;
211 CollectionScannerHints::DstPath m_dst;
212};
213
214// ---------------------------------------------------------------------------
215
216class DIGIKAM_DATABASE_EXPORT ItemCopyMoveHint
217{
218public:
219
226 ItemCopyMoveHint() = default;
227 ItemCopyMoveHint(const QList<qlonglong>& srcIds,
228 int dstAlbumRootId,
229 int albumId,
230 const QStringList& dstNames);
231
232 QList<qlonglong> srcIds() const;
233 bool isSrcId(qlonglong id) const;
234 int albumRootIdDst() const;
235 int albumIdDst() const;
236 bool isDstAlbum(int albumRootId, int albumId) const;
237
238 CollectionScannerHints::Album dst() const
239 {
240 return m_dst;
241 }
242
243 QStringList dstNames() const;
244 QString dstName(qlonglong id) const;
245
246 bool operator==(const CollectionScannerHints::Album& dst) const
247 {
248 return (dst == m_dst);
249 }
250
251#ifdef HAVE_DBUS
252
253 ItemCopyMoveHint& operator<<(const QDBusArgument& argument);
254 const ItemCopyMoveHint& operator>>(QDBusArgument& argument) const;
255
256#endif
257
258 operator const CollectionScannerHints::Album& () const
259 {
260 return m_dst;
261 }
262
263protected:
264
265 QList<qlonglong> m_srcIds;
266 CollectionScannerHints::Album m_dst;
267 QStringList m_dstNames;
268};
269
270// ---------------------------------------------------------------------------
271
272class DIGIKAM_DATABASE_EXPORT ItemChangeHint
273{
274public:
275
282 {
284 ItemRescan
285 };
286
287public:
288
289 ItemChangeHint() = default;
290 explicit ItemChangeHint(const QList<qlonglong>& srcIds,
291 ChangeType type = ItemModified);
292
293 QList<qlonglong> ids() const;
294 bool isId(qlonglong id) const;
295 ChangeType changeType() const;
296
297 bool isModified() const
298 {
299 return (changeType() == ItemModified);
300 }
301
302 bool needsRescan() const
303 {
304 return (changeType() == ItemRescan);
305 }
306
307#ifdef HAVE_DBUS
308
309 ItemChangeHint& operator<<(const QDBusArgument& argument);
310 const ItemChangeHint& operator>>(QDBusArgument& argument) const;
311
312#endif
313
314protected:
315
316 QList<qlonglong> m_ids;
317 ChangeType m_type = ItemModified;
318};
319
320// ---------------------------------------------------------------------------
321
322class DIGIKAM_DATABASE_EXPORT ItemMetadataAdjustmentHint
323{
324public:
325
339
340public:
341
343 explicit ItemMetadataAdjustmentHint(qlonglong id,
344 AdjustmentStatus status,
345 const QDateTime& modificationDateOnDisk,
346 qlonglong fileSize);
347
348 qlonglong id() const;
349 AdjustmentStatus adjustmentStatus() const;
350 QDateTime modificationDate() const;
351 qlonglong fileSize() const;
352
353 bool isAboutToEdit() const
354 {
355 return (adjustmentStatus() == AboutToEditMetadata);
356 }
357
358 bool isEditingFinished() const
359 {
360 return (adjustmentStatus() == MetadataEditingFinished);
361 }
362
364 {
365 return (adjustmentStatus() == MetadataEditingAborted);
366 }
367
368#ifdef HAVE_DBUS
369
370 ItemMetadataAdjustmentHint& operator<<(const QDBusArgument& argument);
371 const ItemMetadataAdjustmentHint& operator>>(QDBusArgument& argument) const;
372
373#endif
374
375protected:
376
377 qlonglong m_id = 0;
378 AdjustmentStatus m_status = AboutToEditMetadata;
380 qlonglong m_fileSize = 0;
381};
382
384{
385 return hint.qHash();
386}
387
388} // namespace Digikam
389
390#ifdef HAVE_DBUS
391
395
396#endif
size_t qHash(const QList< Digikam::Album * > &key)
Definition albumhistory.cpp:36
Definition collectionscannerhints.h:149
CollectionScannerHints::Album src() const
Definition collectionscannerhints.h:165
CollectionScannerHints::Album m_src
Definition collectionscannerhints.h:210
CollectionScannerHints::DstPath dst() const
Definition collectionscannerhints.h:174
bool operator==(const CollectionScannerHints::DstPath &dst) const
Definition collectionscannerhints.h:186
QT_HASH_TYPE qHash() const
Definition collectionscannerhints.cpp:150
CollectionScannerHints::DstPath m_dst
Definition collectionscannerhints.h:211
bool operator==(const CollectionScannerHints::Album &src) const
Definition collectionscannerhints.h:181
Definition collectionscannerhints.h:48
virtual void recordHints(const QList< ItemCopyMoveHint > &hints)=0
virtual ~CollectionScannerHintContainer()=default
CollectionScannerHintContainer()=default
Note: All methods of this class must be thread-safe.
virtual void recordHints(const QList< AlbumCopyMoveHint > &hints)=0
virtual void recordHint(const ItemMetadataAdjustmentHint &hints)=0
virtual void recordHints(const QList< ItemChangeHint > &hints)=0
Definition collectionscannerhints.h:273
QList< qlonglong > m_ids
Definition collectionscannerhints.h:316
bool needsRescan() const
Definition collectionscannerhints.h:302
bool isModified() const
Definition collectionscannerhints.h:297
ChangeType
Definition collectionscannerhints.h:282
@ ItemModified
treat as if modification date changed
Definition collectionscannerhints.h:283
Definition collectionscannerhints.h:217
QStringList m_dstNames
Definition collectionscannerhints.h:267
CollectionScannerHints::Album dst() const
Definition collectionscannerhints.h:238
QList< qlonglong > m_srcIds
Definition collectionscannerhints.h:265
bool operator==(const CollectionScannerHints::Album &dst) const
Definition collectionscannerhints.h:246
CollectionScannerHints::Album m_dst
Definition collectionscannerhints.h:266
Definition collectionscannerhints.h:323
QDateTime m_modificationDate
Definition collectionscannerhints.h:379
AdjustmentStatus
Definition collectionscannerhints.h:334
@ AboutToEditMetadata
The file is about to be edited. Suspends scanning. The Finished hint must follow.
Definition collectionscannerhints.h:335
@ MetadataEditingFinished
The file's metadata has been edited as described above.
Definition collectionscannerhints.h:336
bool isEditingFinished() const
Definition collectionscannerhints.h:358
bool isAboutToEdit() const
Definition collectionscannerhints.h:353
bool isEditingFinishedAborted() const
Definition collectionscannerhints.h:363
#define DECLARE_METATYPE_FOR_DBUS(x)
Definition dbenginedbusutils.h:19
#define QT_HASH_TYPE
Definition digikam_globals.h:56
Definition datefolderview.cpp:34
bool operator==(const SearchTextSettings &a, const SearchTextSettings &b)
Definition searchtextbar.cpp:40
size_t qHash(const PAlbumPath &id)
Definition albummanager_p.h:135
QDataStream & operator<<(QDataStream &dataStream, const unsigned long &in)
Definition qdatastreamoverloads.cpp:29
QDataStream & operator>>(QDataStream &dataStream, unsigned long &in)
Definition qdatastreamoverloads.cpp:19