summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2014-11-30 23:47:38 +0100
committerJavier <dev.git@javispedro.com>2014-11-30 23:47:38 +0100
commitcf405034b49e5e8ba7a8d22522878c8834b8d4ae (patch)
tree097205aaf1670be91444cc75226ec153af2817e1
parent6456b840eb660fdafe21d376e07e0b67a24cd0b4 (diff)
stub all functions of Pebble JS object
-rw-r--r--daemon/daemon.pro2
-rw-r--r--daemon/jskitmanager.cpp2
-rw-r--r--daemon/jskitobjects.cpp58
-rw-r--r--daemon/jskitobjects.h14
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;
};