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