AmendHub

Download:

jcs

/

wallops

/

amendments

/

80

*: Implement selective ignoring of certain events like joins and quits

On a small screen in a busy channel, having a screenful of nothing
but joins and quits is pretty annoying, so make it easy to turn them
off and on globally.

jcs made amendment 80 3 months ago
--- chatter.h Tue Sep 10 08:49:49 2024 +++ chatter.h Tue Sep 10 22:20:33 2024 @@ -47,12 +47,23 @@ #define VIEW_MENU_ID 131 #define VIEW_MENU_HIDE_ID 1 #define VIEW_MENU_CLOSE_ID 2 +#define VIEW_MENU_IGNORE_ID 3 +#define IGNORE_MENU_ID 132 +#define IGNORE_MENU_JOINS_ID 1 +#define IGNORE_MENU_QUITS_ID 2 +#define IGNORE_MENU_NICKS_ID 3 + #define WAIT_TYPE_NONE (1 << 0) #define WAIT_TYPE_BACKGROUND (1 << 1) #define WAIT_TYPE_FOREGROUND (1 << 2) #define WAIT_TYPE_URGENT (1 << 3) +#define IGNORE_NONE (1 << 0) +#define IGNORE_JOINS (1 << 1) +#define IGNORE_QUITS (1 << 2) +#define IGNORE_NICKS (1 << 3) + struct chatter_tab { SLIST_ENTRY(chatter_tab) list; struct irc_connection *conn; @@ -80,7 +91,7 @@ struct chatter { struct chatter_tab *current_tab; }; -extern MenuHandle apple_menu, file_menu, edit_menu, view_menu; +extern MenuHandle apple_menu, file_menu, edit_menu, view_menu, ignore_menu; void notify(void); void cancel_notification(void); --- irc.c Tue Sep 10 21:55:38 2024 +++ irc.c Tue Sep 10 22:53:39 2024 @@ -20,6 +20,7 @@ #include "chatter.h" #include "irc.h" +#include "settings.h" #include "strnatcmp.h" short irc_verify_state(struct irc_connection *conn, short state); @@ -539,9 +540,10 @@ irc_process_server(struct irc_connection *conn) if (channel) irc_add_nick_to_channel(channel, user->nick, 0, 0); } - chatter_printf(channel->chatter, conn, msg.arg[0], - "$B*** %s ($0%s@%s$B)$0 has joined $B%s$0", - user->nick, user->username, user->hostname, msg.arg[0]); + if (!(settings.ignores & IGNORE_JOINS)) + chatter_printf(channel->chatter, conn, msg.arg[0], + "$B*** %s ($0%s@%s$B)$0 has joined $B%s$0", + user->nick, user->username, user->hostname, msg.arg[0]); return true; } if (strcmp(msg.cmd, "KICK") == 0) { @@ -553,9 +555,10 @@ irc_process_server(struct irc_connection *conn) } else irc_remove_nick_from_channel(channel, msg.arg[1]); } - chatter_printf(conn->chatter, conn, msg.arg[0], - "$B*** %s$0 was kicked from $B%s$0 by $B%s%0:$/ %s", - msg.arg[0], msg.arg[1], user->nick, msg.msg); + if (!(settings.ignores & IGNORE_QUITS)) + chatter_printf(conn->chatter, conn, msg.arg[0], + "$B*** %s$0 was kicked from $B%s$0 by $B%s%0:$/ %s", + msg.arg[0], msg.arg[1], user->nick, msg.msg); return true; } if (strcmp(msg.cmd, "KILL") == 0) { @@ -617,10 +620,12 @@ irc_process_server(struct irc_connection *conn) SLIST_FOREACH(channel, &conn->channels_list, list) { if (!irc_nick_is_in_channel(channel, user->nick)) continue; - - chatter_printf(conn->chatter, conn, channel->name, - "$B*** %s$0 is now known as $B%s$0", - user->nick, msg.msg); + + if (strcmp(msg.msg, conn->nick) == 0 || + !(settings.ignores & IGNORE_NICKS)) + chatter_printf(conn->chatter, conn, channel->name, + "$B*** %s$0 is now known as $B%s$0", + user->nick, msg.msg); irc_change_user_nick(channel, user, msg.msg); } /* TODO: if any query windows for this nick, update them */ @@ -654,9 +659,11 @@ irc_process_server(struct irc_connection *conn) /* we don't need to print anything */ } else { irc_remove_nick_from_channel(channel, user->nick); - chatter_printf(conn->chatter, conn, channel->name, - "$B*** %s ($0%s@%s$B)$0 has left $B%s$0", - user->nick, user->username, user->hostname, msg.arg[0]); + if (!(settings.ignores & IGNORE_QUITS)) + chatter_printf(conn->chatter, conn, channel->name, + "$B*** %s ($0%s@%s$B)$0 has left $B%s$0", + user->nick, user->username, user->hostname, + msg.arg[0]); } } return true; @@ -669,9 +676,10 @@ irc_process_server(struct irc_connection *conn) continue; irc_remove_nick_from_channel(channel, user->nick); - chatter_printf(conn->chatter, conn, channel->name, - "$B*** %s ($0%s@%s$B)$0 has quit:$/ %s", - user->nick, user->username, user->hostname, msg.msg); + if (!(settings.ignores & IGNORE_QUITS)) + chatter_printf(conn->chatter, conn, channel->name, + "$B*** %s ($0%s@%s$B)$0 has quit:$/ %s", + user->nick, user->username, user->hostname, msg.msg); } if (strcmp(user->nick, conn->nick) == 0) { --- main.c Tue Sep 10 09:29:25 2024 +++ main.c Tue Sep 10 22:46:53 2024 @@ -24,7 +24,7 @@ NMRec notification = { 0 }; struct settings settings; -MenuHandle apple_menu, file_menu, edit_menu, view_menu; +MenuHandle apple_menu, file_menu, edit_menu, view_menu, ignore_menu; #ifdef MALLOC_DEBUG MenuHandle debug_menu; @@ -79,6 +79,9 @@ main(void) panic("no edit menu"); if (!(view_menu = GetMHandle(VIEW_MENU_ID))) panic("no view menu"); + if (!(ignore_menu = GetMenu(IGNORE_MENU_ID))) + panic("no ignore menu"); + InsertMenu(ignore_menu, -1); update_menu(); #ifdef MALLOC_DEBUG debug_menu = NewMenu(DEBUG_MENU_DUMP_ID, "\pDebug"); @@ -300,6 +303,36 @@ handle_menu(long menu_id) } } break; + case IGNORE_MENU_ID: { + short current; + + GetItemMark(ignore_menu, LoWord(menu_id), &current); + + switch (LoWord(menu_id)) { + case IGNORE_MENU_JOINS_ID: + if (current) + settings.ignores &= ~(IGNORE_JOINS); + else + settings.ignores |= (IGNORE_JOINS); + break; + case IGNORE_MENU_QUITS_ID: + if (current) + settings.ignores &= ~(IGNORE_QUITS); + else + settings.ignores |= (IGNORE_QUITS); + break; + case IGNORE_MENU_NICKS_ID: + if (current) + settings.ignores &= ~(IGNORE_NICKS); + else + settings.ignores |= (IGNORE_NICKS); + break; + } + settings_save(&settings); + update_menu(); + ret = true; + break; + } #ifdef MALLOC_DEBUG case DEBUG_MENU_DUMP_ID: switch (LoWord(menu_id)) { @@ -390,6 +423,13 @@ update_menu(void) } else SetItem(view_menu, VIEW_MENU_HIDE_ID, "\pHide Windows"); + CheckItem(ignore_menu, IGNORE_MENU_JOINS_ID, + !!(settings.ignores & IGNORE_JOINS)); + CheckItem(ignore_menu, IGNORE_MENU_QUITS_ID, + !!(settings.ignores & IGNORE_QUITS)); + CheckItem(ignore_menu, IGNORE_MENU_NICKS_ID, + !!(settings.ignores & IGNORE_NICKS)); + if (nfocusables && focusables[0]->visible && focusables[0]->update_menu) { focusables[0]->update_menu(focusables[0]); --- settings.h Thu Sep 5 10:16:05 2024 +++ settings.h Tue Sep 10 22:04:44 2024 @@ -50,6 +50,7 @@ struct settings { char realname[32]; char channel[32]; unsigned char hide_motd; + unsigned long ignores; }; extern struct settings settings; --- wallops.π.r Tue Sep 10 09:36:37 2024 +++ wallops.π.r Wed Sep 11 08:17:13 2024 @@ -21,7 +21,15 @@ data 'MENU' (131) { $"0083 0000 0000 0000 0000 FFFF FFFF 0456" /* .É.............V */ $"6965 770C 4869 6465 2057 696E 646F 7773" /* iew.Hide Windows */ $"0048 0000 0943 6C6F 7365 2054 6162 0057" /* .H..∆Close Tab.W */ - $"0000 00" /* ... */ + $"0000 0649 676E 6F72 6500 1B84 0000" /* ...Ignore..Ñ.. */ +}; + +data 'MENU' (132) { + $"0084 0000 0000 0000 0000 FFFF FFFF 0649" /* .Ñ.............I */ + $"676E 6F72 6505 4A6F 696E 7300 0000 000B" /* gnore.Joins..... */ + $"5061 7274 732F 5175 6974 7300 0000 000C" /* Parts/Quits..... */ + $"4E69 636B 2043 6861 6E67 6573 0000 0000" /* Nick Changes.... */ + $"00" /* . */ }; data 'MBAR' (128) {