diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2016-02-11 23:55:16 +0100 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2016-02-11 23:55:16 +0100 |
| commit | 29aaea2d80a9eb1715b6cddfac2d2aacf76358bd (patch) | |
| tree | 012795b6bec16c72f38d33cff46324c9a0225868 /rockworkd/pebblemanager.cpp | |
launchpad ~mzanetti/rockwork/trunk r87
Diffstat (limited to 'rockworkd/pebblemanager.cpp')
| -rw-r--r-- | rockworkd/pebblemanager.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/rockworkd/pebblemanager.cpp b/rockworkd/pebblemanager.cpp new file mode 100644 index 0000000..126000e --- /dev/null +++ b/rockworkd/pebblemanager.cpp @@ -0,0 +1,95 @@ +#include "pebblemanager.h" + +#include "core.h" + +#include "libpebble/platforminterface.h" + +#include <QHash> + +#ifdef ENABLE_TESTING +#include <QQuickView> +#include <QQmlEngine> +#include <QQmlContext> +#endif + +PebbleManager::PebbleManager(QObject *parent) : QObject(parent) +{ + m_bluezClient = new BluezClient(this); + connect(m_bluezClient, &BluezClient::devicesChanged, this, &PebbleManager::loadPebbles); + loadPebbles(); +} + +QList<Pebble *> PebbleManager::pebbles() const +{ + return m_pebbles; +} + +void PebbleManager::loadPebbles() +{ + QList<Device> pairedPebbles = m_bluezClient->pairedPebbles(); + foreach (const Device &device, pairedPebbles) { + qDebug() << "loading pebble" << device.address.toString(); + Pebble *pebble = get(device.address); + if (!pebble) { + qDebug() << "creating new pebble"; + pebble = new Pebble(device.address, this); + pebble->setName(device.name); + setupPebble(pebble); + m_pebbles.append(pebble); + qDebug() << "have pebbles:" << m_pebbles.count() << this; + emit pebbleAdded(pebble); + } + if (!pebble->connected()) { + pebble->connect(); + } + } + QList<Pebble*> pebblesToRemove; + foreach (Pebble *pebble, m_pebbles) { + bool found = false; + foreach (const Device &dev, pairedPebbles) { + if (dev.address == pebble->address()) { + found = true; + break; + } + } + if (!found) { + pebblesToRemove << pebble; + } + } + + while (!pebblesToRemove.isEmpty()) { + Pebble *pebble = pebblesToRemove.takeFirst(); + qDebug() << "Removing pebble" << pebble->address(); + m_pebbles.removeOne(pebble); + emit pebbleRemoved(pebble); + pebble->deleteLater(); + } +} + +void PebbleManager::pebbleConnected() +{ +} + +void PebbleManager::setupPebble(Pebble *pebble) +{ + +#ifdef ENABLE_TESTING + qmlRegisterUncreatableType<Pebble>("PebbleTest", 1, 0, "Pebble", "Dont"); + QQuickView *view = new QQuickView(); + view->engine()->rootContext()->setContextProperty("pebble", pebble); + view->setSource(QUrl("qrc:///testui/PebbleController.qml")); + view->show(); +#endif + + connect(pebble, &Pebble::pebbleConnected, this, &PebbleManager::pebbleConnected); +} + +Pebble* PebbleManager::get(const QBluetoothAddress &address) +{ + for (int i = 0; i < m_pebbles.count(); i++) { + if (m_pebbles.at(i)->address() == address) { + return m_pebbles.at(i); + } + } + return nullptr; +} |
