File indexing completed on 2024-03-24 17:11:28

0001 /*
0002  *   SPDX-FileCopyrightText: 2017, 2018, 2019 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_COMMON_VAULT_INFO_H
0008 #define PLASMAVAULT_COMMON_VAULT_INFO_H
0009 
0010 #include <QDBusArgument>
0011 #include <QDebug>
0012 #include <QString>
0013 
0014 namespace PlasmaVault
0015 {
0016 /**
0017  * Class used to serialize the vault data for DBus communication
0018  */
0019 class VaultInfo
0020 {
0021 public:
0022     enum Status {
0023         NotInitialized = 0,
0024         Opened = 1,
0025         Closed = 2,
0026 
0027         Creating = 3,
0028         Opening = 4,
0029         Closing = 5,
0030         Dismantling = 6,
0031         Dismantled = 7,
0032 
0033         DeviceMissing = 254,
0034 
0035         Error = 255,
0036     };
0037     // Q_ENUM(Status); // VaultInfo is not a QObject or anything like that
0038 
0039     QString name;
0040     QString device;
0041     QString mountPoint;
0042 
0043     Status status;
0044     QString message;
0045 
0046     QStringList activities;
0047     bool isOfflineOnly;
0048 
0049     inline bool isInitialized() const
0050     {
0051         return status == Closed || status == Opened || status == Closing || status == Opening;
0052     }
0053 
0054     inline bool isOpened() const
0055     {
0056         return status == Opened;
0057     }
0058 
0059     inline bool isBusy() const
0060     {
0061         return status == Creating || status == Opening || status == Closing || status == Dismantling;
0062     }
0063 };
0064 
0065 typedef QList<VaultInfo> VaultInfoList;
0066 
0067 inline QDebug &operator<<(QDebug &debug, const VaultInfo &vaultInfo)
0068 {
0069     debug << vaultInfo.name << vaultInfo.device << vaultInfo.mountPoint
0070 
0071           << (quint16)vaultInfo.status << vaultInfo.message
0072 
0073           << vaultInfo.activities << vaultInfo.isOfflineOnly;
0074     return debug;
0075 }
0076 
0077 inline QDBusArgument &operator<<(QDBusArgument &argument, const VaultInfo &vaultInfo)
0078 {
0079     argument.beginStructure();
0080     argument << vaultInfo.name << vaultInfo.device << vaultInfo.mountPoint
0081 
0082              << (quint16)vaultInfo.status << vaultInfo.message
0083 
0084              << vaultInfo.activities << vaultInfo.isOfflineOnly;
0085     argument.endStructure();
0086     return argument;
0087 }
0088 
0089 inline const QDBusArgument &operator>>(const QDBusArgument &argument, VaultInfo &vaultInfo)
0090 {
0091     quint16 status;
0092     argument.beginStructure();
0093     argument >> vaultInfo.name >> vaultInfo.device >> vaultInfo.mountPoint
0094 
0095         >> status >> vaultInfo.message
0096 
0097         >> vaultInfo.activities >> vaultInfo.isOfflineOnly;
0098     vaultInfo.status = (VaultInfo::Status)status;
0099     argument.endStructure();
0100     return argument;
0101 }
0102 
0103 } // namespace PlasmaVault
0104 
0105 Q_DECLARE_METATYPE(PlasmaVault::VaultInfo)
0106 Q_DECLARE_METATYPE(PlasmaVault::VaultInfoList)
0107 
0108 #endif // include guard