Line data Source code
1 : // SPDX-FileCopyrightText: 2022-2023 Paul Colby <git@colby.id.au> 2 : // SPDX-License-Identifier: LGPL-3.0-or-later 3 : 4 : #ifndef DOKIT_ABSTRACTCOMMAND_H 5 : #define DOKIT_ABSTRACTCOMMAND_H 6 : 7 : #include <QBluetoothDeviceInfo> 8 : #include <QCommandLineParser> 9 : #include <QLoggingCategory> 10 : #include <QObject> 11 : 12 : class PokitDiscoveryAgent; 13 : 14 7683 : class AbstractCommand : public QObject 15 : { 16 396 : Q_OBJECT 17 : 18 : public: 19 : enum class OutputFormat { 20 : Csv, ///< RFC 4180 compliant CSV text. 21 : Json, ///< RFC 8259 compliant JSON text. 22 : Text, ///< Plain unstructured text. 23 : }; 24 : 25 : explicit AbstractCommand(QObject * const parent = nullptr); 26 : 27 : virtual QStringList requiredOptions(const QCommandLineParser &parser) const; 28 : virtual QStringList supportedOptions(const QCommandLineParser &parser) const; 29 : 30 : static QString escapeCsvField(const QString &field); 31 : 32 : template<typename R> 33 : static quint32 parseNumber(const QString &value, const QString &unit, const quint32 sensibleMinimum = 0); 34 : 35 : public slots: 36 : virtual QStringList processOptions(const QCommandLineParser &parser); 37 : virtual bool start() = 0; 38 : 39 : protected: 40 : QString deviceToScanFor; ///< Device (if any) that were passed to processOptions(). 41 : PokitDiscoveryAgent * discoveryAgent; ///< Agent for Pokit device descovery. 42 : OutputFormat format { OutputFormat::Text }; ///< Selected output format. 43 28022 : static Q_LOGGING_CATEGORY(lc, "dokit.cli.command", QtInfoMsg); ///< Logging category for UI commands. 44 : 45 : protected slots: 46 : virtual void deviceDiscovered(const QBluetoothDeviceInfo &info) = 0; 47 : virtual void deviceDiscoveryFinished() = 0; 48 : 49 : friend class TestAbstractCommand; 50 : }; 51 : 52 : #endif // DOKIT_ABSTRACTCOMMAND_H