]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kdirectorycontentscounter.h
KDirectoryContentsCounter: scan first path not in cache
[dolphin.git] / src / kitemviews / private / kdirectorycontentscounter.h
index 425c3632aa39f4e447aed5aa64ccb7dbc7afc115..01bf3077917138749e5b4782c433093a2110f528 100644 (file)
@@ -23,8 +23,9 @@
 
 #include "kdirectorycontentscounterworker.h"
 
+#include <QLinkedList>
 #include <QSet>
-#include <QQueue>
+#include <QHash>
 
 class KDirWatch;
 class KFileItemModel;
@@ -35,8 +36,8 @@ class KDirectoryContentsCounter : public QObject
     Q_OBJECT
 
 public:
-    explicit KDirectoryContentsCounter(KFileItemModel* model, QObject* parent = 0);
-    ~KDirectoryContentsCounter();
+    explicit KDirectoryContentsCounter(KFileItemModel* model, QObject* parent = nullptr);
+    ~KDirectoryContentsCounter() override;
 
     /**
      * Requests the number of items inside the directory \a path. The actual
@@ -45,28 +46,23 @@ public:
      *
      * The directory \a path is watched for changes, and the signal is emitted
      * again if a change occurs.
-     */
-    void addDirectory(const QString& path);
-
-    /**
-     * In contrast to \a addDirectory, this function counts the items inside
-     * the directory \a path synchronously and returns the result.
      *
-     * The directory is watched for changes, and the signal \a result is
-     * emitted if a change occurs.
+     * Uses a cache internally to speed up first result,
+     * but emit again result when the cache was updated
      */
-    int countDirectoryContentsSynchronously(const QString& path);
+    void scanDirectory(const QString& path);
 
 signals:
     /**
-     * Signals that the directory \a path contains \a count items.
+     * Signals that the directory \a path contains \a count items of size \a
+     * Size calculation depends on parameter DetailsModeSettings::recursiveDirectorySizeLimit
      */
-    void result(const QString& path, int count);
+    void result(const QString& path, int count, long size);
 
     void requestDirectoryContentsCount(const QString& path, KDirectoryContentsCounterWorker::Options options);
 
 private slots:
-    void slotResult(const QString& path, int count);
+    void slotResult(const QString& path, int count, long size);
     void slotDirWatchDirty(const QString& path);
     void slotItemsRemoved();
 
@@ -76,9 +72,11 @@ private:
 private:
     KFileItemModel* m_model;
 
-    QQueue<QString> m_queue;
+    QLinkedList<QString> m_priorityQueue;
+    QLinkedList<QString> m_queue;
+
+    static QThread* m_workerThread;
 
-    QThread* m_workerThread;
     KDirectoryContentsCounterWorker* m_worker;
     bool m_workerIsBusy;
 
@@ -87,4 +85,4 @@ private:
                                     // to get all watched directories.
 };
 
-#endif
\ No newline at end of file
+#endif