Thu Nov 14 09:44:54 CET 2002 Jochen Eisinger <c0ffee@penguin-breeder.org>
authorJochen Eisinger <coffee@silcnet.org>
Thu, 14 Nov 2002 08:47:30 +0000 (08:47 +0000)
committerJochen Eisinger <coffee@silcnet.org>
Thu, 14 Nov 2002 08:47:30 +0000 (08:47 +0000)
* SILC_UMODE_GONE changes are now propagated correctly to the
  Irssi client. Closes #54

CHANGES
apps/irssi/src/silc/core/client_ops.c
apps/irssi/src/silc/core/silc-channels.c
apps/irssi/src/silc/core/silc-channels.h

diff --git a/CHANGES b/CHANGES
index ae5bf3bfa6e8f791e99efe477adcc62c466a9c58..992adc730ee2eb6d1d3c0641bca1f2979f39f822 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+Thu Nov 14 09:44:54 CET 2002  Jochen Eisinger <c0ffee@penguin-breeder.org>
+
+       * SILC_UMODE_GONE changes are now propagated correctly to the
+         Irssi client. Closes #54
+       
 Tue Nov 12 19:42:18 CET 2002  Jochen Eisinger <c0ffee@penguin-breeder.org>
 
        * Fixed example in /HELP KEY
index 1a539869022a2bb85c820cbbe375856b66dbe1ef..f8e0897193ea8f2d0773981c8a3fd7ffee44d564 100644 (file)
@@ -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);
     }
index a720ecdb88e427bc4151fe484fdd36ab6735abae..cc32f50730c70e91be21204d32cab9fdd84c0194 100644 (file)
@@ -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 {
index 769621148bea1af85bb9e7af92ac5581c7cd2532..60e12dc5fb0d8b1bb30365c3da1a95350cb6573a 100644 (file)
@@ -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