summaryrefslogtreecommitdiff
path: root/rockworkd/pebblemanager.cpp
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2016-02-11 23:55:16 +0100
committerAndrew Branson <andrew.branson@cern.ch>2016-02-11 23:55:16 +0100
commit29aaea2d80a9eb1715b6cddfac2d2aacf76358bd (patch)
tree012795b6bec16c72f38d33cff46324c9a0225868 /rockworkd/pebblemanager.cpp
launchpad ~mzanetti/rockwork/trunk r87
Diffstat (limited to 'rockworkd/pebblemanager.cpp')
-rw-r--r--rockworkd/pebblemanager.cpp95
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;
+}