} /* Channel_Quit */
+/**
+ * Get number of channels this server knows and that are "visible" to
+ * the given client. If no client is given, all channels will be counted.
+ *
+ * @param Client The client to check or NULL.
+ * @return Number of channels visible to the client.
+ */
GLOBAL unsigned long
-Channel_Count( void )
+Channel_CountVisible (CLIENT *Client)
{
CHANNEL *c;
unsigned long count = 0;
c = My_Channels;
- while( c )
- {
- count++;
+ while(c) {
+ if (Client) {
+ if (!strchr(Channel_Modes(c), 's')
+ || Channel_IsMemberOf(c, Client))
+ count++;
+ } else
+ count++;
c = c->next;
}
return count;
-} /* Channel_Count */
+}
GLOBAL unsigned long
{
struct list_head *h = Channel_GetListBans(c);
LogDebug("Adding \"%s\" to \"%s\" %s list", mask, Channel_Name(c), "ban");
- return Lists_Add(h, mask, false);
+ return Lists_Add(h, mask, false, NULL);
}
{
struct list_head *h = Channel_GetListInvites(c);
LogDebug("Adding \"%s\" to \"%s\" %s list", mask, Channel_Name(c), "invite");
- return Lists_Add(h, mask, onlyonce);
+ return Lists_Add(h, mask, onlyonce, NULL);
}
static bool
-ShowInvitesBans(struct list_head *head, CLIENT *Client, CHANNEL *Channel, bool invite)
+ShowChannelList(struct list_head *head, CLIENT *Client, CHANNEL *Channel,
+ char *msg, char *msg_end)
{
struct list_elem *e;
- char *msg = invite ? RPL_INVITELIST_MSG : RPL_BANLIST_MSG;
- char *msg_end;
- assert( Client != NULL );
- assert( Channel != NULL );
+ assert (Client != NULL);
+ assert (Channel != NULL);
e = Lists_GetFirst(head);
while (e) {
- if( ! IRC_WriteStrClient( Client, msg, Client_ID( Client ),
- Channel_Name( Channel ), Lists_GetMask(e) )) return DISCONNECTED;
+ if (!IRC_WriteStrClient(Client, msg, Client_ID(Client),
+ Channel_Name(Channel),
+ Lists_GetMask(e)))
+ return DISCONNECTED;
e = Lists_GetNext(e);
}
- msg_end = invite ? RPL_ENDOFINVITELIST_MSG : RPL_ENDOFBANLIST_MSG;
- return IRC_WriteStrClient( Client, msg_end, Client_ID( Client ), Channel_Name( Channel ));
+ return IRC_WriteStrClient(Client, msg_end, Client_ID(Client),
+ Channel_Name(Channel));
}
assert( Channel != NULL );
h = Channel_GetListBans(Channel);
- return ShowInvitesBans(h, Client, Channel, false);
+ return ShowChannelList(h, Client, Channel, RPL_BANLIST_MSG,
+ RPL_ENDOFBANLIST_MSG);
}
assert( Channel != NULL );
h = Channel_GetListInvites(Channel);
- return ShowInvitesBans(h, Client, Channel, true);
+ return ShowChannelList(h, Client, Channel, RPL_INVITELIST_MSG,
+ RPL_ENDOFINVITELIST_MSG);
}