digiKam
Loading...
Searching...
No Matches
scancontroller.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 : 2005-10-28
7 * Description : scan item controller.
8 *
9 * SPDX-FileCopyrightText: 2005-2006 by Tom Albers <tomalbers at kde dot nl>
10 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 * SPDX-FileCopyrightText: 2007-2013 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// Qt includes
20
21#include <QThread>
22#include <QString>
23#include <QList>
24
25// Local includes
26
27#include "digikam_export.h"
30#include "collectionscanner.h"
31#include "iteminfo.h"
32#include "loadingcache.h"
33#include "coredbchangesets.h"
34
35namespace Digikam
36{
37
38class CollectionScanner;
39class PAlbum;
40
41class DIGIKAM_GUI_EXPORT ScanController : public QThread,
43{
44 Q_OBJECT
45
46public:
47
48 enum Advice
49 {
52 AbortImmediately
53 };
54
55public:
56
66 {
67 public:
68
69 explicit FileMetadataWrite(const ItemInfo& info);
71
72 void changed(bool wasChanged);
73
74 protected:
75
77 bool m_changed = false;
78
79 private:
80
81 // Disable
82 FileMetadataWrite(const FileMetadataWrite&) = delete;
83 FileMetadataWrite& operator=(const FileMetadataWrite&) = delete;
84 };
85
86public:
87
88 static ScanController* instance();
89
96 void updateUniqueHash();
97
98 void allowToScanDeferredFiles();
99
104 ItemInfo scannedInfo(const QString& filePath,
105 CollectionScanner::FileScanMode mode = CollectionScanner::NormalScan);
106
110 QList<qlonglong> getNewIdsList() const;
111
112protected:
113
114 void run() override;
115
116private:
117
119 ~ScanController() override;
120
121 void setInitializationMessage();
122 void createProgressDialog();
123
124 bool continueQuery() override;
125 void connectCollectionScanner(CollectionScanner* const scanner) override;
126
127 // -----------------------------------------------------------------------------
128
133
134public:
135
139 void restart();
140
146 Advice databaseInitialization();
147
157 void completeCollectionScan(bool defer = false);
158 void completeCollectionScanDeferFiles();
159
164 void completeCollectionScanInBackground(bool defer, bool fastScan = true);
165
170 void scheduleCollectionScan(const QString& path);
171
179 void scheduleCollectionScanRelaxed(const QString& path);
180
189 void scheduleCollectionScanExternal(const QString& path);
190
194 void beginFileMetadataWrite(const ItemInfo& info);
195
204 void resumeCollectionScan();
205
212 void restartCollectionScan();
213
214Q_SIGNALS:
215
216 void databaseInitialized(bool success);
217 void collectionScanStarted(const QString& message);
218
219private Q_SLOTS:
220
221 void slotStartCompleteScan();
222 void slotStartScanningAlbum(const QString& albumRoot, const QString& album);
223 void slotStartScanningAlbumRoot(const QString& albumRoot);
224 void slotStartScanningForStaleAlbums();
225 void slotStartScanningAlbumRoots();
226
227private:
228
233 void scanFileDirectly(const QString& filePath);
234 void scanFileDirectlyNormal(const ItemInfo& info);
235 void completeCollectionScanCore(bool needTotalFiles, bool defer, bool fastScan);
236
238
239 // -----------------------------------------------------------------------------
240
245
246public:
247
256 void hintAtMoveOrCopyOfAlbum(const PAlbum* const album,
257 const PAlbum* const dstAlbum,
258 const QString& newAlbumName = QString());
259 void hintAtMoveOrCopyOfAlbum(const PAlbum* const album,
260 const QString& dstPath,
261 const QString& newAlbumName = QString());
262
270 void hintAtMoveOrCopyOfItems(const QList<qlonglong>& ids,
271 const PAlbum* const dstAlbum,
272 const QStringList& itemNames);
273 void hintAtMoveOrCopyOfItem(qlonglong id,
274 const PAlbum* const dstAlbum,
275 const QString& itemName);
276
281 void hintAtModificationOfItems(const QList<qlonglong>& ids);
282 void hintAtModificationOfItem(qlonglong id);
283
284Q_SIGNALS:
285
287 void startScanningAlbum(const QString& albumRoot, const QString& album);
288 void filesScanned(int);
289 void scanningProgress(float progress);
292 void progressFromInitialization(const QString&, int);
293
294private Q_SLOTS:
295
296 void slotTotalFilesToScan(int count);
297 void slotScannedFiles(int scanned);
298 void slotShowProgressDialog();
299 void slotTriggerShowProgressDialog();
300 void slotProgressFromInitialization(const QString& message, int numberOfSteps);
301 void slotErrorFromInitialization(const QString& errorMessage);
302
303private:
304
305 void moreSchemaUpdateSteps(int numberOfSteps) override;
306 void schemaUpdateProgress(const QString& message, int numberOfSteps) override;
307 void error(const QString& errorMessage) override;
308
309 AlbumCopyMoveHint hintForAlbum(const PAlbum* const album,
310 int dstAlbumRootId,
311 const QString& relativeDstPath,
312 const QString& albumName);
313
314 QList<AlbumCopyMoveHint> hintsForAlbum(const PAlbum* const album,
315 int dstAlbumRootId,
316 const QString& relativeDstPath,
317 const QString& albumName);
319
320 // -----------------------------------------------------------------------------
321
326
327public:
328
332 void shutDown();
333
339 void abortInitialization();
340
346 void cancelCompleteScan();
347
354 void cancelAllAndSuspendCollectionScan();
355
364 void suspendCollectionScan();
365
369 void finishFileMetadataWrite(const ItemInfo& info, bool changed);
370
371Q_SIGNALS:
372
375 void partialScanDone(const QString& path);
378 void errorFromInitialization(const QString&);
379
380private Q_SLOTS:
381
382 void slotCancelPressed();
383 void slotRelaxedScanning();
384
385private:
386
387 void finishedSchemaUpdate(UpdateResult result) override;
388
390
391private:
392
393 // Disable
394 ScanController(QObject*) = delete;
395 ScanController(const ScanController&) = delete;
396 ScanController& operator=(const ScanController&) = delete;
397
398private:
399
401
402 class Private;
403 Private* const d = nullptr;
404};
405
406} // namespace Digikam
Definition collectionscannerhints.h:149
Definition collectionscanner.h:40
FileScanMode
Definition collectionscanner.h:46
Definition collectionscannerobserver.h:47
UpdateResult
Definition collectionscannerobserver.h:51
Definition iteminfolist.h:37
Definition iteminfo.h:68
Definition album.h:357
Definition scancontroller_p.h:167
Definition scancontroller.h:66
ItemInfo m_info
Definition scancontroller.h:76
Definition scancontroller_p.h:100
Definition scancontroller.h:43
void incrementProgressDialog(int)
void scanningProgress(float progress)
void progressFromInitialization(const QString &, int)
Advice
Definition scancontroller.h:49
@ Success
Definition scancontroller.h:50
@ ContinueWithoutDatabase
Definition scancontroller.h:51
void collectionScanStarted(const QString &message)
void databaseInitialized(bool success)
void newImages(const ItemInfoList &)
void startScanningAlbum(const QString &albumRoot, const QString &album)
void partialScanDone(const QString &path)
void errorFromInitialization(const QString &)
Definition datefolderview.cpp:34