rendered paste bodyvoid channel_list_populate(struct network *net, struct trigger *trig, struct irc_data *data, struct dcc_session *dcc, const char *dccbuf)
{
struct channel *chan = NULL;
struct channel_user *cuser = NULL;
int i = 0;
char *ptr = NULL;
/* First check to see if channel exists, if not, create a record. */
chan = net->chans;
while (chan->prev != NULL) chan = chan->prev;
while (chan != NULL)
{
if (!tstrcasecmp(chan->name,data->c_params[2]))
break; /* Found a channel record */
chan = chan->next;
}
/* this is a new channel */
if (chan == NULL)
{
chan = net->chans;
while (chan->next != NULL) chan = chan->next;
chan->next = channel_new(data->c_params[2]);
chan->next->prev = chan;
}
/* 353 toodle @ #java :toodle */
for(i=0;data->rest[i] != NULL;i++)
{
/* try to find user first */
ptr = data->rest[i];
while (*ptr == '@' || *ptr == '+')
ptr++;
if (chan->user_list == NULL)
{
chan->user_list = new_channel_user(ptr,time(NULL),NULL);
cuser = chan->user_list;
cuser->prev = NULL;
}
else
{
cuser = chan->user_list;
/* Check for an existing user first */
while (cuser->prev != NULL) cuser = cuser->prev;
while (cuser != NULL)
{
if (!tstrcasecmp(cuser->nick,ptr))
{
/* FIXME: Just update modes if needed and continue */
break;
}
cuser = cuser->next;
}
if (cuser != NULL)
continue;
cuser = chan->user_list;
while (cuser->next != NULL) cuser = cuser->next;
cuser->next = new_channel_user(ptr,time(NULL),NULL);
cuser->next->prev = cuser;
cuser->next->next = NULL;
}
if (!strncmp(data->rest[i],"@",1))
{
/* CHECK MODES */
}
}
}