changed => "Wed Aug 29 10:45 CET 2003",
);
+use Irssi::Silc;
+
use MIME::Parser;
use Mail::Field;
use Mail::Cap;
}
}
+##
+# 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
#
# 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";
$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;
#
# -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);
$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;
$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;
}
$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;
} 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/;
if ($is_channel) {
$dest = $server->channel_find($target);
} else {
- $dest = $server->query_find($target);
+ $dest = privmsg_get_query($server, $target, 1);
}
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}',
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",
(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)
(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);
}