From f1d090db3dbef5be7a0ef50c9866d50247e54bce Mon Sep 17 00:00:00 2001 From: Jochen Eisinger Date: Thu, 1 Jan 2004 19:17:49 +0000 Subject: [PATCH] Thu Jan 01 20:11:32 CET 2004 Jochen Eisinger * /SMSG and /MMSG now correctly create new queries. Affected files irssi/src/fe-common/silc/fe-messages.c, irssi/scripts/silc-mime.pl --- CHANGES | 9 ++++ apps/irssi/scripts/silc-mime.pl | 48 +++++++++++++++++---- apps/irssi/src/fe-common/silc/fe-messages.c | 21 +++++++++ 3 files changed, 69 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index cef930ff..6a7be0b5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,12 @@ +Thu Jan 01 20:11:32 CET 2004 Jochen Eisinger + + * /SMSG and /MMSG now correctly create new queries. Affected files + irssi/src/fe-common/silc/fe-messages.c, irssi/scripts/silc-mime.pl + + * Add basic support for SILC protocol specific variables in perl. + Affected files irssi/src/perl/silc/*, irssi/configure.in, + irssi/src/perl/Makefile.am + Wed Dec 31 17:06:55 CET 2003 Jochen Eisinger * Don't use silc_get_input, it's obviously not reliable. Fixes diff --git a/apps/irssi/scripts/silc-mime.pl b/apps/irssi/scripts/silc-mime.pl index dfe3e521..531273b8 100644 --- a/apps/irssi/scripts/silc-mime.pl +++ b/apps/irssi/scripts/silc-mime.pl @@ -14,6 +14,8 @@ $VERSION = "1.2"; changed => "Wed Aug 29 10:45 CET 2003", ); +use Irssi::Silc; + use MIME::Parser; use Mail::Field; use Mail::Cap; @@ -66,6 +68,25 @@ sub read_mime_database { } } +## +# privmsg_get_query +# +# get or create query +# +sub privmsg_get_query { + my ($server, $target, $own) = @_; + + $dest = $server->query_find($target); + if (not defined $dest && + (Irssi::level2bits(settings_get_str("autocreate_query_level")) & + MSGLEVEL_MSGS) && + (!$own || Irssi::settings_get_bool("autocreate_own_query"))) { + $dest = Irssi::Silc::Server::query_create($server->{tag}, $target, 1); + } + + return $dest; +} + ## # unescape # @@ -99,7 +120,7 @@ sub escape { # fork and execute # sub background_exec { - my ($witem, $signed, $sender, $type, $cmd) = @_; + my ($server, $witem, $signed, $sender, $type, $cmd) = @_; if ($signed == -1) { $format = "mime_data_received"; @@ -111,14 +132,20 @@ sub background_exec { $format = "mime_data_received_failed"; } + if (not $witem->{type}) { + $witem = privmsg_get_query($server, $sender, 0); + } + if ($witem->{type}) { $witem->printformat(MSGLEVEL_CRAP, $format, $sender, $type); + $witem->window()->command("EXEC " . Irssi::settings_get_str("mime_exec_param") . " " . + $cmd); } else { Irssi::printformat(MSGLEVEL_CRAP, $format, $sender, $type); + Irssi::command("EXEC " . Irssi::settings_get_str("mime_exec_param") . " " . + $cmd); } - Irssi::command("EXEC " . Irssi::settings_get_str("mime_exec_param") . - $cmd); } my %partial; @@ -128,7 +155,7 @@ my %partial; # # -1 failure, 0 success sub process_mime_entity { - my ($witem, $signed, $sender, $entity) = @_; + my ($server, $witem, $signed, $sender, $entity) = @_; my ($mimetype, $fh, $tempfile, $parser, $ret, $io, $mcap, $cmd); @@ -227,7 +254,7 @@ sub process_mime_entity { $parser->output_dir(Irssi::settings_get_str("mime_temp_dir")); $mime = $parser->parse_open($tempfile); - $ret = process_mime_entity($witem, $signed, $sender, $mime); + $ret = process_mime_entity($server, $witem, $signed, $sender, $mime); $parser->filer->purge; unlink $tempfile; @@ -251,7 +278,7 @@ sub process_mime_entity { $cmd = $mcap->viewCmd($mimetype->type, $tempfile); next if not defined $cmd; - background_exec($witem, $signed, $sender, $mimetype->type, $cmd); + background_exec($server, $witem, $signed, $sender, $mimetype->type, $cmd); return 1; } @@ -278,7 +305,7 @@ sub sig_mime { $parser->output_dir(Irssi::settings_get_str("mime_temp_dir")); $mime = $parser->parse_data(unescape($blob)); - $ret = process_mime_entity($witem, $verified, $sender, $mime); + $ret = process_mime_entity($server, $witem, $verified, $sender, $mime); $parser->filer->purge; @@ -287,6 +314,9 @@ sub sig_mime { } elsif ($ret == -1) { return; } else { + if (not $witem->{type}) { + $witem = privmsg_get_query($server, $sender, 0); + } $theme = $witem->{theme} || Irssi::current_theme; $format = $theme->get_format("fe-common/silc", "message_data"); $format =~ s/\$0/$sender/; @@ -392,7 +422,7 @@ sub cmd_mmsg { if ($is_channel) { $dest = $server->channel_find($target); } else { - $dest = $server->query_find($target); + $dest = privmsg_get_query($server, $target, 1); } @@ -459,7 +489,7 @@ Irssi::settings_add_str("misc", "mime_default_encoding", "binary"); Irssi::settings_add_bool("misc", "mime_verbose", 0); Irssi::settings_add_str("misc", "mime_temp_dir", "/tmp"); Irssi::settings_add_str("misc", "mime_magic", ""); -Irssi::settings_add_str("misc", "mime_exec_param", ""); +Irssi::settings_add_str("misc", "mime_exec_param", "-"); # Init Irssi::theme_register(['load_mailcap', 'Loading mailcaps from {hilight $0}', diff --git a/apps/irssi/src/fe-common/silc/fe-messages.c b/apps/irssi/src/fe-common/silc/fe-messages.c index 41e05144..8ff27732 100644 --- a/apps/irssi/src/fe-common/silc/fe-messages.c +++ b/apps/irssi/src/fe-common/silc/fe-messages.c @@ -223,6 +223,21 @@ static void sig_signed_message_own_private(SERVER_REC * server, g_free_not_null(freemsg); } +static void sig_signed_message_query(SERVER_REC *server, const char *msg, + const char *nick, const char *address, + int verified) +{ + QUERY_REC *query; + + /* create query window if needed */ + query = privmsg_get_query(server, nick, FALSE, MSGLEVEL_MSGS); + + /* reset the query's last_unread_msg timestamp */ + if (query != NULL) + query->last_unread_msg = time(NULL); +} + + void fe_silc_messages_init(void) { signal_add_last("message signed_public", @@ -233,6 +248,9 @@ void fe_silc_messages_init(void) (SIGNAL_FUNC) sig_signed_message_own_public); signal_add_last("message signed_own_private", (SIGNAL_FUNC) sig_signed_message_own_private); + + signal_add_first("message signed_private", + (SIGNAL_FUNC) sig_signed_message_query); } void fe_silc_messages_deinit(void) @@ -245,4 +263,7 @@ void fe_silc_messages_deinit(void) (SIGNAL_FUNC) sig_signed_message_own_public); signal_remove("message signed_own_private", (SIGNAL_FUNC) sig_signed_message_own_private); + + signal_remove("message signed_private", + (SIGNAL_FUNC) sig_signed_message_query); } -- 2.24.0