digiKam
Loading...
Searching...
No Matches
itemscanner.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 : 2007-09-19
7 * Description : Scanning a single item.
8 *
9 * SPDX-FileCopyrightText: 2007-2013 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2013-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 <QFileInfo>
21
22// Local includes
23
24#include "dimg.h"
25#include "iteminfo.h"
26#include "dmetadata.h"
27#include "coredbalbuminfo.h"
29
30namespace Digikam
31{
32
33class DIGIKAM_DATABASE_EXPORT ItemScanner
34{
35
36public:
37
39 {
43 CleanScan
44 };
45
46public:
47
53 ItemScanner(const QFileInfo& info, const ItemScanInfo& Iteminfo);
54
59 explicit ItemScanner(const QFileInfo& info);
60
65 explicit ItemScanner(qlonglong imageid);
66
68
74 void setCategory(DatabaseItem::Category category);
75
80 const ItemScanInfo& itemScanInfo() const;
81
88 void loadFromDisk();
89
93 static QString formatToString(const QString& format);
94
95private:
96
97 static bool hasValidField(const QVariantList& list);
98 static bool lessThanForIdentity(const ItemScanInfo& a, const ItemScanInfo& b);
99
100 // -----------------------------------------------------------------------------
101
106
107public:
108
113 void newFile(int albumId);
114
121 void newFileFullScan(int albumId);
122
128 void rescan();
129
135 void cleanScan();
136
142 void commit();
143
147 qlonglong id() const;
148
156 void copiedFrom(int albumId, qlonglong srcId);
157
163 static void sortByProximity(QList<ItemInfo>& infos, const ItemInfo& subject);
164
165protected:
166
167 bool copyFromSource(qlonglong src);
168 void commitCopyImageAttributes();
169 void cleanDatabaseMetadata();
170
171 void prepareAddImage(int albumId);
172 bool commitAddImage();
173
175
176 // -----------------------------------------------------------------------------
177
182
183public:
184
193 void fileModified();
194
199 static void fillCommonContainer(qlonglong imageid, ImageCommonContainer* const container);
200
205 static QDateTime creationDateFromFilesystem(const QFileInfo& info);
206
207protected:
208
209 void prepareUpdateImage();
210 void commitUpdateImage();
211
212 bool scanFromIdenticalFile();
213 void scanFile(ScanMode mode);
214
215 void scanItemInformation();
216 void commitItemInformation();
217
219
220 // -----------------------------------------------------------------------------
221
226
227public:
228
234 static QString iptcCorePropertyName(MetadataInfo::Field field);
235
236 static MetadataFields allImageMetadataFields();
237
238protected:
239
240 QString detectImageFormat() const;
241
242 void scanImageMetadata();
243 void commitImageMetadata();
244 void scanItemPosition();
245 void commitItemPosition();
246 void scanItemComments();
247 void commitItemComments();
248 void scanItemCopyright();
249 void commitItemCopyright();
250 void scanIPTCCore();
251 void commitIPTCCore();
252 void scanTags();
253 void commitTags();
254 void scanFaces();
255 void commitFaces();
256
257 bool checkRatingFromMetadata(const QVariant& ratingFromMetadata) const;
258 void checkCreationDateFromMetadata(QVariant& dateFromMetadata) const;
259
261
262 // -----------------------------------------------------------------------------
263
268
269public:
270
275 static void fillVideoMetadataContainer(qlonglong imageid, VideoMetadataContainer* const container);
276
277protected:
278
279 void scanVideoInformation();
280 void scanVideoMetadata();
281 void commitVideoMetadata();
282 QString detectVideoFormat() const;
283 QString detectAudioFormat() const;
284 static MetadataFields allVideoMetadataFields();
285
287
288 // -----------------------------------------------------------------------------
289
294
295public:
296
300 bool hasHistoryToResolve() const;
301
303
308 static bool resolveImageHistory(qlonglong id, QList<qlonglong>* needTaggingIds = nullptr);
309 static bool resolveImageHistory(qlonglong imageId, const QString& historyXml, QList<qlonglong>* needTaggingIds = nullptr);
311
316 static void tagItemHistoryGraph(qlonglong id);
317
328 static DImageHistory resolvedImageHistory(const DImageHistory& history, bool mustBeAvailable = false);
329
334 static bool sameReferredImage(const HistoryImageId& id1, const HistoryImageId& id2);
335
339 static QList<qlonglong> resolveHistoryImageId(const HistoryImageId& historyId);
340
341protected:
342
343 void scanImageHistory();
344 void commitImageHistory();
345 void scanImageHistoryIfModified();
346
347 QString uniqueHash() const;
348
350
351public:
352
356 void scanBalooInfo();
357
358private:
359
360 // Disable
361 ItemScanner(const ItemScanner&) = delete;
362 ItemScanner& operator=(const ItemScanner&) = delete;
363
364private:
365
366 class Private;
367 Private* const d = nullptr;
368};
369
370} // namespace Digikam
Definition dimagehistory.h:39
Definition historyimageid.h:32
Definition coredbinfocontainers.h:26
Definition iteminfo.h:68
Definition coredbalbuminfo.h:236
Definition itemscanner.h:34
ScanMode
Definition itemscanner.h:39
@ Rescan
Definition itemscanner.h:42
@ ModifiedScan
Definition itemscanner.h:41
@ NewScan
Definition itemscanner.h:40
Definition coredbinfocontainers.h:77
Category
Definition coredbconstants.h:69
Field
Definition metadatainfo.h:83
Definition datefolderview.cpp:34
QList< MetadataInfo::Field > MetadataFields
Definition metadatainfo.h:183