check server feature flag

if not available, revert to old behavior
This commit is contained in:
Bruno Windels 2020-02-19 10:06:52 +01:00
parent e6ca581f10
commit 4c9c57bfe5
2 changed files with 38 additions and 19 deletions

View file

@ -94,12 +94,6 @@ export default class AliasSettings extends React.Component {
}; };
if (props.canonicalAliasEvent) { 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; state.canonicalAlias = props.canonicalAliasEvent.getContent().alias;
} }
@ -108,15 +102,29 @@ export default class AliasSettings extends React.Component {
async componentWillMount() { async componentWillMount() {
const cli = MatrixClientPeg.get(); const cli = MatrixClientPeg.get();
const response = await cli.getLocalAliases(this.props.roomId); if (await cli.doesServerSupportUnstableFeature("org.matrix.msc2432")) {
const localAliases = response.aliases; const response = await cli.unstableGetLocalAliases(this.props.roomId);
const localDomain = cli.getDomain(); const localAliases = response.aliases;
const domainToAliases = Object.assign( const localDomain = cli.getDomain();
{}, const domainToAliases = Object.assign(
this.state.domainToAliases, {},
{[localDomain]: localAliases || []}, // FIXME, any localhost alt_aliases will be ignored as they are overwritten by localAliases
); this.aliasesToDictionary(this._getAltAliases()),
this.setState({ domainToAliases }); {[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) { 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() { _getAltAliases() {
if (this.props.canonicalAliasEvent) { if (this.props.canonicalAliasEvent) {
const altAliases = this.props.canonicalAliasEvent.getContent().alt_aliases; const altAliases = this.props.canonicalAliasEvent.getContent().alt_aliases;
@ -146,9 +164,9 @@ export default class AliasSettings extends React.Component {
updatingCanonicalAlias: true, updatingCanonicalAlias: true,
}); });
const eventContent = { const eventContent = {};
alt_aliases: this._getAltAliases(), const altAliases = this._getAltAliases();
}; if (altAliases) eventContent["alt_aliases"] = altAliases;
if (alias) eventContent["alias"] = alias; if (alias) eventContent["alias"] = alias;
MatrixClientPeg.get().sendStateEvent(this.props.roomId, "m.room.canonical_alias", MatrixClientPeg.get().sendStateEvent(this.props.roomId, "m.room.canonical_alias",

View file

@ -78,6 +78,7 @@ export default class GeneralRoomSettingsTab extends React.Component {
const canActuallySetAliases = room.currentState.mayClientSendStateEvent("m.room.aliases", client); const canActuallySetAliases = room.currentState.mayClientSendStateEvent("m.room.aliases", client);
const canSetCanonical = room.currentState.mayClientSendStateEvent("m.room.canonical_alias", client); const canSetCanonical = room.currentState.mayClientSendStateEvent("m.room.canonical_alias", client);
const canonicalAliasEv = room.currentState.getStateEvents("m.room.canonical_alias", ''); 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 canChangeGroups = room.currentState.mayClientSendStateEvent("m.room.related_groups", client);
const groupsEvent = room.currentState.getStateEvents("m.room.related_groups", ""); const groupsEvent = room.currentState.getStateEvents("m.room.related_groups", "");
@ -93,7 +94,7 @@ export default class GeneralRoomSettingsTab extends React.Component {
<div className='mx_SettingsTab_section mx_SettingsTab_subsectionText'> <div className='mx_SettingsTab_section mx_SettingsTab_subsectionText'>
<AliasSettings roomId={this.props.roomId} <AliasSettings roomId={this.props.roomId}
canSetCanonicalAlias={canSetCanonical} canSetAliases={canSetAliases} canSetCanonicalAlias={canSetCanonical} canSetAliases={canSetAliases}
canonicalAliasEvent={canonicalAliasEv} /> canonicalAliasEvent={canonicalAliasEv} aliasEvents={aliasEvents} />
</div> </div>
<div className='mx_SettingsTab_section'> <div className='mx_SettingsTab_section'>
<LabelledToggleSwitch value={this.state.isRoomPublished} <LabelledToggleSwitch value={this.state.isRoomPublished}