24 Q_MOC_INCLUDE(
"Vehicle.h")
25 Q_MOC_INCLUDE(
"QmlObjectListModel.h")
46 Q_INVOKABLE
void download(const QString &path = QString());
63 QString
transport()
const {
return (_transport == Transport::Ftp) ? QStringLiteral(
"ftp") : QStringLiteral(
"messages"); }
83 void _setActiveVehicle(
Vehicle *vehicle);
85 void _logEntry(uint32_t time_utc, uint32_t size, uint16_t
id, uint16_t num_logs, uint16_t last_log_num);
86 void _logData(uint32_t ofs, uint16_t
id, uint8_t count,
const uint8_t *data);
87 void _processDownload();
88 void _handleCompressionProgress(qreal progress);
89 void _handleCompressionFinished(
bool success);
91 void _ftpListDirComplete(
const QStringList &dirList,
const QString &errorMsg);
92 void _ftpDownloadComplete(
const QString &file,
const QString &errorMsg);
93 void _ftpDownloadProgress(
float value);
94 void _ftpDeleteComplete(
const QString &file,
const QString &errorMsg);
97 enum class Transport { Messages, Ftp };
98 enum class FtpListState { Idle, ListingRoot, ListingSubdir };
101 bool _getRequestingList()
const {
return _requestingLogEntries; }
102 bool _getDownloadingLogs()
const {
return _downloadingLogs; }
104 bool _chunkComplete()
const;
105 bool _entriesComplete()
const;
106 bool _logComplete()
const;
107 bool _prepareLogDownload();
108 void _downloadToDirectory(
const QString &dir);
109 void _findMissingData();
110 void _findMissingEntries();
111 void _receivedAllData();
112 void _receivedAllEntries();
113 void _requestLogData(uint16_t
id, uint32_t offset, uint32_t count,
int retryCount = 0);
114 void _requestLogList(uint32_t start, uint32_t end);
115 void _requestLogEnd();
116 void _resetSelection(
bool canceled =
false);
117 void _setDownloading(
bool active);
118 void _setListing(
bool active);
119 void _updateDataRate();
121 void _sortEntriesByTimestamp();
124 void _ftpStartListing();
126 void _ftpListNextSubdir();
127 uint _ftpProcessFileEntries(
const QStringList &dirList,
const QString &subdir);
128 void _ftpFinishListing();
129 void _ftpFallbackToMessages();
130 void _ftpDownloadToDirectory(
const QString &dir);
132 void _ftpDownloadQueueNext();
133 void _ftpDeleteNext();
137 QTimer *_timer =
nullptr;
140 bool _downloadingLogs =
false;
141 bool _requestingLogEntries =
false;
144 std::unique_ptr<OnboardLogDownloadData> _downloadData;
145 QString _downloadPath;
147 bool _compressLogs =
false;
148 bool _compressing =
false;
149 float _compressionProgress = 0.0F;
150 bool _sortAscending =
false;
152 Transport _transport = Transport::Messages;
153 bool _ftpDisabled =
false;
154 FtpListState _ftpListState = FtpListState::Idle;
156 bool _ftpTriedFallbackRoot =
false;
157 QStringList _ftpDirsToList;
158 uint _ftpLogIdCounter = 0;
159 QQueue<QGCOnboardLogEntry*> _ftpDownloadQueue;
160 QQueue<QGCOnboardLogEntry*> _ftpDeleteQueue;
161 bool _ftpDeleting =
false;
163 bool _ftpDownloadHadError =
false;
164 QElapsedTimer _ftpDownloadElapsed;
165 size_t _ftpDownloadBytesAtLastUpdate = 0;
166 qreal _ftpDownloadRateAvg = 0.;
168 static constexpr uint32_t kTimeOutMs = 500;
169 static constexpr uint32_t kGUIRateMs = 500;
170 static constexpr uint32_t kRequestLogListTimeoutMs = 5000;