File indexing completed on 2025-02-02 05:02:33

0001 /*
0002     SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef PKPASSMANAGER_H
0008 #define PKPASSMANAGER_H
0009 
0010 #include <QHash>
0011 #include <QObject>
0012 
0013 #include <functional>
0014 
0015 class QNetworkAccessManager;
0016 
0017 namespace KPkPass {
0018 class Pass;
0019 }
0020 
0021 class PkPassManager : public QObject
0022 {
0023     Q_OBJECT
0024 public:
0025     explicit PkPassManager(QObject *parent = nullptr);
0026     ~PkPassManager() override;
0027 
0028     void setNetworkAccessManagerFactory(const std::function<QNetworkAccessManager*()> &namFactory);
0029 
0030     QVector<QString> passes() const;
0031 
0032     Q_INVOKABLE KPkPass::Pass* pass(const QString &passId);
0033     Q_INVOKABLE bool hasPass(const QString &passId) const;
0034     Q_INVOKABLE static QString passId(const QVariant &reservation);
0035 
0036     /** Import pass from a local @p url, returns the pass id if successful. */
0037     QString importPass(const QUrl &url);
0038     QString importPassFromData(const QByteArray &data);
0039     Q_INVOKABLE void removePass(const QString &passId);
0040 
0041     void updatePass(const QString &passId);
0042     /** Time the pass was last updated (ie. file system mtime). */
0043     QDateTime updateTime(const QString &passId) const;
0044 
0045     static QDateTime relevantDate(KPkPass::Pass *pass);
0046     /** Check whether @p pass can be online updated. */
0047     static bool canUpdate(KPkPass::Pass *pass);
0048 
0049     /** Raw pass file data, used for exporting. */
0050     QByteArray rawData(const QString &passId) const;
0051 
0052 Q_SIGNALS:
0053     void passAdded(const QString &passId);
0054     void passUpdated(const QString &passId, const QStringList &changes);
0055     void passRemoved(const QString &passId);
0056 
0057 private:
0058     enum ImportMode { Copy, Move, Data };
0059     void importPassFromTempFile(const QUrl &tmpFile);
0060     QString doImportPass(const QUrl &url, const QByteArray &data, ImportMode mode);
0061 
0062     QHash<QString, KPkPass::Pass*> m_passes;
0063     std::function<QNetworkAccessManager*()> m_namFactory;
0064 };
0065 
0066 #endif // PKPASSMANAGER_H