mirror of
https://git.sr.ht/~emersion/gamja
synced 2025-02-17 20:40:17 -05:00
state: move in QUIT and NICK update logic
This commit is contained in:
parent
bf471abb1b
commit
a1057092e0
2 changed files with 41 additions and 41 deletions
|
@ -806,42 +806,6 @@ export default class App extends Component {
|
|||
this.saveReceipts();
|
||||
}
|
||||
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":
|
||||
if (msg.params[0] !== "NETWORK") {
|
||||
break; // We're only interested in network updates
|
||||
|
|
46
state.js
46
state.js
|
@ -317,7 +317,7 @@ export const State = {
|
|||
return;
|
||||
}
|
||||
|
||||
let target, channel, topic, targets, who;
|
||||
let target, channel, topic, targets, who, update, buffers;
|
||||
switch (msg.command) {
|
||||
case irc.RPL_MYINFO:
|
||||
// TODO: parse available modes
|
||||
|
@ -327,7 +327,7 @@ export const State = {
|
|||
};
|
||||
return updateBuffer(SERVER_BUFFER, { serverInfo });
|
||||
case irc.RPL_ISUPPORT:
|
||||
let buffers = new Map(state.buffers);
|
||||
buffers = new Map(state.buffers);
|
||||
state.buffers.forEach((buf) => {
|
||||
if (buf.server != serverID) {
|
||||
return;
|
||||
|
@ -402,7 +402,7 @@ export const State = {
|
|||
state = { ...state, ...update };
|
||||
}
|
||||
|
||||
let update = updateBuffer(channel, (buf) => {
|
||||
update = updateBuffer(channel, (buf) => {
|
||||
let members = new irc.CaseMapMap(buf.members);
|
||||
members.set(msg.prefix.name, "");
|
||||
return { members };
|
||||
|
@ -445,15 +445,48 @@ export const State = {
|
|||
return { members };
|
||||
});
|
||||
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) {
|
||||
return;
|
||||
}
|
||||
return { offline: true };
|
||||
});
|
||||
state = { ...state, ...update };
|
||||
|
||||
return state;
|
||||
case "NICK":
|
||||
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 user = users.get(msg.prefix.name);
|
||||
if (!user) {
|
||||
|
@ -463,6 +496,9 @@ export const State = {
|
|||
users.delete(msg.prefix.name);
|
||||
return { users };
|
||||
});
|
||||
state = { ...state, ...update };
|
||||
|
||||
return state;
|
||||
case "SETNAME":
|
||||
return updateUser(msg.prefix.name, { realname: msg.params[0] });
|
||||
case "CHGHOST":
|
||||
|
|
Loading…
Reference in a new issue