[AFV] Add method to read all aliased HF stations

ref T729
This commit is contained in:
Roland Rossgotterer
2019-09-19 21:54:40 +02:00
committed by Mat Sutcliffe
parent 4a578110b0
commit 8b1fb1baca
6 changed files with 83 additions and 3 deletions

View File

@@ -70,6 +70,8 @@ namespace BlackCore
if (m_connection->isConnected()) { emit connectionStatusChanged(Connected); }
else { emit connectionStatusChanged(Disconnected); }
m_connection->getAllAliasedStations();
}
void AFVClient::disconnectFrom()

View File

@@ -125,6 +125,12 @@ namespace BlackCore
m_jwt.clear();
}
QVector<StationDto> ApiServerConnection::getAllAliasedStations()
{
getAsVector<StationDto>("/api/v1/stations/aliased");
return {};
}
void ApiServerConnection::postNoResponse(const QString &resource, const QJsonDocument &json)
{
if (isShuttingDown()) { return; } // avoid crash

View File

@@ -56,6 +56,8 @@ namespace BlackCore
void forceDisconnect();
QVector<StationDto> getAllAliasedStations();
private:
template<typename TResponse>
TResponse postNoRequest(const QString &resource)
@@ -78,7 +80,7 @@ namespace BlackCore
QNetworkRequest request(url);
request.setRawHeader("Authorization", "Bearer " + m_jwt);
QNetworkReply *reply = nam->post(request, QByteArray());
QScopedPointer<QNetworkReply, QScopedPointerDeleteLater> reply(nam->post(request, QByteArray()));
while (! reply->isFinished()) { loop.exec(); }
qDebug() << "POST" << resource << "(" << m_watch.elapsed() << "ms)";
@@ -90,11 +92,55 @@ namespace BlackCore
const QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
TResponse response = TResponse::fromJson(doc.object());
reply->deleteLater();
return response;
}
template<typename TResponse>
QVector<TResponse> getAsVector(const QString &resource)
{
if (! m_isAuthenticated)
{
qDebug() << "Not authenticated";
return {};
}
checkExpiry();
QNetworkAccessManager *nam = sApp->getNetworkAccessManager();
m_watch.start();
QUrl url(m_address);
url.setPath(resource);
QEventLoop loop;
connect(nam, &QNetworkAccessManager::finished, &loop, &QEventLoop::quit);
QNetworkRequest request(url);
request.setRawHeader("Authorization", "Bearer " + m_jwt);
QScopedPointer<QNetworkReply, QScopedPointerDeleteLater> reply(nam->get(request));
while (! reply->isFinished()) { loop.exec(); }
qDebug() << "GET" << resource << "(" << m_watch.elapsed() << "ms)";
if (reply->error() != QNetworkReply::NoError)
{
qWarning() << "GET" << resource << "failed:" << reply->errorString();
return {};
}
const QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());
QVector<TResponse> dtos;
if (jsonDoc.isArray())
{
QJsonArray rootArray = jsonDoc.array();
for (auto o : rootArray)
{
QJsonObject d = o.toObject();
TResponse dto = TResponse::fromJson(d);
dtos.push_back(dto);
}
}
return dtos;
}
void postNoResponse(const QString &resource, const QJsonDocument &json);
void deleteResource(const QString &resource);
void checkExpiry();

View File

@@ -97,6 +97,11 @@ namespace BlackCore
m_apiServerConnection.updateTransceivers(callsign, transceivers);
}
QVector<StationDto> ClientConnection::getAllAliasedStations()
{
return m_apiServerConnection.getAllAliasedStations();
}
void ClientConnection::connectToVoiceServer()
{
QHostAddress localAddress(QHostAddress::AnyIPv4);

View File

@@ -64,6 +64,8 @@ namespace BlackCore
void updateTransceivers(const QString &callsign, const QVector<TransceiverDto> &transceivers);
QVector<StationDto> getAllAliasedStations();
signals:
void audioReceived(const AudioRxOnTransceiversDto &dto);

View File

@@ -16,6 +16,7 @@
#include <QByteArray>
#include <QJsonObject>
#include <QString>
#include <QUuid>
namespace BlackCore
{
@@ -137,6 +138,24 @@ namespace BlackCore
}
};
struct StationDto
{
QUuid id;
QString name;
quint32 frequency;
quint32 frequencyAlias;
static StationDto fromJson(const QJsonObject &json)
{
StationDto dto;
dto.id = json.value("id").toString();
dto.name = json.value("name").toString();
dto.frequency = json.value("frequency").toInt();
dto.frequencyAlias = json.value("frequencyAlias").toInt();
return dto;
}
};
struct HeartbeatDto
{
static QByteArray getDtoName() { return "HeartbeatDto"; }