Line data Source code
1 : // SPDX-FileCopyrightText: 2022-2024 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 8745 : class AbstractCommand : public QObject 15 : { 16 466 : Q_OBJECT 17 : 18 : public: 19 : /// Supported output formats. 20 : enum class OutputFormat { 21 : Csv, ///< RFC 4180 compliant CSV text. 22 : Json, ///< RFC 8259 compliant JSON text. 23 : Text, ///< Plain unstructured text. 24 : }; 25 : 26 : explicit AbstractCommand(QObject * const parent = nullptr); 27 : 28 : virtual QStringList requiredOptions(const QCommandLineParser &parser) const; 29 : virtual QStringList supportedOptions(const QCommandLineParser &parser) const; 30 : 31 : static QString escapeCsvField(const QString &field); 32 : 33 : template<typename R> 34 : static quint32 parseNumber(const QString &value, const QString &unit, const quint32 sensibleMinimum = 0); 35 : 36 : public slots: 37 : virtual QStringList processOptions(const QCommandLineParser &parser); 38 : virtual bool start() = 0; 39 : 40 : protected: 41 : QString deviceToScanFor; ///< Device (if any) that were passed to processOptions(). 42 : PokitDiscoveryAgent * discoveryAgent; ///< Agent for Pokit device descovery. 43 : OutputFormat format { OutputFormat::Text }; ///< Selected output format. 44 31008 : static Q_LOGGING_CATEGORY(lc, "dokit.cli.command", QtInfoMsg); ///< Logging category for UI commands. 45 : 46 : protected slots: 47 : virtual void deviceDiscovered(const QBluetoothDeviceInfo &info) = 0; 48 : virtual void deviceDiscoveryFinished() = 0; 49 : 50 : friend class TestAbstractCommand; 51 : }; 52 : 53 : #endif // DOKIT_ABSTRACTCOMMAND_H