From d8b2336f6a26e5ea4b02eddd3259a166300afbd4 Mon Sep 17 00:00:00 2001 From: Jochen Eisinger Date: Thu, 14 Nov 2002 08:47:30 +0000 Subject: [PATCH] Thu Nov 14 09:44:54 CET 2002 Jochen Eisinger * SILC_UMODE_GONE changes are now propagated correctly to the Irssi client. Closes #54 --- CHANGES | 5 ++++ apps/irssi/src/silc/core/client_ops.c | 15 ++++++++++ apps/irssi/src/silc/core/silc-channels.c | 37 ++++++++++++++++-------- apps/irssi/src/silc/core/silc-channels.h | 1 + 4 files changed, 46 insertions(+), 12 deletions(-) diff --git a/CHANGES b/CHANGES index ae5bf3bf..992adc73 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,8 @@ +Thu Nov 14 09:44:54 CET 2002 Jochen Eisinger + + * SILC_UMODE_GONE changes are now propagated correctly to the + Irssi client. Closes #54 + Tue Nov 12 19:42:18 CET 2002 Jochen Eisinger * Fixed example in /HELP KEY diff --git a/apps/irssi/src/silc/core/client_ops.c b/apps/irssi/src/silc/core/client_ops.c index 1a539869..f8e08971 100644 --- a/apps/irssi/src/silc/core/client_ops.c +++ b/apps/irssi/src/silc/core/client_ops.c @@ -1408,6 +1408,7 @@ silc_command_reply(SilcClient client, SilcClientConnection conn, case SILC_COMMAND_UMODE: { SilcUInt32 mode; + char *reason; if (!success) return; @@ -1424,6 +1425,20 @@ silc_command_reply(SilcClient client, SilcClientConnection conn, printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP, SILCTXT_ROUTER_OPER); + if ((mode & SILC_UMODE_GONE) != (server->umode & SILC_UMODE_GONE)) { + if (mode & SILC_UMODE_GONE) { + if ((server->away_reason != NULL) && (server->away_reason[0] != '\0')) + reason = g_strdup(server->away_reason); + else + reason = g_strdup("away"); + } else + reason = g_strdup(""); + + silc_set_away(reason, server); + + g_free(reason); + } + server->umode = mode; signal_emit("user mode changed", 2, server, NULL); } diff --git a/apps/irssi/src/silc/core/silc-channels.c b/apps/irssi/src/silc/core/silc-channels.c index a720ecdb..cc32f507 100644 --- a/apps/irssi/src/silc/core/silc-channels.c +++ b/apps/irssi/src/silc/core/silc-channels.c @@ -356,17 +356,14 @@ static void command_notice(const char *data, SILC_SERVER_REC *server, /* AWAY local command. Sends UMODE command that sets the SILC_UMODE_GONE flag. */ -static void command_away(const char *data, SILC_SERVER_REC *server, - WI_ITEM_REC *item) +bool silc_set_away(const char *reason, SILC_SERVER_REC *server) { bool set; - - CMD_SILC_SERVER(server); - + if (!IS_SILC_SERVER(server) || !server->connected) - cmd_return_error(CMDERR_NOT_CONNECTED); - - if (*data == '\0') { + return FALSE; + + if (*reason == '\0') { /* Remove any possible away message */ silc_client_set_away_message(silc_client, server->conn, NULL); set = FALSE; @@ -375,21 +372,37 @@ static void command_away(const char *data, SILC_SERVER_REC *server, SILCTXT_UNSET_AWAY); } else { /* Set the away message */ - silc_client_set_away_message(silc_client, server->conn, (char *)data); + silc_client_set_away_message(silc_client, server->conn, (char *)reason); set = TRUE; printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP, - SILCTXT_SET_AWAY, data); + SILCTXT_SET_AWAY, reason); } server->usermode_away = set; g_free_and_null(server->away_reason); if (set) - server->away_reason = g_strdup((char *)data); + server->away_reason = g_strdup((char *)reason); signal_emit("away mode changed", 1, server); - silc_command_exec(server, "UMODE", set ? "+g" : "-g"); + return set; +} + +static void command_away(const char *data, SILC_SERVER_REC *server, + WI_ITEM_REC *item) +{ + CMD_SILC_SERVER(server); + + if (!IS_SILC_SERVER(server) || !server->connected) + cmd_return_error(CMDERR_NOT_CONNECTED); + + g_free_and_null(server->away_reason); + if ((data) && (*data != '\0')) + server->away_reason = g_strdup(data); + + silc_command_exec(server, "UMODE", + (server->away_reason != NULL) ? "+g" : "-g"); } typedef struct { diff --git a/apps/irssi/src/silc/core/silc-channels.h b/apps/irssi/src/silc/core/silc-channels.h index 76962114..60e12dc5 100644 --- a/apps/irssi/src/silc/core/silc-channels.h +++ b/apps/irssi/src/silc/core/silc-channels.h @@ -34,4 +34,5 @@ SILC_CHANNEL_REC *silc_channel_create(SILC_SERVER_REC *server, SILC_CHANNEL_REC *silc_channel_find_entry(SILC_SERVER_REC *server, SilcChannelEntry entry); +bool silc_set_away(const char *reason, SILC_SERVER_REC *server); #endif -- 2.24.0