QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
FTPController.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QObject>
4#include <QtCore/QString>
5#include <QtCore/QStringList>
6#include <QtCore/QUrl>
7#include <QtQmlIntegration/QtQmlIntegration>
8
9#include "MAVLinkEnums.h"
10#include "QGCArchiveModel.h"
11#include "QGCLoggingCategory.h"
12
13class FTPManager;
14class Vehicle;
16
19class FTPController : public QObject
20{
21 Q_OBJECT
22 QML_ELEMENT
23 Q_MOC_INCLUDE("Vehicle.h")
24
25 Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
26 Q_PROPERTY(bool listInProgress READ listInProgress NOTIFY activeOperationChanged)
30 Q_PROPERTY(float progress READ progress NOTIFY progressChanged)
31 Q_PROPERTY(QString errorString READ errorString NOTIFY errorStringChanged)
32 Q_PROPERTY(QString currentPath READ currentPath NOTIFY currentPathChanged)
33 Q_PROPERTY(QStringList directoryEntries READ directoryEntries NOTIFY directoryEntriesChanged)
34 Q_PROPERTY(QString lastDownloadFile READ lastDownloadFile NOTIFY lastDownloadFileChanged)
35 Q_PROPERTY(QString lastUploadTarget READ lastUploadTarget NOTIFY lastUploadTargetChanged)
37 Q_PROPERTY(bool extracting READ extracting NOTIFY extractingChanged)
39 Q_PROPERTY(QGCArchiveModel* archiveModel READ archiveModel CONSTANT)
40
41public:
42 explicit FTPController(QObject *parent = nullptr);
43
44 bool busy() const { return _busy; }
45 bool listInProgress() const { return _operation == Operation::List; }
46 bool downloadInProgress() const { return _operation == Operation::Download; }
47 bool uploadInProgress() const { return _operation == Operation::Upload; }
48 bool deleteInProgress() const { return _operation == Operation::Delete; }
49 float progress() const { return _progress; }
50 QString errorString() const { return _errorString; }
51 QString currentPath() const { return _currentPath; }
52 QStringList directoryEntries() const { return _directoryEntries; }
53 QString lastDownloadFile() const { return _lastDownloadFile; }
54 QString lastUploadTarget() const { return _lastUploadTarget; }
55 bool lastDownloadIsArchive() const { return _lastDownloadIsArchive; }
56 bool extracting() const { return _extracting; }
57 float extractionProgress() const { return _extractionProgress; }
58 QGCArchiveModel* archiveModel() const { return _archiveModel; }
59
60 Q_INVOKABLE bool listDirectory(const QString &uri, int componentId = MAV_COMP_ID_AUTOPILOT1);
61 Q_INVOKABLE bool downloadFile(const QString &uri, const QString &localDir, const QString &fileName = QString(), int componentId = MAV_COMP_ID_AUTOPILOT1);
62 Q_INVOKABLE bool uploadFile(const QString &localFile, const QString &uri, int componentId = MAV_COMP_ID_AUTOPILOT1);
63 Q_INVOKABLE bool deleteFile(const QString &uri, int componentId = MAV_COMP_ID_AUTOPILOT1);
64 Q_INVOKABLE void cancelActiveOperation();
65
69 Q_INVOKABLE bool browseArchive(const QString &archivePath);
70
75 Q_INVOKABLE bool extractArchive(const QString &archivePath, const QString &outputDir = QString());
76
78 Q_INVOKABLE void cancelExtraction();
79
80signals:
89 void downloadComplete(const QString &filePath, const QString &error);
90 void uploadComplete(const QString &remotePath, const QString &error);
91 void deleteComplete(const QString &remotePath, const QString &error);
94 void extractionComplete(const QString &outputDir, const QString &error);
95
96private slots:
97 void _handleDownloadComplete(const QString &filePath, const QString &error);
98 void _handleUploadComplete(const QString &remotePath, const QString &error);
99 void _handleDirectoryComplete(const QStringList &entries, const QString &error);
100 void _handleDeleteComplete(const QString &remotePath, const QString &error);
101 void _handleCommandProgress(float value);
102 void _handleExtractionProgress(qreal progress);
103 void _handleExtractionFinished(bool success);
104
105private:
106 enum class Operation {
107 None,
108 List,
109 Download,
110 Upload,
111 Delete,
112 };
113
114 void _setBusy(bool busy);
115 void _setOperation(Operation operation);
116 void _clearOperation();
117 void _setErrorString(const QString &error);
118 void _resetDirectoryState();
119 uint8_t _componentIdForRequest(int componentId) const;
120
121 Vehicle *_vehicle = nullptr;
122 FTPManager *_ftpManager = nullptr;
123 Operation _operation = Operation::None;
124 bool _busy = false;
125 float _progress = 0.0F;
126 QString _errorString;
127 QString _currentPath;
128 QStringList _directoryEntries;
129 QString _lastDownloadFile;
130 QString _lastUploadTarget;
131 bool _lastDownloadIsArchive = false;
132 bool _extracting = false;
133 float _extractionProgress = 0.0F;
134 QString _extractionOutputDir;
135 QGCArchiveModel *_archiveModel = nullptr;
136 QGCCompressionJob *_extractionJob = nullptr;
137};
Error error
QML-facing controller for MAVLink FTP operations.
void uploadComplete(const QString &remotePath, const QString &error)
void directoryEntriesChanged()
float progress() const
void downloadComplete(const QString &filePath, const QString &error)
bool uploadInProgress() const
void extractionComplete(const QString &outputDir, const QString &error)
bool downloadInProgress() const
Q_INVOKABLE void cancelActiveOperation()
Q_INVOKABLE bool downloadFile(const QString &uri, const QString &localDir, const QString &fileName=QString(), int componentId=MAV_COMP_ID_AUTOPILOT1)
void currentPathChanged()
QGCArchiveModel * archiveModel() const
void errorStringChanged()
bool busy() const
bool listInProgress() const
Q_INVOKABLE bool extractArchive(const QString &archivePath, const QString &outputDir=QString())
Q_INVOKABLE bool uploadFile(const QString &localFile, const QString &uri, int componentId=MAV_COMP_ID_AUTOPILOT1)
bool deleteInProgress() const
Q_INVOKABLE void cancelExtraction()
Cancel an in-progress extraction.
float extractionProgress() const
void progressChanged()
QString lastDownloadFile() const
void extractingChanged()
QString lastUploadTarget() const
void deleteComplete(const QString &remotePath, const QString &error)
void extractionProgressChanged()
Q_INVOKABLE bool browseArchive(const QString &archivePath)
QString errorString() const
void activeOperationChanged()
void lastDownloadFileChanged()
QStringList directoryEntries() const
void lastUploadTargetChanged()
bool extracting() const
Q_INVOKABLE bool deleteFile(const QString &uri, int componentId=MAV_COMP_ID_AUTOPILOT1)
bool lastDownloadIsArchive() const
QString currentPath() const
Q_INVOKABLE bool listDirectory(const QString &uri, int componentId=MAV_COMP_ID_AUTOPILOT1)
void busyChanged()
List model for archive contents, suitable for QML ListView binding.
QObject wrapper for compression operations with progress signals.