1
0
mirror of https://github.com/irssi/irssi.git synced 2024-10-27 05:20:20 -04:00

Merge pull request #1100 from ailin-nemui/spread_server_message_to_windows

refactor quit message into a separate function
This commit is contained in:
ailin-nemui 2019-08-15 16:15:26 +02:00 committed by GitHub
commit f7e67b9e02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -372,50 +372,57 @@ static void sig_message_part(SERVER_REC *server, const char *channel,
TXT_PART, nick, address, channel, reason); TXT_PART, nick, address, channel, reason);
} }
static void sig_message_quit(SERVER_REC *server, const char *nick, static void spread_server_message_to_windows(SERVER_REC *server, gboolean once,
const char *address, const char *reason) gboolean in_query,
int base_level,
int txt, int txt_once,
const char *nick, const char *address,
const char *data,
const char *ignore_data
)
{ {
WINDOW_REC *window; WINDOW_REC *window;
GString *chans; GString *chans;
GSList *tmp, *windows; GSList *tmp, *windows;
char *print_channel; char *print_channel;
int once, count, level = MSGLEVEL_QUITS; int count, level = base_level;
if (ignore_check_plus(server, nick, address, NULL, reason, &level, TRUE)) if (ignore_check_plus(server, nick, address, NULL, ignore_data, &level, TRUE))
return; return;
print_channel = NULL; print_channel = NULL;
once = settings_get_bool("show_quit_once");
count = 0; windows = NULL; count = 0; windows = NULL;
chans = g_string_new(NULL); chans = g_string_new(NULL);
for (tmp = server->channels; tmp != NULL; tmp = tmp->next) { for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
CHANNEL_REC *rec; CHANNEL_REC *rec;
level = MSGLEVEL_QUITS; level = base_level;
rec = tmp->data; rec = tmp->data;
if (!nicklist_find(rec, nick)) if (!nicklist_find(rec, nick)) {
continue; continue;
}
if (ignore_check_plus(server, nick, address, rec->visible_name, if (ignore_check_plus(server, nick, address, rec->visible_name,
reason, &level, TRUE)) { ignore_data, &level, TRUE)) {
count++; count++;
continue; continue;
} }
if (print_channel == NULL || if (print_channel == NULL ||
active_win->active == (WI_ITEM_REC *) rec) active_win->active == (WI_ITEM_REC *) rec) {
print_channel = rec->visible_name; print_channel = rec->visible_name;
}
if (once) if (once) {
g_string_append_printf(chans, "%s,", rec->visible_name); g_string_append_printf(chans, "%s,", rec->visible_name);
else { } else {
window = window_item_window((WI_ITEM_REC *) rec); window = window_item_window((WI_ITEM_REC *) rec);
if (g_slist_find(windows, window) == NULL) { if (g_slist_find(windows, window) == NULL) {
windows = g_slist_append(windows, window); windows = g_slist_prepend(windows, window);
printformat(server, rec->visible_name, printformat(server, rec->visible_name,
level, level,
TXT_QUIT, nick, address, reason, txt, nick, address, data,
rec->visible_name); rec->visible_name);
} }
} }
@ -423,26 +430,41 @@ static void sig_message_quit(SERVER_REC *server, const char *nick,
} }
g_slist_free(windows); g_slist_free(windows);
if (!once) { if (!once && in_query) {
/* check if you had query with the nick and /* check if you had query with the nick and
display the quit there too */ display the change there too */
QUERY_REC *query = query_find(server, nick); QUERY_REC *query = query_find(server, nick);
if (query != NULL) { if (query != NULL) {
printformat(server, nick, level, printformat(server, nick, level,
TXT_QUIT, nick, address, reason, ""); txt, nick, address, data, "");
} }
} }
if (once || count == 0) { if (once || count == 0) {
if (chans->len > 0) if (chans->len > 0) {
g_string_truncate(chans, chans->len-1); g_string_truncate(chans, chans->len-1);
printformat(server, print_channel, MSGLEVEL_QUITS, }
count <= 1 ? TXT_QUIT : TXT_QUIT_ONCE, printformat(server, print_channel, base_level,
nick, address, reason, chans->str); count <= 1 ? txt : txt_once,
nick, address, data, chans->str);
} }
g_string_free(chans, TRUE); g_string_free(chans, TRUE);
} }
static void sig_message_quit(SERVER_REC *server, const char *nick,
const char *address, const char *reason)
{
spread_server_message_to_windows(
server,
settings_get_bool("show_quit_once"),
TRUE,
MSGLEVEL_QUITS,
TXT_QUIT, TXT_QUIT_ONCE,
nick, address, reason,
reason
);
}
static void sig_message_kick(SERVER_REC *server, const char *channel, static void sig_message_kick(SERVER_REC *server, const char *channel,
const char *nick, const char *kicker, const char *nick, const char *kicker,
const char *address, const char *reason) const char *address, const char *reason)