Thu Jan 01 20:11:32 CET 2004 Jochen Eisinger <jochen@penguin-breeder.org>
authorJochen Eisinger <coffee@silcnet.org>
Thu, 1 Jan 2004 19:17:49 +0000 (19:17 +0000)
committerJochen Eisinger <coffee@silcnet.org>
Thu, 1 Jan 2004 19:17:49 +0000 (19:17 +0000)
* /SMSG and /MMSG now correctly create new queries. Affected files
  irssi/src/fe-common/silc/fe-messages.c, irssi/scripts/silc-mime.pl

CHANGES
apps/irssi/scripts/silc-mime.pl
apps/irssi/src/fe-common/silc/fe-messages.c

diff --git a/CHANGES b/CHANGES
index cef930ff89de9dd0e9bfe206fc12f12df0b13186..6a7be0b5a1e294dda429bac05a04ca895a6790ea 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,12 @@
+Thu Jan 01 20:11:32 CET 2004  Jochen Eisinger <jochen@penguin-breeder.org>
+
+       * /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 <jochen@penguin-breeder.org>
 
        * Don't use silc_get_input, it's obviously not reliable.  Fixes
index dfe3e521fd2a6c18d6cbf8b795c3cccb3c6a4187..531273b82a3a32a6a7eaac42c4ac9cd4d430defd 100644 (file)
@@ -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}',
index 41e05144739b58efa2d4da12e755b70094af848e..8ff27732791ad68e2b492e1f9ad698ade695f684 100644 (file)
@@ -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);
 }