summaryrefslogtreecommitdiffstats
path: root/urpm/msg.pm
diff options
context:
space:
mode:
Diffstat (limited to 'urpm/msg.pm')
-rw-r--r--urpm/msg.pm109
1 files changed, 109 insertions, 0 deletions
diff --git a/urpm/msg.pm b/urpm/msg.pm
new file mode 100644
index 00000000..bf3272e2
--- /dev/null
+++ b/urpm/msg.pm
@@ -0,0 +1,109 @@
+package urpm::msg;
+
+use strict;
+use Exporter;
+our @ISA = 'Exporter';
+our @EXPORT = qw(N log_it to_utf8 message_input gmessage message);
+
+my $noexpr = N("Nn");
+my $yesexpr = N("Yy");
+
+#- I18N.
+eval {
+ require Locale::gettext;
+ use POSIX qw(LC_ALL);
+ setlocale(LC_ALL, "");
+ Locale::gettext::textdomain("urpmi");
+};
+
+sub N {
+ my ($format, @params) = @_;
+ sprintf(eval { Locale::gettext::gettext($format || '') } || $format, @params);
+}
+
+sub log_it {
+ #- if invoked as a simple user, nothing should be logged.
+ if (our $log) {
+ open my $fh, ">>$log" or die "can't output to log file: $!\n";
+ print $fh @_;
+ close $fh;
+ }
+}
+
+sub to_utf8 { Locale::gettext::iconv($_[0], undef, "UTF-8") }
+
+sub gmessage {
+ my ($msg, %params) = @_;
+ my $ok = to_utf8($params{ok} || N("Ok"));
+ my $cancel = to_utf8($params{cancel} || N("Cancel"));
+ $ok =~ s/,/\\,/g; $cancel =~ s/,/\\,/g;
+ my $buttons = $params{ok_only} ? "$ok:0" : "$ok:0,$cancel:2";
+ foreach (@{$params{add_buttons}}) {
+ s/,/\\,/g;
+ $buttons .= ",$_";
+ }
+ $msg = to_utf8($msg);
+ `gmessage -default "$ok" -buttons "$buttons" "$msg"`;
+}
+
+sub message_input {
+ my ($msg, $default_input, %opts) = @_;
+ my $input;
+ if ($urpm::args::options{X} && !$default_input) {
+ #- if a default input is given, the user doesn't have to choose (and being asked).
+ gmessage($msg, ok_only => 1);
+ $urpm::args::options{bug} and log_it($msg);
+ } else {
+ while (1) {
+ if ($urpm::args::options{bug}) {
+ print STDOUT $msg;
+ } else {
+ print SAVEOUT $msg;
+ }
+ if ($default_input) {
+ $urpm::args::options{bug} and log_it($default_input);
+ return $default_input;
+ }
+ $input = <STDIN>;
+ defined $input or return undef;
+ $urpm::args::options{bug} and log_it($input);
+ if ($opts{boolean}) {
+ $input =~ /^[$noexpr$yesexpr]*$/ and last;
+ } elsif ($opts{range}) {
+ 1 <= $input && $input <= $opts{range} and last;
+ } else {
+ last;
+ }
+ message(N("Sorry, bad choice, try again\n"));
+ }
+ }
+ return $input;
+}
+
+sub message {
+ my ($msg, $no_X) = @_;
+ if ($urpm::args::options{X} && !$no_X && !$::auto) {
+ gmessage($msg, ok_only => 1);
+ $urpm::args::options{bug} and log_it($msg);
+ } else {
+ if ($urpm::args::options{bug}) {
+ print STDOUT "$msg\n";
+ } else {
+ print SAVEOUT "$msg\n";
+ }
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+urpm::msg - routines to prompt messages from the urpm* tools
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+=cut