update endpoints when a device is paired on the fly

pull/135/head
Michael Zanetti 2018-02-02 16:51:08 +01:00
parent c1d4adea17
commit 6334496c8c
4 changed files with 28 additions and 2 deletions

View File

@ -47,6 +47,7 @@ AWSConnector::AWSConnector(QObject *parent) : QObject(parent)
m_disconnectContextData = std::shared_ptr<awsiotsdk::DisconnectCallbackContextData>(new DisconnectContext(this));
m_subscriptionContextData = std::shared_ptr<awsiotsdk::mqtt::SubscriptionHandlerContextData>(new SubscriptionContext(this));
qRegisterMetaType<AWSConnector::PushNotificationsEndpoint>();
m_clientName = readSyncedNameCache();
}
@ -160,6 +161,7 @@ void AWSConnector::setupSubscriptions()
subscriptions.append(QString("%1/device/users/response").arg(m_clientId));
subscriptions.append(QString("%1/pair/response").arg(m_clientId));
subscriptions.append(QString("%1/notify/response").arg(m_clientId));
subscriptions.append(QString("%1/notify/info/endpoint").arg(m_clientId));
subscribe(subscriptions);
// fetch previous pairings
@ -475,6 +477,15 @@ ResponseCode AWSConnector::onSubscriptionReceivedCallback(util::String topic_nam
int status = jsonDoc.toVariant().toMap().value("status").toInt();
qCDebug(dcAWS()) << "Push notification reply for transaction" << transactionId << " Status:" << status << jsonDoc.toVariant().toMap().value("message").toString();
emit connector->pushNotificationSent(transactionId, status);
} else if (topic == QString("%1/notify/info/endpoint").arg(connector->m_clientId)) {
QVariantMap endpoint = jsonDoc.toVariant().toMap().value("newPushNotificationsEndpoint").toMap();
Q_ASSERT(endpoint.keys().count() == 1);
QString cognitoId = endpoint.keys().first();
PushNotificationsEndpoint ep;
ep.userId = cognitoId;
ep.endpointId = endpoint.value(cognitoId).toMap().value("endpointId").toString();
ep.displayName = endpoint.value(cognitoId).toMap().value("displayName").toString();
emit connector->pushNotificationEndpointAdded(ep);
} else {
qCWarning(dcAWS) << "Unhandled subscription received!" << topic << QString::fromStdString(payload);
}

View File

@ -63,7 +63,8 @@ signals:
void disconnected();
void devicePaired(const QString &cognritoUserId, int errorCode, const QString &message);
void webRtcHandshakeMessageReceived(const QString &transactionId, const QVariantMap &data);
void pushNotificationEndpointsUpdated(const QList<PushNotificationsEndpoint> pushNotificationEndpoints);
void pushNotificationEndpointsUpdated(const QList<AWSConnector::PushNotificationsEndpoint> pushNotificationEndpoints);
void pushNotificationEndpointAdded(const AWSConnector::PushNotificationsEndpoint &pushNotificationEndpoint);
void pushNotificationSent(int id, int status);
private slots:
@ -134,5 +135,6 @@ private:
static AWSConnector* s_instance;
static QHash<quint16, AWSConnector*> s_requestMap;
};
Q_DECLARE_METATYPE(AWSConnector::PushNotificationsEndpoint)
#endif // AWSCONNECTOR_H

View File

@ -38,6 +38,7 @@ CloudNotifications::CloudNotifications(AWSConnector* awsConnector, QObject *pare
m_awsConnector(awsConnector)
{
connect(m_awsConnector, &AWSConnector::pushNotificationEndpointsUpdated, this, &CloudNotifications::pushNotificationEndpointsUpdated);
connect(m_awsConnector, &AWSConnector::pushNotificationEndpointAdded, this, &CloudNotifications::pushNotificationEndpointAdded);
connect(m_awsConnector, &AWSConnector::pushNotificationSent, this, &CloudNotifications::pushNotificationSent);
}
@ -135,7 +136,6 @@ QJsonObject CloudNotifications::metaData() const
DeviceManager::DeviceSetupStatus CloudNotifications::setupDevice(Device *device)
{
qWarning() << "--------------------------------------------------------------------- setupDevice" << device->id() << device->name();
Q_UNUSED(device)
return DeviceManager::DeviceSetupStatusSuccess;
}
@ -201,6 +201,18 @@ void CloudNotifications::pushNotificationEndpointsUpdated(const QList<AWSConnect
}
void CloudNotifications::pushNotificationEndpointAdded(const AWSConnector::PushNotificationsEndpoint &endpoint)
{
DeviceDescriptor descriptor(cloudNotificationsDeviceClassId, endpoint.displayName, QString("Send notifications to %1").arg(endpoint.displayName));
ParamList params;
Param userIdParam(cloudNotificationsDeviceClassUserParamId, endpoint.userId);
params.append(userIdParam);
Param endpointIdParam(cloudNotificationsDeviceClassEndpointParamId, endpoint.endpointId);
params.append(endpointIdParam);
descriptor.setParams(params);
emit autoDevicesAppeared(cloudNotificationsDeviceClassId, {descriptor});
}
void CloudNotifications::pushNotificationSent(int id, int status)
{
qCDebug(dcCloud()) << "Push notification sent" << id << status;

View File

@ -42,6 +42,7 @@ public:
private slots:
void pushNotificationEndpointsUpdated(const QList<AWSConnector::PushNotificationsEndpoint> &endpoints);
void pushNotificationEndpointAdded(const AWSConnector::PushNotificationsEndpoint &endpoint);
void pushNotificationSent(int id, int status);
private: