* /SMSG and /MMSG now correctly create new queries. Affected files
irssi/src/fe-common/silc/fe-messages.c, irssi/scripts/silc-mime.pl
+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
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
changed => "Wed Aug 29 10:45 CET 2003",
);
changed => "Wed Aug 29 10:45 CET 2003",
);
use MIME::Parser;
use Mail::Field;
use Mail::Cap;
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;
+}
+
# fork and execute
#
sub background_exec {
# 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";
if ($signed == -1) {
$format = "mime_data_received";
$format = "mime_data_received_failed";
}
$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);
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);
} 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);
#
# -1 failure, 0 success
sub process_mime_entity {
#
# -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);
my ($mimetype, $fh, $tempfile, $parser, $ret, $io, $mcap, $cmd);
$parser->output_dir(Irssi::settings_get_str("mime_temp_dir"));
$mime = $parser->parse_open($tempfile);
$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;
$parser->filer->purge;
unlink $tempfile;
$cmd = $mcap->viewCmd($mimetype->type, $tempfile);
next if not defined $cmd;
$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);
$parser->output_dir(Irssi::settings_get_str("mime_temp_dir"));
$mime = $parser->parse_data(unescape($blob));
$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);
} elsif ($ret == -1) {
return;
} else {
} 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/;
$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 {
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_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}',
# Init
Irssi::theme_register(['load_mailcap', 'Loading mailcaps from {hilight $0}',
g_free_not_null(freemsg);
}
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",
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_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)
}
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_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);