summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2014-12-01 04:13:06 +0100
committerJavier <dev.git@javispedro.com>2014-12-01 04:13:06 +0100
commit81f91639969de0f3852a3fe73db13b4cb0ecf3b4 (patch)
treeac5f3146707e0b46723bfdf13b7ced5cdf16633d /daemon
parentbe139d8ff95160782b424134a025b30c82083e28 (diff)
hackily implement openURL by signalling the URLs via D-Bus to the
settings app, which pops a webview
Diffstat (limited to 'daemon')
-rw-r--r--daemon/dbusadaptor.cpp5
-rw-r--r--daemon/dbusadaptor.h8
-rw-r--r--daemon/jskitmanager.cpp10
-rw-r--r--daemon/jskitmanager.h2
-rw-r--r--daemon/jskitobjects.cpp10
-rw-r--r--daemon/jskitobjects.h12
-rw-r--r--daemon/manager.cpp6
-rw-r--r--daemon/manager.h3
8 files changed, 47 insertions, 9 deletions
diff --git a/daemon/dbusadaptor.cpp b/daemon/dbusadaptor.cpp
index 7bbf623..25e2508 100644
--- a/daemon/dbusadaptor.cpp
+++ b/daemon/dbusadaptor.cpp
@@ -85,3 +85,8 @@ void PebbledAdaptor::test()
{
QMetaObject::invokeMethod(parent(), "test");
}
+
+void PebbledAdaptor::webviewClosed(const QString &result)
+{
+ QMetaObject::invokeMethod(parent(), "webviewClosed", Q_ARG(QString, result));
+}
diff --git a/daemon/dbusadaptor.h b/daemon/dbusadaptor.h
index 54a0963..f347f92 100644
--- a/daemon/dbusadaptor.h
+++ b/daemon/dbusadaptor.h
@@ -47,6 +47,12 @@ class PebbledAdaptor: public QDBusAbstractAdaptor
" <method name=\"disconnect\"/>\n"
" <method name=\"reconnect\"/>\n"
" <method name=\"test\"/>\n"
+" <signal name=\"openUrl\">\n"
+" <arg type=\"s\" name=\"url\"/>\n"
+" </signal>\n"
+" <method name=\"webviewClosed\">\n"
+" <arg direction=\"in\" type=\"s\" name=\"result\"/>\n"
+" </method>\n"
" </interface>\n"
"")
public:
@@ -72,9 +78,11 @@ public Q_SLOTS: // METHODS
void time();
void reconnect();
void test();
+ void webviewClosed(const QString &result);
Q_SIGNALS: // SIGNALS
void connectedChanged();
void pebbleChanged();
+ void openUrl(const QString &s);
};
#endif
diff --git a/daemon/jskitmanager.cpp b/daemon/jskitmanager.cpp
index 6023a9a..cfd860e 100644
--- a/daemon/jskitmanager.cpp
+++ b/daemon/jskitmanager.cpp
@@ -31,6 +31,16 @@ void JSKitManager::showConfiguration()
}
}
+void JSKitManager::handleWebviewClosed(const QString &result)
+{
+ if (_engine) {
+ QJSValue eventObj = _engine->newObject();
+ eventObj.setProperty("response", _engine->toScriptValue(result));
+
+ _jspebble->invokeCallbacks("webviewclosed", QJSValueList({eventObj}));
+ }
+}
+
void JSKitManager::handleAppStarted(const QUuid &uuid)
{
AppInfo info = _apps->info(uuid);
diff --git a/daemon/jskitmanager.h b/daemon/jskitmanager.h
index 73d7853..fd6040d 100644
--- a/daemon/jskitmanager.h
+++ b/daemon/jskitmanager.h
@@ -22,9 +22,11 @@ public:
signals:
void appNotification(const QUuid &uuid, const QString &title, const QString &body);
+ void appOpenUrl(const QString &url);
public slots:
void showConfiguration();
+ void handleWebviewClosed(const QString &result);
private slots:
void handleAppStarted(const QUuid &uuid);
diff --git a/daemon/jskitobjects.cpp b/daemon/jskitobjects.cpp
index f745233..9e4cfde 100644
--- a/daemon/jskitobjects.cpp
+++ b/daemon/jskitobjects.cpp
@@ -54,12 +54,15 @@ void JSKitPebble::showSimpleNotificationOnPebble(const QString &title, const QSt
emit _mgr->appNotification(_appInfo.uuid(), title, body);
}
-void JSKitPebble::openUrl(const QUrl &url)
+void JSKitPebble::openURL(const QUrl &url)
{
logger()->debug() << "opening url" << url.toString();
+ emit _mgr->appOpenUrl(url.toString());
+#if 0 /* Until we figure out how to do this. Maybe signal the daemon? */
if (!QDesktopServices::openUrl(url)) {
logger()->warn() << "Failed to open URL:" << url;
}
+#endif
}
QJSValue JSKitPebble::createXMLHttpRequest()
@@ -253,7 +256,10 @@ void JSKitXMLHttpRequest::handleReplyFinished()
if (_onload.isCallable()) {
logger()->debug() << "going to call onload handler:" << _onload.toString();
- _onload.callWithInstance(_mgr->engine()->toScriptValue(this));
+ QJSValue result = _onload.callWithInstance(_mgr->engine()->newQObject(this));
+ if (result.isError()) {
+ logger()->warn() << "JS error on onload handler:" << result.toString();
+ }
} else {
logger()->debug() << "No onload set";
}
diff --git a/daemon/jskitobjects.h b/daemon/jskitobjects.h
index 1962e01..4f000f1 100644
--- a/daemon/jskitobjects.h
+++ b/daemon/jskitobjects.h
@@ -21,7 +21,7 @@ public:
Q_INVOKABLE void showSimpleNotificationOnPebble(const QString &title, const QString &body);
- Q_INVOKABLE void openUrl(const QUrl &url);
+ Q_INVOKABLE void openURL(const QUrl &url);
Q_INVOKABLE QJSValue createXMLHttpRequest();
@@ -88,11 +88,11 @@ public:
~JSKitXMLHttpRequest();
enum ReadyStates {
- UNSENT,
- OPENED,
- HEADERS_RECEIVED,
- LOADING,
- DONE
+ UNSENT = 0,
+ OPENED = 1,
+ HEADERS_RECEIVED = 2,
+ LOADING = 3,
+ DONE = 4
};
Q_INVOKABLE void open(const QString &method, const QString &url, bool async);
diff --git a/daemon/manager.cpp b/daemon/manager.cpp
index 9db4c70..e732d38 100644
--- a/daemon/manager.cpp
+++ b/daemon/manager.cpp
@@ -61,6 +61,7 @@ Manager::Manager(Settings *settings, QObject *parent) :
session.registerService("org.pebbled");
connect(dbus, SIGNAL(pebbleChanged()), adaptor, SIGNAL(pebbleChanged()));
connect(watch, SIGNAL(connectedChanged()), adaptor, SIGNAL(connectedChanged()));
+ connect(js, SIGNAL(appOpenUrl(QString)), adaptor, SIGNAL(openUrl(QString)));
QString currentProfile = getCurrentProfile();
defaultProfile = currentProfile.isEmpty() ? "ambience" : currentProfile;
@@ -397,3 +398,8 @@ void Manager::test()
js->showConfiguration();
}
+
+void Manager::onWebviewClosed(const QString &result)
+{
+ js->handleWebviewClosed(result);
+}
diff --git a/daemon/manager.h b/daemon/manager.h
index f1dd53e..b0e15fb 100644
--- a/daemon/manager.h
+++ b/daemon/manager.h
@@ -84,6 +84,7 @@ public slots:
private slots:
void test();
+ void onWebviewClosed(const QString &result);
void onSettingChanged(const QString &key);
void onSettingsChanged();
void onPebbleChanged();
@@ -123,7 +124,7 @@ public slots:
void disconnect() { static_cast<Manager*>(parent())->watch->disconnect(); }
void reconnect() { static_cast<Manager*>(parent())->watch->reconnect(); }
void test() { static_cast<Manager*>(parent())->test(); }
-
+ void webviewClosed(const QString &result) { static_cast<Manager*>(parent())->onWebviewClosed(result); }
};
#endif // MANAGER_H