From f7ba3f07cd0a07ea7482211faae3e2024ee5fbad Mon Sep 17 00:00:00 2001 From: Oliver Sand Date: Fri, 20 May 2022 00:22:38 +0200 Subject: [PATCH] Support avatar_url in the scalar client API (#8550) * Support avatar_url in the scalar client API Signed-off-by: Oliver Sand * Fix return type * Remove automatic upload * Remove return type * Fix indention --- src/ScalarMessaging.ts | 23 +++++++++++++++++------ src/utils/WidgetUtils.ts | 2 ++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/ScalarMessaging.ts b/src/ScalarMessaging.ts index a380c760b5..337b9c8167 100644 --- a/src/ScalarMessaging.ts +++ b/src/ScalarMessaging.ts @@ -148,6 +148,7 @@ Request: can configure/lay out the widget in different ways. All widgets must have a type. - `name` (String) is an optional human-readable string about the widget. - `data` (Object) is some optional data about the widget, and can contain arbitrary key/value pairs. + - `avatar_url` (String) is some optional mxc: URI pointing to the avatar of the widget. Response: { success: true @@ -319,6 +320,7 @@ function setWidget(event: MessageEvent, roomId: string): void { const widgetUrl = event.data.url; const widgetName = event.data.name; // optional const widgetData = event.data.data; // optional + const widgetAvatarUrl = event.data.avatar_url; // optional const userWidget = event.data.userWidget; // both adding/removing widgets need these checks @@ -337,6 +339,14 @@ function setWidget(event: MessageEvent, roomId: string): void { sendError(event, _t("Unable to create widget."), new Error("Optional field 'data' must be an Object.")); return; } + if (widgetAvatarUrl !== undefined && typeof widgetAvatarUrl !== 'string') { + sendError( + event, + _t("Unable to create widget."), + new Error("Optional field 'avatar_url' must be a string."), + ); + return; + } if (typeof widgetType !== 'string') { sendError(event, _t("Unable to create widget."), new Error("Field 'type' must be a string.")); return; @@ -364,13 +374,14 @@ function setWidget(event: MessageEvent, roomId: string): void { if (!roomId) { sendError(event, _t('Missing roomId.'), null); } - WidgetUtils.setRoomWidget(roomId, widgetId, widgetType, widgetUrl, widgetName, widgetData).then(() => { - sendResponse(event, { - success: true, + WidgetUtils.setRoomWidget(roomId, widgetId, widgetType, widgetUrl, widgetName, widgetData, widgetAvatarUrl) + .then(() => { + sendResponse(event, { + success: true, + }); + }, (err) => { + sendError(event, _t('Failed to send request.'), err); }); - }, (err) => { - sendError(event, _t('Failed to send request.'), err); - }); } } diff --git a/src/utils/WidgetUtils.ts b/src/utils/WidgetUtils.ts index b2f33b2225..8eebed3871 100644 --- a/src/utils/WidgetUtils.ts +++ b/src/utils/WidgetUtils.ts @@ -286,6 +286,7 @@ export default class WidgetUtils { widgetUrl?: string, widgetName?: string, widgetData?: object, + widgetAvatarUrl?: string, ) { let content; @@ -299,6 +300,7 @@ export default class WidgetUtils { url: widgetUrl, name: widgetName, data: widgetData, + avatar_url: widgetAvatarUrl, }; } else { content = {};