#include "nymeadiscovery.h" #include "engine.h" #include "upnpdiscovery.h" #include "zeroconfdiscovery.h" #include "bluetoothservicediscovery.h" #include "connection/awsclient.h" #include #include #include NymeaDiscovery::NymeaDiscovery(QObject *parent) : QObject(parent) { m_discoveryModel = new DiscoveryModel(this); m_upnp = new UpnpDiscovery(m_discoveryModel, this); m_zeroConf = new ZeroconfDiscovery(m_discoveryModel, this); #ifndef Q_OS_IOS m_bluetooth = new BluetoothServiceDiscovery(m_discoveryModel, this); #endif connect(Engine::instance()->awsClient()->awsDevices(), &AWSDevices::countChanged, this, &NymeaDiscovery::syncCloudDevices); } bool NymeaDiscovery::discovering() const { return m_discovering; } void NymeaDiscovery::setDiscovering(bool discovering) { if (m_discovering == discovering) return; m_discovering = discovering; // For zeroconf we'll ignore it as zeroconf doesn't do active discovery but just listens for changes in the net all the time if (discovering) { m_upnp->discover(); if (m_bluetooth) { m_bluetooth->discover(); } if (Engine::instance()->awsClient()->isLoggedIn()) { syncCloudDevices(); Engine::instance()->awsClient()->fetchDevices(); } } else { m_upnp->stopDiscovery(); if (m_bluetooth) { m_bluetooth->stopDiscovery(); } } emit discoveringChanged(); } DiscoveryModel *NymeaDiscovery::discoveryModel() const { return m_discoveryModel; } void NymeaDiscovery::syncCloudDevices() { qDebug() << "Cloud devices fetched"; for (int i = 0; i < Engine::instance()->awsClient()->awsDevices()->rowCount(); i++) { AWSDevice *d = Engine::instance()->awsClient()->awsDevices()->get(i); DiscoveryDevice *device = m_discoveryModel->find(d->id()); if (!device) { device = new DiscoveryDevice(); device->setUuid(d->id()); device->setName(d->name()); m_discoveryModel->addDevice(device); } QUrl url; url.setScheme("cloud"); url.setHost(d->id()); if (!device->connections()->find(url)) { Connection *conn = new Connection(url, Connection::BearerTypeCloud, true, d->id()); conn->setOnline(d->online()); device->connections()->addConnection(conn); } } }