xC: deal with so far unexpected multiline messages
And get rid of an outdated unmarked TODO comment.
This commit is contained in:
parent
e7d0f2380e
commit
7d5e63be1f
24
xC.c
24
xC.c
@ -9075,12 +9075,21 @@ irc_autosplit_message (struct server *s, const char *message,
|
|||||||
- 1 - (int) strlen (s->irc_user_host)
|
- 1 - (int) strlen (s->irc_user_host)
|
||||||
- 1 - fixed_part;
|
- 1 - fixed_part;
|
||||||
|
|
||||||
// However we don't always have the full info for message splitting
|
// Multiline messages can be triggered through hooks and plugins.
|
||||||
|
struct strv lines = strv_make ();
|
||||||
|
cstr_split (message, "\r\n", false, &lines);
|
||||||
|
bool success = true;
|
||||||
|
for (size_t i = 0; i < lines.len; i++)
|
||||||
|
{
|
||||||
|
// We don't always have the full info for message splitting.
|
||||||
if (!space_in_one_message)
|
if (!space_in_one_message)
|
||||||
strv_append (output, message);
|
strv_append (output, lines.vector[i]);
|
||||||
else if (!wrap_message (message, space_in_one_message, output, e))
|
else if (!(success =
|
||||||
return false;
|
wrap_message (lines.vector[i], space_in_one_message, output, e)))
|
||||||
return true;
|
break;
|
||||||
|
}
|
||||||
|
strv_free (&lines);
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -9089,12 +9098,11 @@ send_autosplit_message (struct server *s,
|
|||||||
const char *prefix, const char *suffix)
|
const char *prefix, const char *suffix)
|
||||||
{
|
{
|
||||||
struct buffer *buffer = str_map_find (&s->irc_buffer_map, target);
|
struct buffer *buffer = str_map_find (&s->irc_buffer_map, target);
|
||||||
|
|
||||||
|
// "COMMAND target * :prefix*suffix"
|
||||||
int fixed_part = strlen (command) + 1 + strlen (target) + 1 + 1
|
int fixed_part = strlen (command) + 1 + strlen (target) + 1 + 1
|
||||||
+ strlen (prefix) + strlen (suffix);
|
+ strlen (prefix) + strlen (suffix);
|
||||||
|
|
||||||
// We might also want to preserve attributes across splits but
|
|
||||||
// that would make this code a lot more complicated
|
|
||||||
|
|
||||||
struct strv lines = strv_make ();
|
struct strv lines = strv_make ();
|
||||||
struct error *e = NULL;
|
struct error *e = NULL;
|
||||||
if (!irc_autosplit_message (s, message, fixed_part, &lines, &e))
|
if (!irc_autosplit_message (s, message, fixed_part, &lines, &e))
|
||||||
|
Loading…
Reference in New Issue
Block a user