X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Fsilc%2Fcore%2Fsilc-channels.c;h=2ebdcc7ab42de108834ae6b9405a080ad8b704ba;hb=413da0f8686910f5e627393157566ae729ca99c4;hp=a720ecdb88e427bc4151fe484fdd36ab6735abae;hpb=cdedc07c65bab8467f6f5b1ef4b38982c2c77571;p=silc.git diff --git a/apps/irssi/src/silc/core/silc-channels.c b/apps/irssi/src/silc/core/silc-channels.c index a720ecdb..2ebdcc7a 100644 --- a/apps/irssi/src/silc/core/silc-channels.c +++ b/apps/irssi/src/silc/core/silc-channels.c @@ -45,6 +45,21 @@ #include "silc-commands.h" +void sig_mime(SILC_SERVER_REC *server, SILC_CHANNEL_REC *channel, + const char *blob, const char *enc, const char *type, + const char *nick) +{ + + if (!(IS_SILC_SERVER(server))) + return; + + printformat_module("fe-common/silc", server, + channel == NULL ? NULL : channel->name, + MSGLEVEL_CRAP, SILCTXT_MESSAGE_DATA, + nick == NULL ? "[]" : nick, type); + +} + SILC_CHANNEL_REC *silc_channel_create(SILC_SERVER_REC *server, const char *name, const char *visible_name, @@ -109,6 +124,11 @@ static void sig_server_quit(SILC_SERVER_REC *server, const char *msg) silc_command_exec(server, "QUIT", msg); } +static void sig_gui_quit(SILC_SERVER_REC *server, const char *msg) +{ + silc_client_stop(silc_client); +} + /* Find Irssi channel entry by SILC channel entry */ SILC_CHANNEL_REC *silc_channel_find_entry(SILC_SERVER_REC *server, @@ -356,17 +376,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 +392,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 { @@ -988,6 +1021,8 @@ void silc_channels_init(void) signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed); signal_add("server connected", (SIGNAL_FUNC) sig_connected); signal_add("server quit", (SIGNAL_FUNC) sig_server_quit); + signal_add("gui exit", (SIGNAL_FUNC) sig_gui_quit); + signal_add("mime", (SIGNAL_FUNC) sig_mime); command_bind_silc("part", MODULE_NAME, (SIGNAL_FUNC) command_part); command_bind_silc("me", MODULE_NAME, (SIGNAL_FUNC) command_me); @@ -995,7 +1030,7 @@ void silc_channels_init(void) command_bind_silc("notice", MODULE_NAME, (SIGNAL_FUNC) command_notice); command_bind_silc("away", MODULE_NAME, (SIGNAL_FUNC) command_away); command_bind_silc("key", MODULE_NAME, (SIGNAL_FUNC) command_key); - command_bind_silc("listkeys", MODULE_NAME, (SIGNAL_FUNC) command_listkeys); +/* command_bind_silc("listkeys", MODULE_NAME, (SIGNAL_FUNC) command_listkeys); */ silc_nicklist_init(); } @@ -1005,6 +1040,8 @@ void silc_channels_deinit(void) signal_remove("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed); signal_remove("server connected", (SIGNAL_FUNC) sig_connected); signal_remove("server quit", (SIGNAL_FUNC) sig_server_quit); + signal_remove("gui exit", (SIGNAL_FUNC) sig_gui_quit); + signal_remove("mime", (SIGNAL_FUNC) sig_mime); command_unbind("part", (SIGNAL_FUNC) command_part); command_unbind("me", (SIGNAL_FUNC) command_me); @@ -1012,7 +1049,7 @@ void silc_channels_deinit(void) command_unbind("notice", (SIGNAL_FUNC) command_notice); command_unbind("away", (SIGNAL_FUNC) command_away); command_unbind("key", (SIGNAL_FUNC) command_key); - command_unbind("listkeys", (SIGNAL_FUNC) command_listkeys); +/* command_unbind("listkeys", (SIGNAL_FUNC) command_listkeys); */ silc_nicklist_deinit(); }