File indexing completed on 2024-05-12 16:59:53

0001 /*
0002     SPDX-FileCopyrightText: 2020 Harald Sitter <sitter@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 */
0005 
0006 #pragma once
0007 
0008 #include <QAbstractListModel>
0009 #include <QList>
0010 #include <Solid/Device>
0011 
0012 /**
0013  * Model of cifs mount entries. Implementing properties
0014  * as columns rather than roles.
0015  */
0016 class SmbMountModel : public QAbstractListModel
0017 {
0018     Q_OBJECT
0019 public:
0020     enum class Role {
0021         Share = Qt::UserRole + 1,
0022         Path,
0023         Accessible,
0024     };
0025     Q_ENUM(Role)
0026 
0027     explicit SmbMountModel(QObject *parent = nullptr);
0028     ~SmbMountModel() override;
0029 
0030     int rowCount(const QModelIndex &parent) const final;
0031     QVariant data(const QModelIndex &index, int intRole) const final;
0032     bool hasChildren(const QModelIndex &parent) const final;
0033 
0034     QHash<int, QByteArray> roleNames() const final;
0035 
0036 private slots:
0037     void addDevice(const QString &udi);
0038     void removeDevice(const QString &udi);
0039     void reloadData();
0040 
0041 private:
0042     inline QList<Solid::Device>::const_iterator deviceForUdi(const QString &udi) const
0043     {
0044         return std::find_if(m_devices.constBegin(), m_devices.constEnd(), [&udi](const Solid::Device &device) {
0045             return device.udi() == udi;
0046         });
0047     }
0048 
0049     QList<Solid::Device> m_devices;
0050 };