Accumulate mode changes into a buffer for one message

weechat-hashes
C. McEnroe 2020-02-23 22:44:19 -05:00
parent 9609723dc6
commit c3c40d738b
1 changed files with 12 additions and 13 deletions

View File

@ -495,6 +495,7 @@ static void handleMode(struct Message *msg) {
uint id = idFor(msg->params[0]); uint id = idFor(msg->params[0]);
bool set = false; bool set = false;
uint param = 2; uint param = 2;
char buf[1024] = "";
for (char *ch = msg->params[1]; *ch; ++ch) { for (char *ch = msg->params[1]; *ch; ++ch) {
if (*ch == '+') { if (*ch == '+') {
set = true; set = true;
@ -506,11 +507,8 @@ static void handleMode(struct Message *msg) {
char *nick = msg->params[param++]; char *nick = msg->params[param++];
char *mode = strchr(network.prefixModes, *ch); char *mode = strchr(network.prefixModes, *ch);
char prefix = network.prefixes[mode - network.prefixModes]; char prefix = network.prefixes[mode - network.prefixModes];
// TODO: Invert nick if targeting self? catf(
uiFormat( buf, sizeof(buf), ", %s \3%02d%c%s\3",
id, (!strcmp(nick, self.nick) ? Hot : Cold), tagTime(msg),
"\3%02d%s\3\t%s \3%02d%c%s\3",
hash(msg->user), msg->nick,
(set ? "grants" : "revokes"), (set ? "grants" : "revokes"),
completeColor(id, nick), prefix, nick completeColor(id, nick), prefix, nick
); );
@ -519,10 +517,8 @@ static void handleMode(struct Message *msg) {
assert(param < ParamCap); assert(param < ParamCap);
char *mask = msg->params[param++]; char *mask = msg->params[param++];
if (*ch == 'b') { if (*ch == 'b') {
uiFormat( catf(
id, Cold, tagTime(msg), buf, sizeof(buf), ", %s %s from \3%02d%s\3",
"\3%02d%s\3\t%s %s from \3%02d%s\3",
hash(msg->user), msg->nick,
(set ? "bans" : "unbans"), (set ? "bans" : "unbans"),
mask, mask,
hash(msg->params[0]), msg->params[0] hash(msg->params[0]), msg->params[0]
@ -532,10 +528,8 @@ static void handleMode(struct Message *msg) {
const char *list = (const char[]) { *ch, '\0' }; const char *list = (const char[]) { *ch, '\0' };
if (*ch == network.excepts) list = "except"; if (*ch == network.excepts) list = "except";
if (*ch == network.invex) list = "invite"; if (*ch == network.invex) list = "invite";
uiFormat( catf(
id, Cold, tagTime(msg), buf, sizeof(buf), ", %s %s %s the \3%02d%s\3 %s list",
"\3%02d%s\3\t%s %s %s the \3%02d%s\3 %s list",
hash(msg->user), msg->nick,
(set ? "adds" : "removes"), (set ? "adds" : "removes"),
mask, mask,
(set ? "to" : "from"), (set ? "to" : "from"),
@ -551,6 +545,11 @@ static void handleMode(struct Message *msg) {
// TODO // TODO
} }
} }
if (strlen(buf) < 2) return;
uiFormat(
id, Cold, tagTime(msg),
"\3%02d%s\3\t%s", hash(msg->user), msg->nick, &buf[2]
);
} }
static void handleErrorChanopPrivsNeeded(struct Message *msg) { static void handleErrorChanopPrivsNeeded(struct Message *msg) {