File indexing completed on 2024-05-05 10:08:40
0001 /* 0002 SPDX-FileCopyrightText: 2017-2020 Andrius Štikonas <andrius@stikonas.eu> 0003 SPDX-FileCopyrightText: 2018 Huzaifa Faruqui <huzaifafaruqui@gmail.com> 0004 SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho <caiojcarvalho@gmail.com> 0005 SPDX-FileCopyrightText: 2019 Shubham Jangra <aryan100jangid@gmail.com> 0006 SPDX-FileCopyrightText: 2020 David Edmundson <kde@davidedmundson.co.uk> 0007 0008 SPDX-License-Identifier: GPL-3.0-or-later 0009 */ 0010 0011 #ifndef KPMCORE_EXTERNALCOMMANDHELPER_H 0012 #define KPMCORE_EXTERNALCOMMANDHELPER_H 0013 0014 #include <memory> 0015 #include <unordered_set> 0016 0017 #include <QDBusContext> 0018 #include <QEventLoop> 0019 #include <QFile> 0020 #include <QProcess> 0021 #include <QString> 0022 0023 class QDBusServiceWatcher; 0024 constexpr qint64 MiB = 1 << 20; 0025 0026 class ExternalCommandHelper : public QObject, public QDBusContext 0027 { 0028 Q_OBJECT 0029 Q_CLASSINFO("D-Bus Interface", "org.kde.kpmcore.externalcommand") 0030 0031 Q_SIGNALS: 0032 Q_SCRIPTABLE void progress(int); 0033 Q_SCRIPTABLE void report(QString); 0034 0035 public: 0036 ExternalCommandHelper(); 0037 bool readData(QFile& device, QByteArray& buffer, const qint64 offset, const qint64 size); 0038 bool writeData(QFile& device, const QByteArray& buffer, const qint64 offset); 0039 0040 public Q_SLOTS: 0041 Q_SCRIPTABLE QVariantMap RunCommand(const QString& command, const QStringList& arguments, const QByteArray& input, const int processChannelMode); 0042 Q_SCRIPTABLE QVariantMap CopyFileData(const QString& sourceDevice, const qint64 sourceOffset, const qint64 sourceLength, 0043 const QString& targetDevice, const qint64 targetOffset, const qint64 blockSize); 0044 Q_SCRIPTABLE QByteArray ReadData(const QString& device, const qint64 offset, const qint64 length); 0045 Q_SCRIPTABLE bool WriteData(const QByteArray& buffer, const QString& targetDevice, const qint64 targetOffset); 0046 Q_SCRIPTABLE bool WriteFstab(const QByteArray& fstabContents); 0047 0048 private: 0049 bool isCallerAuthorized(); 0050 0051 void onReadOutput(); 0052 QDBusServiceWatcher *m_serviceWatcher = nullptr; 0053 }; 0054 0055 #endif