| | 97 | | static void event_names_list(IRC_SERVER_REC *server, const char *data) | | | 98 | | { | | | 99 | | IRC_CHANNEL_REC *chanrec; | | | 100 | | NICK_REC *rec; | | | 101 | | char *params, *type, *channel, *names, *ptr; | | | 102 | | int op, halfop, voice; | | | 103 | | char prefixes[MAX_USER_PREFIXES+1];
| | | 104 | | | | | 105 | | g_return_if_fail(data != NULL);
| | | 106 | | | | | 107 | | params = event_get_params(data, 4, NULL, &type, &channel, &names);
| | | 108 | | | | | 109 | | chanrec = irc_channel_find(server, channel);
| | | 110 | | if (chanrec == NULL || chanrec->names_got) {
| | | 111 | | | | | 112 | | g_free(params); | | | 113 | | return; | | | 114 | | } | | | 115 | | | | | 116 | | | | | 117 | | | | | 118 | | | | | 119 | | | | | 120 | | | | | 121 | | | | | 122 | | | | | 123 | | | | | 124 | | if (*type == '*') { | | | 125 | | parse_channel_modes(chanrec, NULL,
| | | 126 | | chanrec->key ? "+kp" : "+p", FALSE);
| | | 127 | | } else if (*type == '@') { | | | 128 | | parse_channel_modes(chanrec, NULL,
| | | 129 | | chanrec->key ? "+ks" : "+s", FALSE);
| | | 130 | | } | | | 131 | | | | | 132 | | while (*names != '\0') { | | | 133 | | while (*names == ' ') names++; | | | 134 | | ptr = names; | | | 135 | | while (*names != '\0' && *names != ' ') names++; | | | 136 | | if (*names != '\0') *names++ = '\0'; | | | 137 | | | | | 138 | | | | | 139 | | | | | 140 | | | | | 141 | | | | | 142 | | op = halfop = voice = FALSE;
| | | 143 | | prefixes[0] = '\0'; | | | 144 | | while (isnickflag(server, *ptr)) {
| | | 145 | | prefix_add(prefixes, *ptr, (SERVER_REC *) server); | | | 146 | | switch (*ptr) { | | | 147 | | case '@': | | | 148 | | op = TRUE;
| | | 149 | | break; | | | 150 | | case '%': | | | 151 | | halfop = TRUE;
| | | 152 | | break; | | | 153 | | case '+': | | | 154 | | voice = TRUE;
| | | 155 | | break; | | | 156 | | } | | | 157 | | ptr++; | | | 158 | | } | | | 159 | | | | | 160 | | if (nicklist_find((CHANNEL_REC *) chanrec, ptr) == NULL) {
| | | 161 | | rec = irc_nicklist_insert(chanrec, ptr, op, halfop, |
|