degesch: show channel user count in the status
This commit is contained in:
parent
639da7a9a7
commit
c0f4b554ef
23
degesch.c
23
degesch.c
@ -1342,6 +1342,7 @@ struct channel
|
|||||||
|
|
||||||
struct channel_user *users; ///< Channel users
|
struct channel_user *users; ///< Channel users
|
||||||
struct str_vector names_buf; ///< Buffer for RPL_NAMREPLY
|
struct str_vector names_buf; ///< Buffer for RPL_NAMREPLY
|
||||||
|
size_t users_len; ///< User count
|
||||||
|
|
||||||
bool left_manually; ///< Don't rejoin on reconnect
|
bool left_manually; ///< Don't rejoin on reconnect
|
||||||
};
|
};
|
||||||
@ -1366,7 +1367,7 @@ channel_destroy (struct channel *self)
|
|||||||
str_free (&self->no_param_modes);
|
str_free (&self->no_param_modes);
|
||||||
str_map_free (&self->param_modes);
|
str_map_free (&self->param_modes);
|
||||||
// Owner has to make sure we have no users by now
|
// Owner has to make sure we have no users by now
|
||||||
hard_assert (!self->users);
|
hard_assert (!self->users && !self->users_len);
|
||||||
str_vector_free (&self->names_buf);
|
str_vector_free (&self->names_buf);
|
||||||
free (self);
|
free (self);
|
||||||
}
|
}
|
||||||
@ -4362,7 +4363,7 @@ static bool
|
|||||||
irc_channel_is_joined (struct channel *channel)
|
irc_channel_is_joined (struct channel *channel)
|
||||||
{
|
{
|
||||||
// TODO: find a better way of checking if we're on a channel
|
// TODO: find a better way of checking if we're on a channel
|
||||||
return !!channel->users;
|
return !!channel->users_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note that this eats the user reference
|
// Note that this eats the user reference
|
||||||
@ -4378,6 +4379,7 @@ irc_channel_link_user (struct channel *channel, struct user *user,
|
|||||||
channel_user->user = user;
|
channel_user->user = user;
|
||||||
str_append (&channel_user->prefixes, prefixes);
|
str_append (&channel_user->prefixes, prefixes);
|
||||||
LIST_PREPEND (channel->users, channel_user);
|
LIST_PREPEND (channel->users, channel_user);
|
||||||
|
channel->users_len++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -4396,6 +4398,7 @@ irc_channel_unlink_user
|
|||||||
// Then just unlink the user from the channel
|
// Then just unlink the user from the channel
|
||||||
LIST_UNLINK (channel->users, channel_user);
|
LIST_UNLINK (channel->users, channel_user);
|
||||||
channel_user_destroy (channel_user);
|
channel_user_destroy (channel_user);
|
||||||
|
channel->users_len--;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -5819,6 +5822,9 @@ make_prompt (struct app_context *ctx, struct str *output)
|
|||||||
if (modes.len)
|
if (modes.len)
|
||||||
str_append_printf (output, "(+%s)", modes.str);
|
str_append_printf (output, "(+%s)", modes.str);
|
||||||
str_free (&modes);
|
str_free (&modes);
|
||||||
|
|
||||||
|
if (buffer->channel->users_len)
|
||||||
|
str_append_printf (output, "{%zu}", buffer->channel->users_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer != ctx->global_buffer)
|
if (buffer != ctx->global_buffer)
|
||||||
@ -5838,6 +5844,7 @@ input_maybe_set_prompt (struct input *self, char *new_prompt)
|
|||||||
CALL_ (self, set_prompt, new_prompt);
|
CALL_ (self, set_prompt, new_prompt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: do this in an idle task so as to not call this unnecessarily
|
||||||
static void
|
static void
|
||||||
refresh_prompt (struct app_context *ctx)
|
refresh_prompt (struct app_context *ctx)
|
||||||
{
|
{
|
||||||
@ -6528,9 +6535,6 @@ irc_handle_mode (struct server *s, const struct irc_message *msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
free (modes);
|
free (modes);
|
||||||
|
|
||||||
// Our own modes might have changed
|
|
||||||
refresh_prompt (s->ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -6646,9 +6650,6 @@ irc_handle_nick (struct server *s, const struct irc_message *msg)
|
|||||||
|
|
||||||
free (user->nickname);
|
free (user->nickname);
|
||||||
user->nickname = xstrdup (new_nickname);
|
user->nickname = xstrdup (new_nickname);
|
||||||
|
|
||||||
// We might have renamed ourselves
|
|
||||||
refresh_prompt (s->ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -7117,7 +7118,6 @@ irc_handle_rpl_umodeis (struct server *s, const struct irc_message *msg)
|
|||||||
irc_handle_mode_user (s, msg->params.vector + 1);
|
irc_handle_mode_user (s, msg->params.vector + 1);
|
||||||
|
|
||||||
// XXX: do we want to log a message?
|
// XXX: do we want to log a message?
|
||||||
refresh_prompt (s->ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -7335,7 +7335,6 @@ irc_handle_rpl_channelmodeis (struct server *s, const struct irc_message *msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// XXX: do we want to log a message?
|
// XXX: do we want to log a message?
|
||||||
refresh_prompt (s->ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
@ -7697,6 +7696,10 @@ irc_process_message (const struct irc_message *msg, struct server *s)
|
|||||||
unsigned long numeric;
|
unsigned long numeric;
|
||||||
if (xstrtoul (&numeric, msg->command, 10))
|
if (xstrtoul (&numeric, msg->command, 10))
|
||||||
irc_process_numeric (s, msg, numeric);
|
irc_process_numeric (s, msg, numeric);
|
||||||
|
|
||||||
|
// Better always make sure everything is in sync rather than care about
|
||||||
|
// each case explicitly whether anything might have changed
|
||||||
|
refresh_prompt (s->ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Message autosplitting magic ---------------------------------------------
|
// --- Message autosplitting magic ---------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user