diff options
| author | Javier <dev.git@javispedro.com> | 2014-11-30 23:47:38 +0100 |
|---|---|---|
| committer | Javier <dev.git@javispedro.com> | 2014-11-30 23:47:38 +0100 |
| commit | cf405034b49e5e8ba7a8d22522878c8834b8d4ae (patch) | |
| tree | 097205aaf1670be91444cc75226ec153af2817e1 | |
| parent | 6456b840eb660fdafe21d376e07e0b67a24cd0b4 (diff) | |
stub all functions of Pebble JS object
| -rw-r--r-- | daemon/daemon.pro | 2 | ||||
| -rw-r--r-- | daemon/jskitmanager.cpp | 2 | ||||
| -rw-r--r-- | daemon/jskitobjects.cpp | 58 | ||||
| -rw-r--r-- | daemon/jskitobjects.h | 14 |
4 files changed, 71 insertions, 5 deletions
diff --git a/daemon/daemon.pro b/daemon/daemon.pro index 48410c4..a6631df 100644 --- a/daemon/daemon.pro +++ b/daemon/daemon.pro @@ -4,7 +4,7 @@ CONFIG += console CONFIG += link_pkgconfig QT -= gui -QT += bluetooth dbus contacts qml +QT += bluetooth dbus contacts gui qml PKGCONFIG += mlite5 icu-i18n CONFIG += c++11 diff --git a/daemon/jskitmanager.cpp b/daemon/jskitmanager.cpp index 8329e74..2da6c09 100644 --- a/daemon/jskitmanager.cpp +++ b/daemon/jskitmanager.cpp @@ -75,6 +75,8 @@ void JSKitManager::startJsApp() } logger()->debug() << "JS script evaluated"; + + _jspebble->invokeCallbacks("ready"); } void JSKitManager::stopJsApp() diff --git a/daemon/jskitobjects.cpp b/daemon/jskitobjects.cpp index fc9506d..f40138a 100644 --- a/daemon/jskitobjects.cpp +++ b/daemon/jskitobjects.cpp @@ -1,15 +1,67 @@ #include <QStandardPaths> +#include <QDesktopServices> +#include <QUrl> #include <QDir> #include "jskitobjects.h" JSKitPebble::JSKitPebble(JSKitManager *mgr) - : QObject(mgr) + : QObject(mgr), _mgr(mgr) { } -void JSKitPebble::addEventListener(const QString &value, QJSValue callback) +void JSKitPebble::addEventListener(const QString &type, QJSValue function) { - _callbacks[value].append(callback); + _callbacks[type].append(function); +} + +void JSKitPebble::removeEventListener(const QString &type, QJSValue function) +{ + if (!_callbacks.contains(type)) return; + QList<QJSValue> &callbacks = _callbacks[type]; + + for (QList<QJSValue>::iterator it = callbacks.begin(); it != callbacks.end(); ) { + if (it->strictlyEquals(function)) { + it = callbacks.erase(it); + } else { + ++it; + } + } + + if (callbacks.empty()) { + _callbacks.remove(type); + } +} + +void JSKitPebble::sendAppMessage(QJSValue message, QJSValue callbackForAck, QJSValue callbackForNack) +{ + // TODO contact _mgr->appmsg->... + logger()->debug() << "sendAppMessage" << message.toString(); +} + +void JSKitPebble::showSimpleNotificationOnPebble(const QString &title, const QString &body) +{ + logger()->debug() << "showSimpleNotificationOnPebble" << title << body; +} + +void JSKitPebble::openUrl(const QUrl &url) +{ + if (!QDesktopServices::openUrl(url)) { + logger()->warn() << "Failed to open URL:" << url; + } +} + +void JSKitPebble::invokeCallbacks(const QString &type, const QJSValueList &args) +{ + if (!_callbacks.contains(type)) return; + QList<QJSValue> &callbacks = _callbacks[type]; + + for (QList<QJSValue>::iterator it = callbacks.begin(); it != callbacks.end(); ++it) { + QJSValue result = it->call(args); + if (result.isError()) { + logger()->warn() << "error while invoking callback" << type << it->toString() << ":" + << result.toString(); + } + } } JSKitLocalStorage::JSKitLocalStorage(const QUuid &uuid, JSKitManager *mgr) diff --git a/daemon/jskitobjects.h b/daemon/jskitobjects.h index 8acd76f..2375084 100644 --- a/daemon/jskitobjects.h +++ b/daemon/jskitobjects.h @@ -7,12 +7,24 @@ class JSKitPebble : public QObject { Q_OBJECT + LOG4QT_DECLARE_QCLASS_LOGGER public: explicit JSKitPebble(JSKitManager *mgr); - Q_INVOKABLE void addEventListener(const QString &event, QJSValue callback); + Q_INVOKABLE void addEventListener(const QString &type, QJSValue function); + Q_INVOKABLE void removeEventListener(const QString &type, QJSValue function); + + Q_INVOKABLE void sendAppMessage(QJSValue message, QJSValue callbackForAck, QJSValue callbackForNack); + + Q_INVOKABLE void showSimpleNotificationOnPebble(const QString &title, const QString &body); + + Q_INVOKABLE void openUrl(const QUrl &url); + + void invokeCallbacks(const QString &type, const QJSValueList &args = QJSValueList()); + private: + JSKitManager *_mgr; QHash<QString, QList<QJSValue>> _callbacks; }; |
