void irc_input_send_user_message (struct t_gui_buffer *buffer, char *text) { int max_length; char *pos, *pos_max, *last_space, *pos_next, *next, saved_char; IRC_GET_SERVER_CHANNEL(buffer); if (!ptr_server || !ptr_channel || !text || !text[0]) return; if (!ptr_server->is_connected) { weechat_printf (buffer, _("%s%s: you are not connected to server"), weechat_prefix ("error"), IRC_PLUGIN_NAME); return; } next = NULL; last_space = NULL; saved_char = '\0'; max_length = 512 - 16 - 65 - 10 - strlen (ptr_server->nick) - strlen (ptr_channel->name); if (max_length > 0) { if ((int)strlen (text) > max_length) { pos = text; pos_max = text + max_length; while (pos && pos[0]) { if (pos[0] == ' ') last_space = pos; pos_next = weechat_utf8_next_char (pos); if (pos_next > pos_max) break; pos = pos_next; } if (last_space && (last_space < pos)) pos = last_space + 1; saved_char = pos[0]; pos[0] = '\0'; next = pos; } } irc_server_sendf (ptr_server, 1, "PRIVMSG %s :%s", ptr_channel->name, text); irc_input_user_message_display (buffer, text); if (next) { next[0] = saved_char; irc_input_send_user_message (buffer, next); } }
int irc_input_data (struct t_gui_buffer *buffer, const char *input_data, int flags) { const char *ptr_data; char *data_with_colors, *msg; IRC_BUFFER_GET_SERVER_CHANNEL(buffer); if (buffer == irc_raw_buffer) { if (dogechat_strcasecmp (input_data, "q") == 0) dogechat_buffer_close (buffer); } else { /* * if send unknown commands is enabled and that input data is a * command, then send this command to IRC server */ if (dogechat_config_boolean (irc_config_network_send_unknown_commands) && !dogechat_string_input_for_buffer (input_data)) { if (ptr_server) { irc_server_sendf (ptr_server, flags, NULL, "%s", dogechat_utf8_next_char (input_data)); } return DOGECHAT_RC_OK; } if (ptr_channel) { ptr_data = dogechat_string_input_for_buffer (input_data); if (!ptr_data) ptr_data = input_data; data_with_colors = irc_color_encode ( ptr_data, dogechat_config_boolean (irc_config_network_colors_send)); msg = strdup ((data_with_colors) ? data_with_colors : ptr_data); if (msg) { irc_input_send_user_message (buffer, flags, NULL, msg); free (msg); } if (data_with_colors) free (data_with_colors); } else { dogechat_printf (buffer, _("%s%s: this buffer is not a channel!"), dogechat_prefix ("error"), IRC_PLUGIN_NAME); } } return DOGECHAT_RC_OK; }
int irc_input_data_cb (void *data, struct t_gui_buffer *buffer, const char *input_data) { const char *ptr_data; char *data_with_colors, *msg; /* make C compiler happy */ (void) data; IRC_GET_SERVER_CHANNEL(buffer); /* if send unknown commands is enabled and that input data is a command, then send this command to IRC server */ if (weechat_config_boolean (irc_config_network_send_unknown_commands) && (input_data[0] == '/') && (input_data[1] != '/')) { if (ptr_server) irc_server_sendf (ptr_server, 1, input_data + 1); return WEECHAT_RC_OK; } if (ptr_channel) { ptr_data = ((input_data[0] == '/') && (input_data[1] == '/')) ? input_data + 1 : input_data; data_with_colors = irc_color_encode (ptr_data, weechat_config_boolean (irc_config_network_colors_send)); msg = strdup ((data_with_colors) ? data_with_colors : ptr_data); if (msg) { irc_input_send_user_message (buffer, msg); free (msg); } if (data_with_colors) free (data_with_colors); } else { weechat_printf (buffer, _("%s%s: this buffer is not a channel!"), weechat_prefix ("error"), IRC_PLUGIN_NAME); } return WEECHAT_RC_OK; }