File indexing completed on 2024-04-21 05:48:31

0001 /***********************************************************************
0002  * SPDX-FileCopyrightText: 2003-2004 Max Howell <max.howell@methylblue.com>
0003  * SPDX-FileCopyrightText: 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
0004  * SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org>
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0007  ***********************************************************************/
0008 
0009 #pragma once
0010 
0011 #include <QByteArray>
0012 #include <QMutex>
0013 #include <QThread>
0014 
0015 class Folder;
0016 
0017 namespace Filelight
0018 {
0019 class ScanManager;
0020 
0021 class LocalLister : public QThread
0022 {
0023     Q_OBJECT
0024 
0025 public:
0026     LocalLister(const QString &path, QList<std::shared_ptr<Folder>> *cachedTrees, ScanManager *parent);
0027 
0028     static void readMounts();
0029 
0030 Q_SIGNALS:
0031     void branchCompleted(std::shared_ptr<Folder> tree);
0032 
0033 private:
0034     QString m_path;
0035     QMutex m_treeMutex;
0036     QList<std::shared_ptr<Folder>> *m_trees;
0037     ScanManager *m_parent;
0038 
0039 private:
0040     void run() override;
0041     std::shared_ptr<Folder> scan(const QByteArray &, const QByteArray &);
0042 
0043 private:
0044     static QStringList s_localMounts;
0045     static QStringList s_remoteMounts; // TODO namespace
0046 };
0047 } // namespace Filelight
0048 
0049 namespace std
0050 {
0051 template<>
0052 struct default_delete<Filelight::LocalLister> {
0053     void operator()(Filelight::LocalLister *ptr) const
0054     {
0055         // It's a QThread, delete on its own event loop, not the deleters. Ensures against data races.
0056         ptr->deleteLater();
0057     }
0058 };
0059 } // namespace std