File indexing completed on 2024-04-28 05:34:17
0001 // SPDX-FileCopyrightText: 2018 Daniel Vrátil <dvratil@kde.org> 0002 // 0003 // SPDX-License-Identifier: LGPL-2.1-or-later 0004 0005 #ifndef PASSWORDSMODEL_H_ 0006 #define PASSWORDSMODEL_H_ 0007 0008 #include <QAbstractItemModel> 0009 #include <QDir> 0010 #include <QFileSystemWatcher> 0011 0012 #include <memory> 0013 0014 namespace PlasmaPass 0015 { 0016 class PasswordsModel : public QAbstractItemModel 0017 { 0018 Q_OBJECT 0019 0020 struct Node; 0021 0022 public: 0023 enum EntryType { 0024 FolderEntry, 0025 PasswordEntry, 0026 }; 0027 Q_ENUM(EntryType) 0028 0029 enum Roles { 0030 NameRole = Qt::DisplayRole, 0031 EntryTypeRole = Qt::UserRole, 0032 FullNameRole, 0033 PathRole, 0034 PasswordRole, 0035 OTPRole, 0036 HasPasswordRole, 0037 HasOTPRole 0038 }; 0039 0040 explicit PasswordsModel(QObject *parent = nullptr); 0041 ~PasswordsModel() override; 0042 0043 QHash<int, QByteArray> roleNames() const override; 0044 0045 int rowCount(const QModelIndex &parent) const override; 0046 int columnCount(const QModelIndex &parent) const override; 0047 0048 QModelIndex index(int row, int column, const QModelIndex &parent) const override; 0049 QModelIndex parent(const QModelIndex &child) const override; 0050 0051 QVariant data(const QModelIndex &index, int role) const override; 0052 0053 private: 0054 void populate(); 0055 void populateDir(const QDir &dir, Node *parent); 0056 0057 static Node *node(const QModelIndex &index); 0058 0059 QFileSystemWatcher mWatcher; 0060 QDir mPassStore; 0061 0062 std::unique_ptr<Node> mRoot; 0063 }; 0064 0065 } 0066 #endif