1 /* SPDX-FileCopyrightText: 2003-2020 The KPhotoAlbum Development Team
2 
3    SPDX-License-Identifier: GPL-2.0-or-later
4 */
5 
6 #ifndef THUMBNAILBUILDER_H
7 #define THUMBNAILBUILDER_H
8 
9 #include "ImageClientInterface.h"
10 #include "enums.h"
11 
12 #include <DB/ImageInfoPtr.h>
13 #include <DB/ImageScout.h>
14 #include <kpabase/FileNameList.h>
15 
16 #include <QAtomicInt>
17 #include <QImage>
18 
19 namespace MainWindow
20 {
21 class StatusBar;
22 }
23 namespace MainWindow
24 {
25 class Window;
26 }
27 
28 class QTimer;
29 
30 namespace ImageManager
31 {
32 class ThumbnailCache;
33 
34 class ThumbnailBuilder : public QObject, public ImageManager::ImageClientInterface
35 {
36     Q_OBJECT
37 
38 public:
39     static ThumbnailBuilder *instance();
40 
41     ~ThumbnailBuilder() override;
42     void pixmapLoaded(ImageRequest *request, const QImage &image) override;
43     void requestCanceled() override;
44 
45 public slots:
46     void buildAll(ThumbnailBuildStart when = ImageManager::StartDelayed);
47     void buildMissing();
48     void cancelRequests();
49     void scheduleThumbnailBuild(const DB::FileNameList &list, ThumbnailBuildStart when);
50     void buildOneThumbnail(const DB::ImageInfoPtr &fileName);
51     void doThumbnailBuild();
52     void save();
53 
54 private:
55     friend class MainWindow::Window;
56     static ThumbnailBuilder *s_instance;
57     ThumbnailBuilder(MainWindow::StatusBar *statusBar, QObject *parent, ThumbnailCache *thumbnailCache);
58     void terminateScout();
59     MainWindow::StatusBar *m_statusBar;
60     ThumbnailCache *m_thumbnailCache;
61     int m_count;
62     int m_expectedThumbnails;
63     bool m_isBuilding;
64     QAtomicInt m_loadedCount;
65     DB::ImageScoutQueue *m_preloadQueue;
66     DB::ImageScout *m_scout;
67     QTimer *m_startBuildTimer;
68     DB::FileNameList m_thumbnailsToBuild;
69 };
70 }
71 
72 #endif /* THUMBNAILBUILDER_H */
73 
74 // vi:expandtab:tabstop=4 shiftwidth=4:
75