diff --git a/src/ScalarAuthClient.js b/src/ScalarAuthClient.js index c9d056f88e..f50128c454 100644 --- a/src/ScalarAuthClient.js +++ b/src/ScalarAuthClient.js @@ -76,6 +76,36 @@ class ScalarAuthClient { return defer.promise; } + getScalarPageTitle(url) { + const defer = Promise.defer(); + + let scalarPageLookupUrl = SdkConfig.get().integrations_rest_url + '/api/widgets/title_lookup'; + scalarPageLookupUrl = this.getStarterLink(scalarPageLookupUrl); + scalarPageLookupUrl += '&curl=' + encodeURIComponent(url); + request({ + method: 'GET', + uri: scalarPageLookupUrl, + json: true, + }, (err, response, body) => { + if (err) { + defer.reject(err); + } else if (response.statusCode / 100 !== 2) { + defer.reject({statusCode: response.statusCode}); + } else if (!body) { + defer.reject(new Error("Missing scalar_token in response")); + } else { + console.warn("page title body", body); + let title = ""; + if (body.page_title_cache_item && body.page_title_cache_item.cached_title) { + title = body.page_title_cache_item.cached_title; + } + defer.resolve(title); + } + }); + + return defer.promise; + } + getScalarInterfaceUrlForRoom(roomId, screen, id) { let url = SdkConfig.get().integrations_ui_url; url += "?scalar_token=" + encodeURIComponent(this.scalarToken); diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 1dbb7af586..ba0691a1de 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -196,6 +196,8 @@ export default React.createClass({ widgetUrl: u.format(), initialising: false, }); + + this._updateWidgetTitle(params.url); }, (err) => { console.error("Failed to get scalar_token", err); this.setState({ @@ -299,12 +301,19 @@ export default React.createClass({ /** * Set remote content title on AppTile - * @param {string} title Title string to set on the AppTile + * @param {string} url Url to check for title */ - _updateWidgetTitle(title) { - if (title) { - this.setState({widgetPageTitle: null}); - } + _updateWidgetTitle(url) { + this._scalarClient.getScalarPageTitle(url).then((widgetPageTitle) => { + if (widgetPageTitle) { + console.log("Got page title", widgetPageTitle); + this.setState({widgetPageTitle: widgetPageTitle}); + } else { + console.error("No page title"); + } + }, (err) =>{ + console.error("Failed to get page title", err); + }); }, // Widget labels to render, depending upon user permissions