diff --git a/src/WidgetMessaging.js b/src/WidgetMessaging.js index 134f93f0f7..2efdc366b6 100644 --- a/src/WidgetMessaging.js +++ b/src/WidgetMessaging.js @@ -153,6 +153,7 @@ Example: import URL from 'url'; import dis from './dispatcher'; import MatrixPostMessageApi from './MatrixPostMessageApi'; +import Promise from 'bluebird'; const WIDGET_API_VERSION = '0.0.1'; // Current API version const SUPPORTED_WIDGET_API_VERSIONS = [ @@ -197,6 +198,7 @@ export default class WidgetMessaging extends MatrixPostMessageApi { * Register widget message event listeners */ startListening() { + this.start(); if (global.mxWidgetMessagingListenerCount === 0) { window.addEventListener("message", () => this.onMessage, false); } @@ -207,6 +209,7 @@ export default class WidgetMessaging extends MatrixPostMessageApi { * De-register widget message event listeners */ stopListening() { + this.stop(); global.mxWidgetMessagingListenerCount -= 1; if (global.mxWidgetMessagingListenerCount === 0) { window.removeEventListener("message", () => this.onMessage); @@ -365,13 +368,19 @@ export default class WidgetMessaging extends MatrixPostMessageApi { /** * Request a screenshot from a widget + * @return {Promise} To be resolved when screenshot has been generated */ getScreenshot() { - this.exec({ - api: "widget_client", - action: "screenshot", - }).then(function(screenshot) { - console.warn("got screenshot", screenshot); + return new Promise((resolve, reject) => { + this.exec({ + api: "widget_client", + action: "screenshot", + }).then(function(response) { + // console.warn("got screenshot", response.screenshot); + resolve(response.screenshot); + }).catch((error) => { + reject(Error("Failed to get screenshot: " + error.message)); + }); }); } } diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index d97f844038..b10d7f91ad 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -274,15 +274,14 @@ export default React.createClass({ _onSnapshotClick(e) { console.warn("Requesting widget snapshot"); - this.widgetMessaging.getScreenshot(); - // const iframe = this.refs.appFrame; - // domtoimage.toPng(iframe).then(function(dataUrl) { - // console.log("Image data URL:", dataUrl); - // dis.dispatch({ - // action: 'picture_snapshot', - // file: dataURLtoBlob(dataUrl), - // }, true); - // }); + this.widgetMessaging.getScreenshot().then((screenshot) => { + dis.dispatch({ + action: 'picture_snapshot', + file: screenshot, + }, true); + }).catch((err) => { + console.error("Failed to get screenshot", err); + }); }, /* If user has permission to modify widgets, delete the widget,