From adebf71a1d8b3d8bee237f6639fe7343314285d6 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Mon, 8 Jan 2018 15:38:01 +0000 Subject: [PATCH] Set user widgets on application data. --- src/ScalarMessaging.js | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/ScalarMessaging.js b/src/ScalarMessaging.js index 7bde607451..7befee217a 100644 --- a/src/ScalarMessaging.js +++ b/src/ScalarMessaging.js @@ -291,6 +291,7 @@ function setWidget(event, roomId) { const widgetUrl = event.data.url; const widgetName = event.data.name; // optional const widgetData = event.data.data; // optional + const userWidget = event.data.userWidget; const client = MatrixClientPeg.get(); if (!client) { @@ -330,17 +331,32 @@ function setWidget(event, roomId) { name: widgetName, data: widgetData, }; - if (widgetUrl === null) { // widget is being deleted - content = {}; - } - client.sendStateEvent(roomId, "im.vector.modular.widgets", content, widgetId).done(() => { - sendResponse(event, { - success: true, + if (userWidget) { + const client = MatrixClientPeg.get(); + let userWidgets = client.getAccountData('m.widgets'); + + // Delete existing widget with ID + userWidgets = userWidgets.filter((widget) => widget.data.id === widgetId ? false : true); + + // Add new widget / update + if (widgetUrl !== null) { + userWidgets.push(content); + } + + client.setAccountData('m.widgets', userWidgets); + } else { // Room widget + if (widgetUrl === null) { // widget is being deleted + content = {}; + } + client.sendStateEvent(roomId, "im.vector.modular.widgets", content, widgetId).done(() => { + sendResponse(event, { + success: true, + }); + }, (err) => { + sendError(event, _t('Failed to send request.'), err); }); - }, (err) => { - sendError(event, _t('Failed to send request.'), err); - }); + } } function getWidgets(event, roomId) {