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:
commit
f7e67b9e02
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user