diff --git a/components/app.js b/components/app.js index 1751521..74544b8 100644 --- a/components/app.js +++ b/components/app.js @@ -810,16 +810,43 @@ export default class App extends Component { switch (buf.type) { case BufferType.SERVER: - this.setState({ - buffers: new Map(), - activeBuffer: null, + this.setState((state) => { + var buffers = new Map(state.buffers); + for (var [id, b] of state.buffers) { + if (b.network === buf.network) { + buffers.delete(id); + } + } + + var activeBuffer = state.activeBuffer; + if (activeBuffer && state.buffers.get(activeBuffer).network === buf.network) { + if (buffers.size > 0) { + activeBuffer = buffers.keys().next().value; + } else { + activeBuffer = null; + } + } + + return { buffers, activeBuffer }; }); + + var client = this.clients.get(buf.network); + var disconnectAll = client && !client.params.bouncerNetwork && client.enabledCaps["soju.im/bouncer-networks"]; + this.disconnect(buf.network); + this.setState((state) => { var networks = new Map(state.networks); networks.delete(buf.network); return { networks }; }); + + if (disconnectAll) { + for (var netID of this.clients.keys()) { + this.close({ network: netID, name: SERVER_BUFFER }); + } + } + // TODO: only clear local storage if this network is stored there if (buf.network == 1 && window.localStorage) { localStorage.removeItem("autoconnect");