state: move in QUIT and NICK update logic

This commit is contained in:
Simon Ser 2021-10-23 23:11:43 +02:00
parent bf471abb1b
commit a1057092e0
2 changed files with 41 additions and 41 deletions

View File

@ -806,42 +806,6 @@ export default class App extends Component {
this.saveReceipts(); this.saveReceipts();
} }
break; break;
case "QUIT":
this.setState((state) => {
let buffers = new Map(state.buffers);
state.buffers.forEach((buf) => {
if (buf.server != serverID) {
return;
}
if (!buf.members.has(msg.prefix.name)) {
return;
}
let members = new irc.CaseMapMap(buf.members);
members.delete(msg.prefix.name);
buffers.set(buf.id, { ...buf, members });
});
return { buffers };
});
break;
case "NICK":
let newNick = msg.params[0];
this.setState((state) => {
let buffers = new Map(state.buffers);
state.buffers.forEach((buf) => {
if (buf.server != serverID) {
return;
}
if (!buf.members.has(msg.prefix.name)) {
return;
}
let members = new irc.CaseMapMap(buf.members);
members.set(newNick, members.get(msg.prefix.name));
members.delete(msg.prefix.name);
buffers.set(buf.id, { ...buf, members });
});
return { buffers };
});
break;
case "BOUNCER": case "BOUNCER":
if (msg.params[0] !== "NETWORK") { if (msg.params[0] !== "NETWORK") {
break; // We're only interested in network updates break; // We're only interested in network updates

View File

@ -317,7 +317,7 @@ export const State = {
return; return;
} }
let target, channel, topic, targets, who; let target, channel, topic, targets, who, update, buffers;
switch (msg.command) { switch (msg.command) {
case irc.RPL_MYINFO: case irc.RPL_MYINFO:
// TODO: parse available modes // TODO: parse available modes
@ -327,7 +327,7 @@ export const State = {
}; };
return updateBuffer(SERVER_BUFFER, { serverInfo }); return updateBuffer(SERVER_BUFFER, { serverInfo });
case irc.RPL_ISUPPORT: case irc.RPL_ISUPPORT:
let buffers = new Map(state.buffers); buffers = new Map(state.buffers);
state.buffers.forEach((buf) => { state.buffers.forEach((buf) => {
if (buf.server != serverID) { if (buf.server != serverID) {
return; return;
@ -402,7 +402,7 @@ export const State = {
state = { ...state, ...update }; state = { ...state, ...update };
} }
let update = updateBuffer(channel, (buf) => { update = updateBuffer(channel, (buf) => {
let members = new irc.CaseMapMap(buf.members); let members = new irc.CaseMapMap(buf.members);
members.set(msg.prefix.name, ""); members.set(msg.prefix.name, "");
return { members }; return { members };
@ -445,15 +445,48 @@ export const State = {
return { members }; return { members };
}); });
case "QUIT": case "QUIT":
return updateUser(msg.prefix.name, (user) => { buffers = new Map(state.buffers);
state.buffers.forEach((buf) => {
if (buf.server != serverID) {
return;
}
if (!buf.members.has(msg.prefix.name)) {
return;
}
let members = new irc.CaseMapMap(buf.members);
members.delete(msg.prefix.name);
buffers.set(buf.id, { ...buf, members });
});
state = { ...state, buffers };
update = updateUser(msg.prefix.name, (user) => {
if (!user) { if (!user) {
return; return;
} }
return { offline: true }; return { offline: true };
}); });
state = { ...state, ...update };
return state;
case "NICK": case "NICK":
let newNick = msg.params[0]; let newNick = msg.params[0];
return updateServer((server) => {
buffers = new Map(state.buffers);
state.buffers.forEach((buf) => {
if (buf.server != serverID) {
return;
}
if (!buf.members.has(msg.prefix.name)) {
return;
}
let members = new irc.CaseMapMap(buf.members);
members.set(newNick, members.get(msg.prefix.name));
members.delete(msg.prefix.name);
buffers.set(buf.id, { ...buf, members });
});
state = { ...state, buffers };
update = updateServer((server) => {
let users = new irc.CaseMapMap(server.users); let users = new irc.CaseMapMap(server.users);
let user = users.get(msg.prefix.name); let user = users.get(msg.prefix.name);
if (!user) { if (!user) {
@ -463,6 +496,9 @@ export const State = {
users.delete(msg.prefix.name); users.delete(msg.prefix.name);
return { users }; return { users };
}); });
state = { ...state, ...update };
return state;
case "SETNAME": case "SETNAME":
return updateUser(msg.prefix.name, { realname: msg.params[0] }); return updateUser(msg.prefix.name, { realname: msg.params[0] });
case "CHGHOST": case "CHGHOST":