digiKam
Loading...
Searching...
No Matches
collectionscanner_p.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-03-21
7 * Description : Collection scanning to database - private containers.
8 *
9 * SPDX-FileCopyrightText: 2005-2006 by Tom Albers <tomalbers at kde dot nl>
10 * SPDX-FileCopyrightText: 2007-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
11 * SPDX-FileCopyrightText: 2009-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19#include "collectionscanner.h"
20
21// C++ includes
22
23#include <sys/types.h>
24#include <sys/stat.h>
25
26#ifndef Q_CC_MSVC
27# include <unistd.h>
28#endif
29
30// Qt includes
31
32#include <QDir>
33#include <QFileInfo>
34#include <QDirIterator>
35#include <QWriteLocker>
36#include <QReadWriteLock>
37#include <QReadLocker>
38#include <QStringList>
39#include <QSet>
40#include <QElapsedTimer>
41#include <QScopedPointer>
42
43// Local includes
44
45#include "drawfiles.h"
46#include "digikam_debug.h"
47#include "digikam_globals.h"
48#include "coredb.h"
49#include "collectionmanager.h"
50#include "collectionlocation.h"
52#include "coredbaccess.h"
53#include "coredbbackend.h"
54#include "coredbtransaction.h"
56#include "itemcomments.h"
57#include "itemcopyright.h"
58#include "iteminfo.h"
59#include "itemscanner.h"
60#include "metaenginesettings.h"
61#include "tagscache.h"
62#include "thumbsdbaccess.h"
63#include "thumbsdb.h"
64
65namespace Digikam
66{
67
68bool s_modificationDateEquals(const QDateTime& a, const QDateTime& b);
69
70// --------------------------------------------------------------------
71
72class Q_DECL_HIDDEN NewlyAppearedFile
73{
74
75public:
76
77 NewlyAppearedFile() = default;
78 NewlyAppearedFile(int albumId, const QString& fileName);
79
80 bool operator==(const NewlyAppearedFile& other) const;
81
82public:
83
84 int albumId = 0;
85 QString fileName;
86};
87
88// --------------------------------------------------------------------
89
90#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
91
92inline size_t qHash(const NewlyAppearedFile& file)
93
94#else
95
96inline uint qHash(const NewlyAppearedFile& file)
97
98#endif
99
100{
101 return (::qHash(file.albumId) ^ ::qHash(file.fileName));
102}
103
104// --------------------------------------------------------------------
105
107{
108public:
109
110 void recordHints(const QList<AlbumCopyMoveHint>& hints) override;
111 void recordHints(const QList<ItemCopyMoveHint>& hints) override;
112 void recordHints(const QList<ItemChangeHint>& hints) override;
113 void recordHint(const ItemMetadataAdjustmentHint& hint) override;
114
115 void clear() override;
116
117 bool hasAnyNormalHint(qlonglong id);
118 bool hasAlbumHints();
119 bool hasModificationHint(qlonglong id);
120 bool hasRescanHint(qlonglong id);
121 bool hasMetadataAboutToAdjustHint(qlonglong id);
122 bool hasMetadataAdjustedHint(qlonglong id);
123
124public:
125
126 QReadWriteLock lock;
127
128 QHash<CollectionScannerHints::DstPath, CollectionScannerHints::Album> albumHints;
129 QHash<NewlyAppearedFile, qlonglong> itemHints;
130 QSet<qlonglong> modifiedItemHints;
131 QSet<qlonglong> rescanItemHints;
132 QHash<qlonglong, QDateTime> metadataAboutToAdjustHints;
133 QHash<qlonglong, QDateTime> metadataAdjustedHints;
134};
135
136// --------------------------------------------------------------------
137
138class Q_DECL_HIDDEN CollectionScanner::Private
139{
140
141public:
142
143 Private() = default;
144
145public:
146
147 void resetRemovedItemsTime();
148 void removedItems();
149
150 bool checkObserver();
151 bool checkDeferred(const QFileInfo& info);
152
153 void finishScanner(ItemScanner& scanner);
154
155public:
156
157 QSet<QString> nameFilters;
158 QSet<QString> imageFilterSet;
159 QSet<QString> videoFilterSet;
160 QSet<QString> audioFilterSet;
161 QSet<QString> ignoreDirectory;
162
163 QList<int> scannedAlbums;
164 bool wantSignals = false;
165 bool needTotalFiles = false;
166 bool performFastScan = true;
167
169
171 QHash<int, int> establishedSourceAlbums;
172 bool updatingHashHint = false;
173
174 bool recordHistoryIds = false;
175 QSet<qlonglong> needResolveHistorySet;
176 QSet<qlonglong> needTaggingHistorySet;
177
178 bool deferredFileScanning = false;
179 QSet<QString> deferredAlbumPaths;
180
181 QHash<QString, QDateTime> albumDateCache;
182 QList<qlonglong> newIdsList;
183
184 CollectionScannerObserver* observer = nullptr;
185};
186
187} // namespace Digikam
Definition collectionscanner_p.h:107
QSet< qlonglong > modifiedItemHints
Definition collectionscanner_p.h:130
QHash< CollectionScannerHints::DstPath, CollectionScannerHints::Album > albumHints
Definition collectionscanner_p.h:128
QReadWriteLock lock
Definition collectionscanner_p.h:126
QHash< NewlyAppearedFile, qlonglong > itemHints
Definition collectionscanner_p.h:129
QHash< qlonglong, QDateTime > metadataAboutToAdjustHints
Definition collectionscanner_p.h:132
QHash< qlonglong, QDateTime > metadataAdjustedHints
Definition collectionscanner_p.h:133
QSet< qlonglong > rescanItemHints
Definition collectionscanner_p.h:131
Definition collectionscannerhints.h:48
Definition collectionscannerobserver.h:31
Definition collectionscanner_p.h:139
QSet< QString > ignoreDirectory
Definition collectionscanner_p.h:161
QSet< QString > videoFilterSet
Definition collectionscanner_p.h:159
QHash< int, int > establishedSourceAlbums
Definition collectionscanner_p.h:171
QList< qlonglong > newIdsList
Definition collectionscanner_p.h:182
QList< int > scannedAlbums
Definition collectionscanner_p.h:163
QSet< qlonglong > needResolveHistorySet
Definition collectionscanner_p.h:175
QSet< QString > deferredAlbumPaths
Definition collectionscanner_p.h:179
QSet< QString > imageFilterSet
Definition collectionscanner_p.h:158
QSet< QString > nameFilters
Definition collectionscanner_p.h:157
QSet< QString > audioFilterSet
Definition collectionscanner_p.h:160
QDateTime removedItemsTime
Definition collectionscanner_p.h:168
QSet< qlonglong > needTaggingHistorySet
Definition collectionscanner_p.h:176
QHash< QString, QDateTime > albumDateCache
Definition collectionscanner_p.h:181
Definition collectionscanner.h:40
Definition collectionscannerhints.h:323
Definition itemscanner.h:34
Definition collectionscanner_p.h:73
int albumId
Definition collectionscanner_p.h:84
QString fileName
Definition collectionscanner_p.h:85
Definition datefolderview.cpp:34
bool operator==(const SearchTextSettings &a, const SearchTextSettings &b)
Definition searchtextbar.cpp:40
bool s_modificationDateEquals(const QDateTime &a, const QDateTime &b)
Definition collectionscanner_p.cpp:22
size_t qHash(const PAlbumPath &id)
Definition albummanager_p.h:135