Request Syncthing version
This commit is contained in:
parent
3549a4cdef
commit
39dd98354a
|
@ -75,6 +75,7 @@ SyncthingConnection::SyncthingConnection(const QString &syncthingUrl, const QByt
|
||||||
, m_connectionsReply(nullptr)
|
, m_connectionsReply(nullptr)
|
||||||
, m_errorsReply(nullptr)
|
, m_errorsReply(nullptr)
|
||||||
, m_eventsReply(nullptr)
|
, m_eventsReply(nullptr)
|
||||||
|
, m_versionReply(nullptr)
|
||||||
, m_unreadNotifications(false)
|
, m_unreadNotifications(false)
|
||||||
, m_hasConfig(false)
|
, m_hasConfig(false)
|
||||||
, m_hasStatus(false)
|
, m_hasStatus(false)
|
||||||
|
@ -265,6 +266,7 @@ void SyncthingConnection::continueReconnecting()
|
||||||
m_startTime = DateTime();
|
m_startTime = DateTime();
|
||||||
m_lastFileName.clear();
|
m_lastFileName.clear();
|
||||||
m_lastFileDeleted = false;
|
m_lastFileDeleted = false;
|
||||||
|
m_syncthingVersion.clear();
|
||||||
if (m_apiKey.isEmpty() || m_syncthingUrl.isEmpty()) {
|
if (m_apiKey.isEmpty() || m_syncthingUrl.isEmpty()) {
|
||||||
emit error(tr("Connection configuration is insufficient."), SyncthingErrorCategory::OverallConnection, QNetworkReply::NoError);
|
emit error(tr("Connection configuration is insufficient."), SyncthingErrorCategory::OverallConnection, QNetworkReply::NoError);
|
||||||
return;
|
return;
|
||||||
|
@ -688,7 +690,7 @@ SyncthingDev *SyncthingConnection::addDevInfo(std::vector<SyncthingDev> &devs, c
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
int row;
|
int row;
|
||||||
if (SyncthingDev *existingDevInfo = findDevInfo(devId, row)) {
|
if (SyncthingDev *const existingDevInfo = findDevInfo(devId, row)) {
|
||||||
devs.emplace_back(move(*existingDevInfo));
|
devs.emplace_back(move(*existingDevInfo));
|
||||||
} else {
|
} else {
|
||||||
devs.emplace_back(devId);
|
devs.emplace_back(devId);
|
||||||
|
@ -708,6 +710,7 @@ void SyncthingConnection::continueConnecting()
|
||||||
requestDirStatistics();
|
requestDirStatistics();
|
||||||
requestDeviceStatistics();
|
requestDeviceStatistics();
|
||||||
requestErrors();
|
requestErrors();
|
||||||
|
requestVersion();
|
||||||
for (const SyncthingDir &dir : m_dirs) {
|
for (const SyncthingDir &dir : m_dirs) {
|
||||||
requestDirStatus(dir.id);
|
requestDirStatus(dir.id);
|
||||||
if (!m_requestCompletion) {
|
if (!m_requestCompletion) {
|
||||||
|
@ -742,6 +745,9 @@ void SyncthingConnection::abortAllRequests()
|
||||||
if (m_eventsReply) {
|
if (m_eventsReply) {
|
||||||
m_eventsReply->abort();
|
m_eventsReply->abort();
|
||||||
}
|
}
|
||||||
|
if (m_versionReply) {
|
||||||
|
m_versionReply->abort();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -851,7 +857,13 @@ void SyncthingConnection::requestCompletion(const QString &devId, const QString
|
||||||
void SyncthingConnection::requestDeviceStatistics()
|
void SyncthingConnection::requestDeviceStatistics()
|
||||||
{
|
{
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
requestData(QStringLiteral("stats/device"), QUrlQuery()), &QNetworkReply::finished, this, &SyncthingConnection::readDeviceStatistics);
|
requestData(QStringLiteral("stats/device"), QUrlQuery()), &QNetworkReply::finished, this, &SyncthingConnection::readDeviceStatistics);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SyncthingConnection::requestVersion()
|
||||||
|
{
|
||||||
|
QObject::connect(
|
||||||
|
m_versionReply = requestData(QStringLiteral("system/version"), QUrlQuery()), &QNetworkReply::finished, this, &SyncthingConnection::readVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -2248,6 +2260,36 @@ void SyncthingConnection::readCompletion()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SyncthingConnection::readVersion()
|
||||||
|
{
|
||||||
|
auto *const reply = static_cast<QNetworkReply *>(sender());
|
||||||
|
reply->deleteLater();
|
||||||
|
if (reply == m_versionReply) {
|
||||||
|
m_versionReply = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (reply->error()) {
|
||||||
|
case QNetworkReply::NoError: {
|
||||||
|
const QByteArray response(reply->readAll());
|
||||||
|
QJsonParseError jsonError;
|
||||||
|
const auto replyDoc(QJsonDocument::fromJson(response, &jsonError));
|
||||||
|
if (jsonError.error != QJsonParseError::NoError) {
|
||||||
|
emitError(tr("Unable to parse version: "), jsonError, reply, response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto replyObj(replyDoc.object());
|
||||||
|
m_syncthingVersion = replyObj.value(QLatin1String("longVersion")).toString();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case QNetworkReply::OperationCanceledError:
|
||||||
|
return; // intended, not an error
|
||||||
|
default:
|
||||||
|
emitError(tr("Unable to request version: "), SyncthingErrorCategory::OverallConnection, reply);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Sets the connection status. Ensures statusChanged() is emitted.
|
* \brief Sets the connection status. Ensures statusChanged() is emitted.
|
||||||
* \param status Specifies the status; should be either SyncthingStatus::Disconnected, SyncthingStatus::Reconnecting, or
|
* \param status Specifies the status; should be either SyncthingStatus::Disconnected, SyncthingStatus::Reconnecting, or
|
||||||
|
|
|
@ -83,6 +83,7 @@ class LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingConnection : public QObject {
|
||||||
Q_PROPERTY(double totalIncomingRate READ totalIncomingRate NOTIFY trafficChanged)
|
Q_PROPERTY(double totalIncomingRate READ totalIncomingRate NOTIFY trafficChanged)
|
||||||
Q_PROPERTY(double totalOutgoingRate READ totalOutgoingRate NOTIFY trafficChanged)
|
Q_PROPERTY(double totalOutgoingRate READ totalOutgoingRate NOTIFY trafficChanged)
|
||||||
Q_PROPERTY(QString lastSyncedFile READ lastSyncedFile)
|
Q_PROPERTY(QString lastSyncedFile READ lastSyncedFile)
|
||||||
|
Q_PROPERTY(QString syncthingVersion READ syncthingVersion)
|
||||||
Q_PROPERTY(ChronoUtilities::DateTime lastSyncTime READ lastSyncTime)
|
Q_PROPERTY(ChronoUtilities::DateTime lastSyncTime READ lastSyncTime)
|
||||||
Q_PROPERTY(QList<QSslError> expectedSslErrors READ expectedSslErrors)
|
Q_PROPERTY(QList<QSslError> expectedSslErrors READ expectedSslErrors)
|
||||||
Q_PROPERTY(std::vector<const SyncthingDev *> connectedDevices READ connectedDevices)
|
Q_PROPERTY(std::vector<const SyncthingDev *> connectedDevices READ connectedDevices)
|
||||||
|
@ -133,6 +134,7 @@ public:
|
||||||
ChronoUtilities::DateTime lastSyncTime() const;
|
ChronoUtilities::DateTime lastSyncTime() const;
|
||||||
ChronoUtilities::DateTime startTime() const;
|
ChronoUtilities::DateTime startTime() const;
|
||||||
ChronoUtilities::TimeSpan uptime() const;
|
ChronoUtilities::TimeSpan uptime() const;
|
||||||
|
const QString &syncthingVersion() const;
|
||||||
QMetaObject::Connection requestQrCode(const QString &text, std::function<void(const QByteArray &)> callback);
|
QMetaObject::Connection requestQrCode(const QString &text, std::function<void(const QByteArray &)> callback);
|
||||||
QMetaObject::Connection requestLog(std::function<void(const std::vector<SyncthingLogEntry> &)> callback);
|
QMetaObject::Connection requestLog(std::function<void(const std::vector<SyncthingLogEntry> &)> callback);
|
||||||
const QList<QSslError> &expectedSslErrors() const;
|
const QList<QSslError> &expectedSslErrors() const;
|
||||||
|
@ -180,6 +182,7 @@ public Q_SLOTS:
|
||||||
void requestDirStatus(const QString &dirId);
|
void requestDirStatus(const QString &dirId);
|
||||||
void requestCompletion(const QString &devId, const QString &dirId);
|
void requestCompletion(const QString &devId, const QString &dirId);
|
||||||
void requestDeviceStatistics();
|
void requestDeviceStatistics();
|
||||||
|
void requestVersion();
|
||||||
void postConfigFromJsonObject(const QJsonObject &rawConfig);
|
void postConfigFromJsonObject(const QJsonObject &rawConfig);
|
||||||
void postConfigFromByteArray(const QByteArray &rawConfig);
|
void postConfigFromByteArray(const QByteArray &rawConfig);
|
||||||
|
|
||||||
|
@ -252,6 +255,7 @@ private Q_SLOTS:
|
||||||
void readDirRejected(ChronoUtilities::DateTime eventTime, const QString &dirId, const QJsonObject &eventData);
|
void readDirRejected(ChronoUtilities::DateTime eventTime, const QString &dirId, const QJsonObject &eventData);
|
||||||
void readDevRejected(ChronoUtilities::DateTime eventTime, const QString &devId, const QJsonObject &eventData);
|
void readDevRejected(ChronoUtilities::DateTime eventTime, const QString &devId, const QJsonObject &eventData);
|
||||||
void readCompletion();
|
void readCompletion();
|
||||||
|
void readVersion();
|
||||||
|
|
||||||
void continueConnecting();
|
void continueConnecting();
|
||||||
void continueReconnecting();
|
void continueReconnecting();
|
||||||
|
@ -298,6 +302,7 @@ private:
|
||||||
QNetworkReply *m_connectionsReply;
|
QNetworkReply *m_connectionsReply;
|
||||||
QNetworkReply *m_errorsReply;
|
QNetworkReply *m_errorsReply;
|
||||||
QNetworkReply *m_eventsReply;
|
QNetworkReply *m_eventsReply;
|
||||||
|
QNetworkReply *m_versionReply;
|
||||||
bool m_unreadNotifications;
|
bool m_unreadNotifications;
|
||||||
bool m_hasConfig;
|
bool m_hasConfig;
|
||||||
bool m_hasStatus;
|
bool m_hasStatus;
|
||||||
|
@ -308,6 +313,7 @@ private:
|
||||||
ChronoUtilities::DateTime m_lastErrorTime;
|
ChronoUtilities::DateTime m_lastErrorTime;
|
||||||
ChronoUtilities::DateTime m_startTime;
|
ChronoUtilities::DateTime m_startTime;
|
||||||
QString m_lastFileName;
|
QString m_lastFileName;
|
||||||
|
QString m_syncthingVersion;
|
||||||
bool m_lastFileDeleted;
|
bool m_lastFileDeleted;
|
||||||
QList<QSslError> m_expectedSslErrors;
|
QList<QSslError> m_expectedSslErrors;
|
||||||
QJsonObject m_rawConfig;
|
QJsonObject m_rawConfig;
|
||||||
|
@ -621,6 +627,14 @@ inline ChronoUtilities::TimeSpan SyncthingConnection::uptime() const
|
||||||
return ChronoUtilities::DateTime::gmtNow() - m_startTime;
|
return ChronoUtilities::DateTime::gmtNow() - m_startTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the Syncthing version.
|
||||||
|
*/
|
||||||
|
inline const QString &SyncthingConnection::syncthingVersion() const
|
||||||
|
{
|
||||||
|
return m_syncthingVersion;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Returns a list of all expected certificate errors. This is meant to allow self-signed certificates.
|
* \brief Returns a list of all expected certificate errors. This is meant to allow self-signed certificates.
|
||||||
* \remarks This list is updated via loadSelfSignedCertificate().
|
* \remarks This list is updated via loadSelfSignedCertificate().
|
||||||
|
|
Loading…
Reference in New Issue