diff --git a/doorbird/deviceplugindoorbird.cpp b/doorbird/deviceplugindoorbird.cpp index 6e8fe3d4..5bccd648 100644 --- a/doorbird/deviceplugindoorbird.cpp +++ b/doorbird/deviceplugindoorbird.cpp @@ -107,15 +107,14 @@ void DevicePluginDoorbird::confirmPairing(DevicePairingInfo *info, const QString if (info->deviceClassId() == doorBirdDeviceClassId) { QHostAddress address = QHostAddress(info->params().paramValue(doorBirdDeviceAddressParamTypeId).toString()); - Doorbird *doorbird = new Doorbird(address, this); + Doorbird *doorbird = new Doorbird(hardwareManager()->networkManager(), address, this); connect(doorbird, &Doorbird::deviceConnected, this, &DevicePluginDoorbird::onDoorBirdConnected); connect(doorbird, &Doorbird::eventReveiced, this, &DevicePluginDoorbird::onDoorBirdEvent); connect(doorbird, &Doorbird::requestSent, this, &DevicePluginDoorbird::onDoorBirdRequestSent); connect(doorbird, &Doorbird::sessionIdReceived, this, &DevicePluginDoorbird::onSessionIdReceived); - doorbird->initConnection(username, password); m_doorbirdConnections.insert(info->deviceId(), doorbird); m_pendingPairings.insert(doorbird, info); - doorbird->getSession(); + doorbird->getSession(username, password); connect(info, &DevicePairingInfo::aborted, this, [this, info]{ if (m_pendingPairings.values().contains(info)) { Doorbird *doorbird = m_pendingPairings.key(info); @@ -152,15 +151,14 @@ void DevicePluginDoorbird::setupDevice(DeviceSetupInfo *info) pluginStorage()->endGroup(); qCDebug(dcDoorBird()) << "Device setup" << device->name() << username << password; - Doorbird *doorbird = new Doorbird(address, this); + Doorbird *doorbird = new Doorbird(hardwareManager()->networkManager(), address, this); connect(doorbird, &Doorbird::deviceConnected, this, &DevicePluginDoorbird::onDoorBirdConnected); connect(doorbird, &Doorbird::eventReveiced, this, &DevicePluginDoorbird::onDoorBirdEvent); connect(doorbird, &Doorbird::requestSent, this, &DevicePluginDoorbird::onDoorBirdRequestSent); connect(doorbird, &Doorbird::sessionIdReceived, this, &DevicePluginDoorbird::onSessionIdReceived); - doorbird->initConnection(username, password); m_doorbirdConnections.insert(device->id(), doorbird); m_pendingDeviceSetups.insert(doorbird, info); - doorbird->getSession(); + doorbird->getSession(username, password); connect(info, &DeviceSetupInfo::aborted, this, [device, doorbird, this] { if (!doorbird) { doorbird->deleteLater(); diff --git a/doorbird/doorbird.cpp b/doorbird/doorbird.cpp index 2b399619..a6074acb 100644 --- a/doorbird/doorbird.cpp +++ b/doorbird/doorbird.cpp @@ -41,9 +41,10 @@ #include #include -Doorbird::Doorbird(const QHostAddress &address, QObject *parent) : +Doorbird::Doorbird(NetworkAccessManager *networkAccessManager, const QHostAddress &address, QObject *parent) : QObject(parent), - m_address(address) + m_address(address), + m_networkAccessManager(networkAccessManager) { } @@ -58,26 +59,15 @@ void Doorbird::setAddress(const QHostAddress &address) m_address = address; } -void Doorbird::initConnection(const QString &username, const QString &password) +QUuid Doorbird::getSession(const QString &username, const QString &password) { - m_networkAccessManager = new QNetworkAccessManager(this); - connect(m_networkAccessManager, &QNetworkAccessManager::authenticationRequired, this, [username, password, this] (QNetworkReply *reply, QAuthenticator *authenticator) { - - qCWarning(dcDoorBird()) << "Authenticator" << reply->errorString() << reply->error(); - if (m_pendingAuthentications.contains(reply)) { - m_pendingAuthentications.removeOne(reply); - reply->abort(); - } else { - authenticator->setUser(username); - authenticator->setPassword(password); - m_pendingAuthentications.append(reply); - } - }); -} - -QUuid Doorbird::getSession() -{ - QNetworkRequest request(QString("http://%1/bha-api/getsession.cgi").arg(m_address.toString())); + QUrl url; + url.setHost(m_address.toString()); + url.setScheme("http"); + url.setPath("/bha-api/getsession.cgi"); + url.setUserName(username); + url.setPassword(password); + QNetworkRequest request(url); qCDebug(dcDoorBird) << "Sending request:" << request.url(); QNetworkReply *reply = m_networkAccessManager->get(request); QUuid requestId = QUuid::createUuid(); diff --git a/doorbird/doorbird.h b/doorbird/doorbird.h index 0d519412..7f26da9b 100644 --- a/doorbird/doorbird.h +++ b/doorbird/doorbird.h @@ -37,11 +37,13 @@ #include #include +#include "network/networkaccessmanager.h" + class Doorbird : public QObject { Q_OBJECT public: - explicit Doorbird(const QHostAddress &address, QObject *parent = nullptr); + explicit Doorbird(NetworkAccessManager *networkAccessManager, const QHostAddress &address, QObject *parent = nullptr); enum EventType { Doorbell, @@ -63,8 +65,7 @@ public: QHostAddress address(); void setAddress(const QHostAddress &address); - void initConnection(const QString &username, const QString &password); - QUuid getSession(); + QUuid getSession(const QString &username, const QString &password); QUuid openDoor(int value); QUuid lightOn(); QUuid liveVideoRequest(); @@ -87,15 +88,17 @@ public: void connectToEventMonitor(); private: - QNetworkAccessManager *m_networkAccessManager; + QHostAddress m_address; + NetworkAccessManager *m_networkAccessManager; QByteArray m_readBuffer; - QHostAddress m_address; + QList m_networkRequests; QList m_pendingAuthentications; - //QByteArray sessionId; + QString m_username; + QString m_password; signals: void deviceConnected(bool status);