digiKam
Loading...
Searching...
No Matches
fileactionmngr_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 : 2009-05-05
7 * Description : file action manager
8 *
9 * SPDX-FileCopyrightText: 2009-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 <QMutex>
21#include <QSet>
22#include <QTimer>
23
24// Local includes
25
26#include "fileactionmngr.h"
27#include "fileworkeriface.h"
29#include "databaseworkeriface.h"
30#include "metadatahub.h"
31#include "parallelworkers.h"
32
33namespace Digikam
34{
35
42
43class Q_DECL_HIDDEN PrivateProgressItemCreator : public QObject, // clazy:exclude=ctor-missing-parent-argument
45{
46 Q_OBJECT
47
48public:
49
50 ProgressItem* createProgressItem(const QString& action) const override;
51 void addProgressItem(ProgressItem* const item) override;
52
54
55Q_SIGNALS:
56
58
59public Q_SLOTS:
60
61 void slotProgressItemCompleted();
62 void slotProgressItemCanceled(ProgressItem* item);
63};
64
65// -----------------------------------------------------------------------------------------------------------
66
67class Q_DECL_HIDDEN FileActionMngr::Private : public QObject
68{
69 Q_OBJECT
70
71public:
72
73 explicit Private(FileActionMngr* const qq);
74 ~Private() override;
75
76Q_SIGNALS:
77
79
80 // Inter-thread signals: connected to database worker slots
81 void signalAddTags(const FileActionItemInfoList& infos, const QList<int>& tagIDs);
82 void signalRemoveTags(const FileActionItemInfoList& infos, const QList<int>& tagIDs);
83 void signalAssignPickLabel(const FileActionItemInfoList& infos, int pickId);
84 void signalAssignColorLabel(const FileActionItemInfoList& infos, int colorId);
85 void signalAssignRating(const FileActionItemInfoList& infos, int rating);
86 void signalSetExifOrientation(const FileActionItemInfoList& infos, int orientation);
88 void signalEditGroup(int groupAction, const ItemInfo& pick, const FileActionItemInfoList& infos);
89 void signalTransform(const FileActionItemInfoList& infos, int orientation);
90 void signalCopyAttributes(const FileActionItemInfoList& infos, const QStringList& derivedPaths);
91
92public:
93
94 // -- Signal-emitter glue code --
95
96 void assignTags(const FileActionItemInfoList& infos, const QList<int>& tagIDs)
97 {
98 Q_EMIT signalAddTags(infos, tagIDs);
99 }
100
101 void removeTags(const FileActionItemInfoList& infos, const QList<int>& tagIDs)
102 {
103 Q_EMIT signalRemoveTags(infos, tagIDs);
104 }
105
106 void assignPickLabel(const FileActionItemInfoList& infos, int pickId)
107 {
108 Q_EMIT signalAssignPickLabel(infos, pickId);
109 }
110
111 void assignColorLabel(const FileActionItemInfoList& infos, int colorId)
112 {
113 Q_EMIT signalAssignColorLabel(infos, colorId);
114 }
115
116 void assignRating(const FileActionItemInfoList& infos, int rating)
117 {
118 Q_EMIT signalAssignRating(infos, rating);
119 }
120
121 void editGroup(int groupAction, const ItemInfo& pick, const FileActionItemInfoList& infos)
122 {
123 Q_EMIT signalEditGroup(groupAction, pick, infos);
124 }
125
126 void setExifOrientation(const FileActionItemInfoList& infos, int orientation)
127 {
128 Q_EMIT signalSetExifOrientation(infos, orientation);
129 }
130
132 {
133 Q_EMIT signalApplyMetadata(infos, hub);
134 }
135
136 void transform(const FileActionItemInfoList& infos, int orientation)
137 {
138 Q_EMIT signalTransform(infos, orientation);
139 }
140
141 void copyAttributes(const FileActionItemInfoList& infos, const QStringList& derivedPaths)
142 {
143 Q_EMIT signalCopyAttributes(infos, derivedPaths);
144 }
145
146public:
147
148 // -- Workflow controlling --
149
150 bool isActive() const;
151
153 bool shallSendForWriting(qlonglong id);
154
156 void startingToWrite(const QList<ItemInfo>& infos);
157
158 void connectToDatabaseWorker();
159 void connectDatabaseToFileWorker();
160
161 PrivateProgressItemCreator* dbProgressCreator();
162 PrivateProgressItemCreator* fileProgressCreator();
163
164public Q_SLOTS:
165
166 void slotImageDataChanged(const QString& path, bool removeThumbnails, bool notifyCache);
167 void slotSleepTimer();
168 void slotLastProgressItemCompleted();
169
170public:
171
172 QSet<qlonglong> scheduledToWrite;
173 QString dbMessage;
175 QMutex mutex;
176
177 FileActionMngr* q = nullptr;
178
179 DatabaseWorkerInterface* dbWorker = nullptr;
181
182 QTimer* sleepTimer = nullptr;
183
186};
187
188} // namespace Digikam
Definition databaseworkeriface.h:34
Definition disjointmetadata.h:38
Definition fileactionimageinfolist.h:95
Definition fileactionmngr_p.h:68
void transform(const FileActionItemInfoList &infos, int orientation)
Definition fileactionmngr_p.h:136
void signalAssignPickLabel(const FileActionItemInfoList &infos, int pickId)
void assignRating(const FileActionItemInfoList &infos, int rating)
Definition fileactionmngr_p.h:116
void assignTags(const FileActionItemInfoList &infos, const QList< int > &tagIDs)
Definition fileactionmngr_p.h:96
QString dbMessage
Definition fileactionmngr_p.h:173
void signalEditGroup(int groupAction, const ItemInfo &pick, const FileActionItemInfoList &infos)
void setExifOrientation(const FileActionItemInfoList &infos, int orientation)
Definition fileactionmngr_p.h:126
void signalApplyMetadata(const FileActionItemInfoList &infos, DisjointMetadata *hub)
void assignColorLabel(const FileActionItemInfoList &infos, int colorId)
Definition fileactionmngr_p.h:111
ParallelAdapter< FileWorkerInterface > * fileWorker
Definition fileactionmngr_p.h:180
void signalAssignColorLabel(const FileActionItemInfoList &infos, int colorId)
void signalRemoveTags(const FileActionItemInfoList &infos, const QList< int > &tagIDs)
void removeTags(const FileActionItemInfoList &infos, const QList< int > &tagIDs)
Definition fileactionmngr_p.h:101
QMutex mutex
Definition fileactionmngr_p.h:175
void signalAssignRating(const FileActionItemInfoList &infos, int rating)
QSet< qlonglong > scheduledToWrite
Definition fileactionmngr_p.h:172
void signalTransform(const FileActionItemInfoList &infos, int orientation)
PrivateProgressItemCreator dbProgress
Definition fileactionmngr_p.h:184
void copyAttributes(const FileActionItemInfoList &infos, const QStringList &derivedPaths)
Definition fileactionmngr_p.h:141
void signalSetExifOrientation(const FileActionItemInfoList &infos, int orientation)
QString writerMessage
Definition fileactionmngr_p.h:174
void applyMetadata(const FileActionItemInfoList &infos, DisjointMetadata *hub)
Definition fileactionmngr_p.h:131
void signalAddTags(const FileActionItemInfoList &infos, const QList< int > &tagIDs)
void editGroup(int groupAction, const ItemInfo &pick, const FileActionItemInfoList &infos)
Definition fileactionmngr_p.h:121
PrivateProgressItemCreator fileProgress
Definition fileactionmngr_p.h:185
void signalCopyAttributes(const FileActionItemInfoList &infos, const QStringList &derivedPaths)
void assignPickLabel(const FileActionItemInfoList &infos, int pickId)
Definition fileactionmngr_p.h:106
Definition fileactionmngr.h:32
Definition fileactionimageinfolist.h:33
Definition iteminfo.h:68
Definition parallelworkers.h:123
Definition fileactionmngr_p.h:45
QAtomicInt activeProgressItems
Definition fileactionmngr_p.h:53
Definition progressmanager.h:35
Definition datefolderview.cpp:34
GroupAction
Definition fileactionmngr_p.h:37
@ AddToGroup
Definition fileactionmngr_p.h:38
@ Ungroup
Definition fileactionmngr_p.h:40
@ RemoveFromGroup
Definition fileactionmngr_p.h:39