File indexing completed on 2024-05-05 17:43:11

0001 /*
0002  *   SPDX-FileCopyrightText: 2017 Ivan Cukic <ivan.cukic (at) kde.org>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #ifndef PLASMAVAULT_KDED_ENGINE_BACKEND_P_H
0008 #define PLASMAVAULT_KDED_ENGINE_BACKEND_P_H
0009 
0010 #include <QDir>
0011 #include <QList>
0012 #include <QString>
0013 #include <QStringList>
0014 
0015 #include <memory>
0016 
0017 #include "commandresult.h"
0018 #include "vault.h"
0019 
0020 namespace PlasmaVault
0021 {
0022 class Backend
0023 {
0024 public:
0025     typedef std::shared_ptr<Backend> Ptr;
0026 
0027     Backend();
0028     virtual ~Backend();
0029 
0030     virtual bool isInitialized(const Device &device) const = 0;
0031     virtual bool isOpened(const MountPoint &mountPoint) const = 0;
0032 
0033     virtual FutureResult<> initialize(const QString &name, const Device &device, const MountPoint &mountPoint, const Vault::Payload &payload) = 0;
0034 
0035     virtual FutureResult<> import(const QString &name, const Device &device, const MountPoint &mountPoint, const Vault::Payload &payload) = 0;
0036 
0037     virtual FutureResult<> open(const Device &device, const MountPoint &mountPoint, const Vault::Payload &payload) = 0;
0038 
0039     virtual FutureResult<> close(const Device &device, const MountPoint &mountPoint) = 0;
0040 
0041     virtual FutureResult<> dismantle(const Device &device, const MountPoint &mountPoint, const Vault::Payload &payload) = 0;
0042 
0043     virtual FutureResult<> validateBackend() = 0;
0044 
0045     virtual QString name() const = 0;
0046 
0047     static QStringList availableBackends();
0048 
0049     static Ptr instance(const QString &backend);
0050 
0051     QString formatMessageLine(const QString &command, const QPair<bool, QString> &result) const;
0052 
0053     static inline bool directoryExists(const QString &path)
0054     {
0055         QDir dir(path);
0056 
0057         if (!dir.exists())
0058             return false;
0059 
0060         return !dir.entryList(QDir::NoDotAndDotDot | QDir::AllEntries).isEmpty();
0061     }
0062 };
0063 
0064 } // namespace PlasmaVault
0065 
0066 #endif // include guard