File indexing completed on 2024-05-05 04:22:01

0001 // SPDX-FileCopyrightText: 2003-2022 The KPhotoAlbum Development Team
0002 //
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004 
0005 #ifndef THUMBNAILBUILDER_H
0006 #define THUMBNAILBUILDER_H
0007 
0008 #include "ImageClientInterface.h"
0009 #include "enums.h"
0010 
0011 #include <DB/ImageInfoPtr.h>
0012 #include <DB/ImageScout.h>
0013 #include <kpabase/FileNameList.h>
0014 
0015 #include <QAtomicInt>
0016 #include <QImage>
0017 
0018 namespace MainWindow
0019 {
0020 class StatusBar;
0021 }
0022 namespace MainWindow
0023 {
0024 class Window;
0025 }
0026 
0027 class QTimer;
0028 
0029 namespace ImageManager
0030 {
0031 class ThumbnailCache;
0032 
0033 class ThumbnailBuilder : public QObject, public ImageManager::ImageClientInterface
0034 {
0035     Q_OBJECT
0036 
0037 public:
0038     static ThumbnailBuilder *instance();
0039 
0040     ~ThumbnailBuilder() override;
0041     void pixmapLoaded(ImageRequest *request, const QImage &image) override;
0042     void requestCanceled() override;
0043 
0044 public Q_SLOTS:
0045     void buildAll(ThumbnailBuildStart when = ImageManager::StartDelayed);
0046     void buildMissing();
0047     void cancelRequests();
0048     void scheduleThumbnailBuild(const DB::FileNameList &list, ThumbnailBuildStart when);
0049     void buildOneThumbnail(const DB::ImageInfoPtr &fileName);
0050     void doThumbnailBuild();
0051     void save();
0052 
0053 private:
0054     friend class MainWindow::Window;
0055     static ThumbnailBuilder *s_instance;
0056     ThumbnailBuilder(MainWindow::StatusBar *statusBar, QObject *parent, ThumbnailCache *thumbnailCache);
0057     void terminateScout();
0058     MainWindow::StatusBar *m_statusBar;
0059     ThumbnailCache *m_thumbnailCache;
0060     int m_count;
0061     int m_expectedThumbnails;
0062     bool m_isBuilding;
0063     QAtomicInt m_loadedCount;
0064     DB::ImageScoutQueue *m_preloadQueue;
0065     DB::ImageScout *m_scout;
0066     QTimer *m_startBuildTimer;
0067     DB::FileNameList m_thumbnailsToBuild;
0068 };
0069 }
0070 
0071 #endif /* THUMBNAILBUILDER_H */
0072 
0073 // vi:expandtab:tabstop=4 shiftwidth=4: