mirror of
https://codeberg.org/emersion/gamja
synced 2025-03-13 07:48:37 +01:00
state: move in QUIT and NICK update logic
This commit is contained in:
parent
bf471abb1b
commit
a1057092e0
@ -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
|
||||||
|
46
state.js
46
state.js
@ -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":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user