From 4c9c57bfe5b53f1a32c767f091d875f851d79198 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 19 Feb 2020 10:06:52 +0100 Subject: [PATCH] check server feature flag if not available, revert to old behavior --- .../views/room_settings/AliasSettings.js | 54 ++++++++++++------- .../tabs/room/GeneralRoomSettingsTab.js | 3 +- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js index e441ebfb8a..d7befa488d 100644 --- a/src/components/views/room_settings/AliasSettings.js +++ b/src/components/views/room_settings/AliasSettings.js @@ -94,12 +94,6 @@ export default class AliasSettings extends React.Component { }; if (props.canonicalAliasEvent) { - const cli = MatrixClientPeg.get(); - const localDomain = cli.getDomain(); - state.domainToAliases = this.aliasesToDictionary(this._getAltAliases()); - state.remoteDomains = Object.keys(state.domainToAliases).filter((domain) => { - return domain !== localDomain && state.domainToAliases[domain].length > 0; - }); state.canonicalAlias = props.canonicalAliasEvent.getContent().alias; } @@ -108,15 +102,29 @@ export default class AliasSettings extends React.Component { async componentWillMount() { const cli = MatrixClientPeg.get(); - const response = await cli.getLocalAliases(this.props.roomId); - const localAliases = response.aliases; - const localDomain = cli.getDomain(); - const domainToAliases = Object.assign( - {}, - this.state.domainToAliases, - {[localDomain]: localAliases || []}, - ); - this.setState({ domainToAliases }); + if (await cli.doesServerSupportUnstableFeature("org.matrix.msc2432")) { + const response = await cli.unstableGetLocalAliases(this.props.roomId); + const localAliases = response.aliases; + const localDomain = cli.getDomain(); + const domainToAliases = Object.assign( + {}, + // FIXME, any localhost alt_aliases will be ignored as they are overwritten by localAliases + this.aliasesToDictionary(this._getAltAliases()), + {[localDomain]: localAliases || []}, + ); + const remoteDomains = Object.keys(domainToAliases).filter((domain) => { + return domain !== localDomain && domainToAliases[domain].length > 0; + }); + this.setState({ domainToAliases, remoteDomains }); + } else { + const state = {}; + const localDomain = cli.getDomain(); + state.domainToAliases = this.aliasEventsToDictionary(this.props.aliasEvents || []); + state.remoteDomains = Object.keys(state.domainToAliases).filter((domain) => { + return domain !== localDomain && state.domainToAliases[domain].length > 0; + }); + this.setState(state); + } } aliasesToDictionary(aliases) { @@ -128,6 +136,16 @@ export default class AliasSettings extends React.Component { }, {}); } + aliasEventsToDictionary(aliasEvents) { // m.room.alias events + const dict = {}; + aliasEvents.forEach((event) => { + dict[event.getStateKey()] = ( + (event.getContent().aliases || []).slice() // shallow-copy + ); + }); + return dict; + } + _getAltAliases() { if (this.props.canonicalAliasEvent) { const altAliases = this.props.canonicalAliasEvent.getContent().alt_aliases; @@ -146,9 +164,9 @@ export default class AliasSettings extends React.Component { updatingCanonicalAlias: true, }); - const eventContent = { - alt_aliases: this._getAltAliases(), - }; + const eventContent = {}; + const altAliases = this._getAltAliases(); + if (altAliases) eventContent["alt_aliases"] = altAliases; if (alias) eventContent["alias"] = alias; MatrixClientPeg.get().sendStateEvent(this.props.roomId, "m.room.canonical_alias", diff --git a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js index 098c07b825..b65f8d49a4 100644 --- a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js @@ -78,6 +78,7 @@ export default class GeneralRoomSettingsTab extends React.Component { const canActuallySetAliases = room.currentState.mayClientSendStateEvent("m.room.aliases", client); const canSetCanonical = room.currentState.mayClientSendStateEvent("m.room.canonical_alias", client); const canonicalAliasEv = room.currentState.getStateEvents("m.room.canonical_alias", ''); + const aliasEvents = room.currentState.getStateEvents("m.room.aliases"); const canChangeGroups = room.currentState.mayClientSendStateEvent("m.room.related_groups", client); const groupsEvent = room.currentState.getStateEvents("m.room.related_groups", ""); @@ -93,7 +94,7 @@ export default class GeneralRoomSettingsTab extends React.Component {
+ canonicalAliasEvent={canonicalAliasEv} aliasEvents={aliasEvents} />