mirror of https://github.com/vector-im/riot-web
				
				
				
			Merge pull request #4086 from matrix-org/bwindels/fixaliases
get local aliases from /aliases in room settingspull/21833/head
						commit
						6118e9621e
					
				| 
						 | 
				
			
			@ -74,7 +74,6 @@ export default class AliasSettings extends React.Component {
 | 
			
		|||
        roomId: PropTypes.string.isRequired,
 | 
			
		||||
        canSetCanonicalAlias: PropTypes.bool.isRequired,
 | 
			
		||||
        canSetAliases: PropTypes.bool.isRequired,
 | 
			
		||||
        aliasEvents: PropTypes.array, // [MatrixEvent]
 | 
			
		||||
        canonicalAliasEvent: PropTypes.object, // MatrixEvent
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -94,12 +93,6 @@ export default class AliasSettings extends React.Component {
 | 
			
		|||
            updatingCanonicalAlias: false,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        const localDomain = MatrixClientPeg.get().getDomain();
 | 
			
		||||
        state.domainToAliases = this.aliasEventsToDictionary(props.aliasEvents || []);
 | 
			
		||||
        state.remoteDomains = Object.keys(state.domainToAliases).filter((domain) => {
 | 
			
		||||
            return domain !== localDomain && state.domainToAliases[domain].length > 0;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        if (props.canonicalAliasEvent) {
 | 
			
		||||
            state.canonicalAlias = props.canonicalAliasEvent.getContent().alias;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -107,6 +100,42 @@ export default class AliasSettings extends React.Component {
 | 
			
		|||
        this.state = state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async componentWillMount() {
 | 
			
		||||
        const cli = MatrixClientPeg.get();
 | 
			
		||||
        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) {
 | 
			
		||||
        return aliases.reduce((dict, alias) => {
 | 
			
		||||
            const domain = alias.split(":")[1];
 | 
			
		||||
            dict[domain] = dict[domain] || [];
 | 
			
		||||
            dict[domain].push(alias);
 | 
			
		||||
            return dict;
 | 
			
		||||
        }, {});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    aliasEventsToDictionary(aliasEvents) { // m.room.alias events
 | 
			
		||||
        const dict = {};
 | 
			
		||||
        aliasEvents.forEach((event) => {
 | 
			
		||||
| 
						 | 
				
			
			@ -117,6 +146,16 @@ export default class AliasSettings extends React.Component {
 | 
			
		|||
        return dict;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _getAltAliases() {
 | 
			
		||||
        if (this.props.canonicalAliasEvent) {
 | 
			
		||||
            const altAliases = this.props.canonicalAliasEvent.getContent().alt_aliases;
 | 
			
		||||
            if (Array.isArray(altAliases)) {
 | 
			
		||||
                return altAliases;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    changeCanonicalAlias(alias) {
 | 
			
		||||
        if (!this.props.canSetCanonicalAlias) return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -126,6 +165,8 @@ export default class AliasSettings extends React.Component {
 | 
			
		|||
        });
 | 
			
		||||
 | 
			
		||||
        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",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue