digiKam
Loading...
Searching...
No Matches
loadingcache.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 : 2006-01-11
7 * Description : shared image loading and caching
8 *
9 * SPDX-FileCopyrightText: 2005-2011 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 <QPixmap>
20
21// Local includes
22
23#include "dimg.h"
24#include "loadsavethread.h"
25#include "digikam_export.h"
26
27namespace Digikam
28{
29
30class ICCSettingsContainer;
31
33{
34public:
35
37 virtual ~LoadingProcessListener() = default;
38
39 virtual bool querySendNotifyEvent() const = 0;
40 virtual void setResult(const LoadingDescription& loadingDescription, const DImg& img) = 0;
41 virtual LoadSaveNotifier* loadSaveNotifier() const = 0;
43
44private:
45
46 // Disable
48 LoadingProcessListener& operator=(const LoadingProcessListener&) = delete;
49};
50
51// --------------------------------------------------------------------------------------------------------------
52
54{
55public:
56
57 LoadingProcess() = default;
58 virtual ~LoadingProcess() = default;
59
60 virtual bool completed() const = 0;
61 virtual QString cacheKey() const = 0;
62 virtual void addListener(LoadingProcessListener* const listener) = 0;
63 virtual void removeListener(LoadingProcessListener* const listener) = 0;
64 virtual void notifyNewLoadingProcess(LoadingProcess* const process, const LoadingDescription& description) = 0;
65
66private:
67
68 // Disable
69 LoadingProcess(const LoadingProcess&) = delete;
70 LoadingProcess& operator=(const LoadingProcess&) = delete;
71};
72
73// --------------------------------------------------------------------------------------------------------------
74
75class DIGIKAM_EXPORT LoadingCacheFileWatch : public QObject
76{
77 Q_OBJECT
78
79public:
80
82 ~LoadingCacheFileWatch() override;
83
84 void addedImage(const QString& filePath);
85 void removeImage(const QString& filePath);
86 void checkFileWatch(const QString& filePath);
87
88protected:
89
96 void notifyFileChanged(const QString& filePath);
97
98protected:
99
100 friend class LoadingCache;
101
102 QHash<QString, QPair<qint64, QDateTime> > m_watchHash;
103 class LoadingCache* m_cache = nullptr;
104
105private:
106
107 // Disable
109 LoadingCacheFileWatch& operator=(const LoadingCacheFileWatch&) = delete;
110 LoadingCacheFileWatch(QObject*) = delete;
111};
112
113// --------------------------------------------------------------------------------------------------------------
114
115class DIGIKAM_EXPORT LoadingCache : public QObject
116{
117 Q_OBJECT
118
119public:
120
125 class DIGIKAM_EXPORT CacheLock
126 {
127 public:
128
129 explicit CacheLock(LoadingCache* const cache);
130 ~CacheLock();
131 void wakeAll();
132 void timedWait();
133
134 private:
135
136 // Disable
137 CacheLock(const CacheLock&) = delete;
138 CacheLock& operator=(const CacheLock&) = delete;
139
140 LoadingCache* m_cache = nullptr;
141 };
142
143public:
144
145 static LoadingCache* cache();
146 static void cleanUp();
147
152 DImg* retrieveImage(const QString& cacheKey) const;
153
157 bool isCacheable(const DImg& img) const;
158
167 bool putImage(const QString& cacheKey, const DImg& img, const QString& filePath) const;
168
172 void removeImage(const QString& cacheKey);
173
177 void removeImages();
178
179 // ------- Loading process management -----------------------------------
180
184 LoadingProcess* retrieveLoadingProcess(const QString& cacheKey) const;
185
190 void addLoadingProcess(LoadingProcess* const process);
191
195 void removeLoadingProcess(LoadingProcess* const process);
196
200 void notifyNewLoadingProcess(LoadingProcess* const process, const LoadingDescription& description);
201
206 void setCacheSize(int megabytes);
207
211 quint64 getCacheSize() const;
212
213 // ------- Thumbnail cache -----------------------------------
214
224 const QImage* retrieveThumbnail(const QString& cacheKey) const;
225 const QPixmap* retrieveThumbnailPixmap(const QString& cacheKey) const;
226 const QPixmap* retrieveBufferedTPixmap(const QString& cacheKey) const;
227 bool hasThumbnailPixmap(const QString& cacheKey) const;
228
232 void putThumbnail(const QString& cacheKey, const QImage& thumb, const QString& filePath);
233 void putThumbnail(const QString& cacheKey, const QPixmap& thumb, const QString& filePath);
234
238 void removeThumbnail(const QString& cacheKey);
239
243 void removeThumbnails();
244
258 void setThumbnailCacheSize(int numberOfQImages, int numberOfQPixmaps);
259
260 // ------- File Watch Management -----------------------------------
261
266 void setFileWatch(LoadingCacheFileWatch* const watch);
267
272 void notifyFileChanged(const QString& filePath, bool notify = true);
273
274Q_SIGNALS:
275
281 void fileChanged(const QString& filePath);
282
283private Q_SLOTS:
284
285 void iccSettingsChanged(const ICCSettingsContainer& current, const ICCSettingsContainer& previous);
286
287private:
288
289 // Disabled
290 LoadingCache();
291 explicit LoadingCache(QObject*) = delete;
292 ~LoadingCache() override;
293
294 LoadingCache(const LoadingCache&) = delete;
295 LoadingCache& operator=(const LoadingCache&) = delete;
296
297private:
298
300 friend class CacheLock;
301
302private:
303
304 static LoadingCache* m_instance;
305
306 class Private;
307 Private* const d = nullptr;
308};
309
310} // namespace Digikam
Definition dimg.h:52
Definition iccsettingscontainer.h:35
Definition loadsavethread.h:41
AccessMode
Definition loadsavethread.h:117
Definition loadingcache.h:76
QHash< QString, QPair< qint64, QDateTime > > m_watchHash
Definition loadingcache.h:102
Definition loadingcache.h:126
Definition loadingcache.h:116
void fileChanged(const QString &filePath)
Definition loadingdescription.h:35
Definition loadingcache.h:33
virtual LoadSaveThread::AccessMode accessMode() const =0
virtual bool querySendNotifyEvent() const =0
virtual ~LoadingProcessListener()=default
virtual void setResult(const LoadingDescription &loadingDescription, const DImg &img)=0
virtual LoadSaveNotifier * loadSaveNotifier() const =0
Definition loadingcache.h:54
virtual ~LoadingProcess()=default
virtual QString cacheKey() const =0
virtual bool completed() const =0
virtual void notifyNewLoadingProcess(LoadingProcess *const process, const LoadingDescription &description)=0
virtual void removeListener(LoadingProcessListener *const listener)=0
virtual void addListener(LoadingProcessListener *const listener)=0
Definition datefolderview.cpp:34