Screenshot handlers

pull/21833/head
Richard Lewis 2017-12-15 21:36:02 +00:00
parent 954c6eecd6
commit e63f5696a6
2 changed files with 22 additions and 14 deletions

View File

@ -153,6 +153,7 @@ Example:
import URL from 'url'; import URL from 'url';
import dis from './dispatcher'; import dis from './dispatcher';
import MatrixPostMessageApi from './MatrixPostMessageApi'; import MatrixPostMessageApi from './MatrixPostMessageApi';
import Promise from 'bluebird';
const WIDGET_API_VERSION = '0.0.1'; // Current API version const WIDGET_API_VERSION = '0.0.1'; // Current API version
const SUPPORTED_WIDGET_API_VERSIONS = [ const SUPPORTED_WIDGET_API_VERSIONS = [
@ -197,6 +198,7 @@ export default class WidgetMessaging extends MatrixPostMessageApi {
* Register widget message event listeners * Register widget message event listeners
*/ */
startListening() { startListening() {
this.start();
if (global.mxWidgetMessagingListenerCount === 0) { if (global.mxWidgetMessagingListenerCount === 0) {
window.addEventListener("message", () => this.onMessage, false); window.addEventListener("message", () => this.onMessage, false);
} }
@ -207,6 +209,7 @@ export default class WidgetMessaging extends MatrixPostMessageApi {
* De-register widget message event listeners * De-register widget message event listeners
*/ */
stopListening() { stopListening() {
this.stop();
global.mxWidgetMessagingListenerCount -= 1; global.mxWidgetMessagingListenerCount -= 1;
if (global.mxWidgetMessagingListenerCount === 0) { if (global.mxWidgetMessagingListenerCount === 0) {
window.removeEventListener("message", () => this.onMessage); window.removeEventListener("message", () => this.onMessage);
@ -365,13 +368,19 @@ export default class WidgetMessaging extends MatrixPostMessageApi {
/** /**
* Request a screenshot from a widget * Request a screenshot from a widget
* @return {Promise} To be resolved when screenshot has been generated
*/ */
getScreenshot() { getScreenshot() {
this.exec({ return new Promise((resolve, reject) => {
api: "widget_client", this.exec({
action: "screenshot", api: "widget_client",
}).then(function(screenshot) { action: "screenshot",
console.warn("got screenshot", screenshot); }).then(function(response) {
// console.warn("got screenshot", response.screenshot);
resolve(response.screenshot);
}).catch((error) => {
reject(Error("Failed to get screenshot: " + error.message));
});
}); });
} }
} }

View File

@ -274,15 +274,14 @@ export default React.createClass({
_onSnapshotClick(e) { _onSnapshotClick(e) {
console.warn("Requesting widget snapshot"); console.warn("Requesting widget snapshot");
this.widgetMessaging.getScreenshot(); this.widgetMessaging.getScreenshot().then((screenshot) => {
// const iframe = this.refs.appFrame; dis.dispatch({
// domtoimage.toPng(iframe).then(function(dataUrl) { action: 'picture_snapshot',
// console.log("Image data URL:", dataUrl); file: screenshot,
// dis.dispatch({ }, true);
// action: 'picture_snapshot', }).catch((err) => {
// file: dataURLtoBlob(dataUrl), console.error("Failed to get screenshot", err);
// }, true); });
// });
}, },
/* If user has permission to modify widgets, delete the widget, /* If user has permission to modify widgets, delete the widget,