digiKam
Loading...
Searching...
No Matches
fileactionimageinfolist.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 : 2012-02-05
7 * Description : file action manager task list
8 *
9 * SPDX-FileCopyrightText: 2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 *
13 * ============================================================ */
14
15#pragma once
16
17// Qt includes
18
19#include <QAtomicPointer>
20#include <QList>
21#include <QExplicitlySharedDataPointer>
22#include <QDebug>
23
24// Local includes
25
26#include "iteminfo.h"
27#include "progressmanager.h"
28
29namespace Digikam
30{
31
33{
34public:
35
37 virtual ~FileActionProgressItemCreator() = default;
38 virtual ProgressItem* createProgressItem(const QString& action) const = 0;
39 virtual void addProgressItem(ProgressItem* const item) = 0;
40
41private:
42
43 Q_DISABLE_COPY(FileActionProgressItemCreator)
44};
45
46// -------------------------------------------------------------------------------------------------------------------
47
48class TwoProgressItemsContainer : public QSharedData
49{
50protected:
51
52 QAtomicPointer<ProgressItem> firstItem;
53 QAtomicPointer<ProgressItem> secondItem;
54
55protected:
56
57 // Note: It is currently not safe to schedule after the framework had a chance to
58 // advance all already scheduled items. For this, we'd need to add a mechanism (flag to block completion?)
59
60 void scheduleOnProgressItem(QAtomicPointer<ProgressItem>& ptr, int total,
61 const QString& action, FileActionProgressItemCreator* const creator);
62 void advance(QAtomicPointer<ProgressItem>& ptr, int n);
63};
64
65// -------------------------------------------------------------------------------------------------------------------
66
67class FileActionProgressItemContainer : public QObject,
69{
70 Q_OBJECT
71
72public:
73
75 void schedulingForDB(int numberOfInfos, const QString& action, FileActionProgressItemCreator* const creator);
76 void dbProcessed(int numberOfInfos);
77 void dbFinished();
78 void schedulingForWrite(int numberOfInfos, const QString& action, FileActionProgressItemCreator* const creator);
79 void written(int numberOfInfos);
80 void finishedWriting();
81
82Q_SIGNALS:
83
85
86private:
87
88 // Disable
89 explicit FileActionProgressItemContainer(QObject*);
90};
91
92// -------------------------------------------------------------------------------------------------------------------
93
94class FileActionItemInfoList : public QList<ItemInfo>
95{
96public:
97
99
101 : QList (copy),
102 container(copy.container)
103 {
104 }
105
107
108public:
109
110 static FileActionItemInfoList create(const QList<ItemInfo>& list);
111 static FileActionItemInfoList continueTask(const QList<ItemInfo>& list,
113
115 {
116 return container.data();
117 }
118
120 void schedulingForDB(int numberOfInfos,
121 const QString& action,
122 FileActionProgressItemCreator* const creator)
123 {
124 progress()->schedulingForDB(numberOfInfos, action, creator);
125 }
126
127 void schedulingForDB(const QString& action,
128 FileActionProgressItemCreator* const creator)
129 {
130 schedulingForDB(size(), action, creator);
131 }
132
134 void dbProcessedOne() const { dbProcessed(1); }
135 void dbProcessed(int numberOfInfos) const { progress()->dbProcessed(numberOfInfos); }
136 void dbFinished() const { progress()->dbFinished(); }
137
139 void schedulingForWrite(int numberOfInfos,
140 const QString& action,
141 FileActionProgressItemCreator* const creator) const
142 {
143 progress()->schedulingForWrite(numberOfInfos, action, creator);
144 }
145
146 void schedulingForWrite(const QString& action,
147 FileActionProgressItemCreator* const creator) const
148 {
149 schedulingForWrite(size(), action, creator);
150 }
151
153 void writtenToOne() const { written(1); }
154 void written(int numberOfInfos) const { progress()->written(numberOfInfos); }
156
157public:
158
159 QExplicitlySharedDataPointer<FileActionProgressItemContainer> container;
160
161private:
162
163 explicit FileActionItemInfoList(const QList<ItemInfo>& list)
164 : QList<ItemInfo>(list)
165 {
166 }
167};
168
169} // namespace Digikam
170
171Q_DECLARE_METATYPE(Digikam::FileActionItemInfoList)
Definition fileactionimageinfolist.h:95
void schedulingForWrite(int numberOfInfos, const QString &action, FileActionProgressItemCreator *const creator) const
db worker calls this before sending to file worker
Definition fileactionimageinfolist.h:139
void schedulingForDB(const QString &action, FileActionProgressItemCreator *const creator)
Definition fileactionimageinfolist.h:127
void finishedWriting() const
Definition fileactionimageinfolist.h:155
FileActionItemInfoList(const FileActionItemInfoList &copy)
Definition fileactionimageinfolist.h:100
void schedulingForWrite(const QString &action, FileActionProgressItemCreator *const creator) const
Definition fileactionimageinfolist.h:146
QExplicitlySharedDataPointer< FileActionProgressItemContainer > container
Definition fileactionimageinfolist.h:159
static FileActionItemInfoList create(const QList< ItemInfo > &list)
Definition fileactionimageinfolist.cpp:112
FileActionProgressItemContainer * progress() const
Definition fileactionimageinfolist.h:114
void dbProcessedOne() const
db worker progress info
Definition fileactionimageinfolist.h:134
void writtenToOne() const
file worker calls this when finished
Definition fileactionimageinfolist.h:153
void dbFinished() const
Definition fileactionimageinfolist.h:136
void written(int numberOfInfos) const
Definition fileactionimageinfolist.h:154
static FileActionItemInfoList continueTask(const QList< ItemInfo > &list, FileActionProgressItemContainer *const container)
Definition fileactionimageinfolist.cpp:121
void schedulingForDB(int numberOfInfos, const QString &action, FileActionProgressItemCreator *const creator)
before sending to db worker
Definition fileactionimageinfolist.h:120
void dbProcessed(int numberOfInfos) const
Definition fileactionimageinfolist.h:135
Definition fileactionimageinfolist.h:69
void schedulingForDB(int numberOfInfos, const QString &action, FileActionProgressItemCreator *const creator)
Definition fileactionimageinfolist.cpp:68
void dbProcessed(int numberOfInfos)
Definition fileactionimageinfolist.cpp:75
void dbFinished()
Definition fileactionimageinfolist.cpp:80
void schedulingForWrite(int numberOfInfos, const QString &action, FileActionProgressItemCreator *const creator)
Definition fileactionimageinfolist.cpp:87
void written(int numberOfInfos)
Definition fileactionimageinfolist.cpp:100
void finishedWriting()
Definition fileactionimageinfolist.cpp:105
Definition fileactionimageinfolist.h:33
virtual ~FileActionProgressItemCreator()=default
virtual void addProgressItem(ProgressItem *const item)=0
virtual ProgressItem * createProgressItem(const QString &action) const =0
Definition iteminfo.h:68
Definition progressmanager.h:35
Definition fileactionimageinfolist.h:49
QAtomicPointer< ProgressItem > secondItem
Definition fileactionimageinfolist.h:53
void advance(QAtomicPointer< ProgressItem > &ptr, int n)
Definition fileactionimageinfolist.cpp:55
void scheduleOnProgressItem(QAtomicPointer< ProgressItem > &ptr, int total, const QString &action, FileActionProgressItemCreator *const creator)
Definition fileactionimageinfolist.cpp:28
QAtomicPointer< ProgressItem > firstItem
Definition fileactionimageinfolist.h:52
Definition datefolderview.cpp:34