summaryrefslogtreecommitdiffstats
path: root/perl-install/modules/interactive.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/modules/interactive.pm')
-rw-r--r--perl-install/modules/interactive.pm101
1 files changed, 62 insertions, 39 deletions
diff --git a/perl-install/modules/interactive.pm b/perl-install/modules/interactive.pm
index add2f5ccd..dae135889 100644
--- a/perl-install/modules/interactive.pm
+++ b/perl-install/modules/interactive.pm
@@ -1,109 +1,132 @@
package modules::interactive;
-use interactive;
+
use modules;
use common;
sub config_window {
my ($in, $data) = @_;
require modules;
- modules::mergein_conf('/etc/modules.conf');
- my %conf = modules::get_parameters($data->{driver});
+ my $modules_conf = modules::any_conf->read;
+ my %conf = $modules_conf->get_parameters($data->{driver});
require modules::parameters;
my @l;
foreach (modules::parameters::parameters($data->{driver})) {
- my ($name, $format, $description) = @$_;
- push @l, { label => $name, help => "$description\n[$format]", val => \$conf{$name} };
+ my ($name, $description) = @$_;
+ push @l, { label => $name, help => $description,
+ val => \$conf{$name}, allow_empty_list => 1 };
+ }
+ if (!@l) {
+ $in->ask_warn(N("Error"), N("This driver has no configuration parameter!"));
+ return;
}
- if ($in->ask_from("Module configuration", N("You can configure each parameter of the module here."), \@l)) {
- my $options = join(' ', map { if_($conf{$_}, "$_=$conf{$_}") } keys %conf);
- if ($options) {
- modules::set_options($data->{driver}, $options);
- modules::write_conf;
- }
+ if ($in->ask_from(N("Module configuration"), N("You can configure each parameter of the module here."), \@l)) {
+ my $options = join(' ', map { if_($conf{$_} =~ /^\S+$/, "$_=$conf{$_}") } keys %conf);
+ my $old_options = $modules_conf->get_options($data->{driver});
+ if ($options ne $old_options) {
+ $modules_conf->set_options($data->{driver}, $options);
+ $modules_conf->write;
+ }
}
}
sub load_category {
- my ($in, $category, $auto, $at_least_one) = @_;
+ my ($in, $modules_conf, $category, $b_auto, $b_at_least_one) = @_;
my @l;
{
my $w;
- my $wait_message = sub { $w = wait_load_module($in, $category, @_) };
- @l = modules::load_category($category, $wait_message);
- @l = modules::load_category($category, $wait_message, 'force') if !@l && $at_least_one;
+ my $wait_message = sub { undef $w; $w = wait_load_module($in, $category, @_) };
+ @l = modules::load_category($modules_conf, $category, $wait_message);
+ undef $w; #- help perl_checker
}
if (my @err = grep { $_ } map { $_->{error} } @l) {
- $in->ask_warn('', join("\n", @err));
+ my $return = $in->ask_warn('', join("\n", @err));
+ $in->exit(1) if !defined($return);
}
- return @l if $auto && (@l || !$at_least_one);
+ return @l if $b_auto && (@l || !$b_at_least_one);
@l = map { $_->{description} } @l;
- if ($at_least_one && !@l) {
- @l = load_category__prompt($in, $category) or return;
+ if ($b_at_least_one && !@l) {
+ @l = load_category__prompt($in, $modules_conf, $category) or return;
}
- load_category__prompt_for_more($in, $category, @l);
+ load_category__prompt_for_more($in, $modules_conf, $category, @l);
}
sub load_category__prompt_for_more {
- my ($in, $category, @l) = @_;
+ my ($in, $modules_conf, $category, @l) = @_;
(my $msg_type = $category) =~ s/\|.*//;
while (1) {
my $msg = @l ?
- [ N("Found %s %s interfaces", join(", ", @l), $msg_type),
+ [ N("Found %s interfaces", join(", ", map { qq("$_") } @l)),
N("Do you have another one?") ] :
N("Do you have any %s interfaces?", $msg_type);
my $r = 'No';
- $in->ask_from('', $msg, [ { list => [ N_("Yes"), N_("No"), N_("See hardware info") ], val => \$r, type => 'list' } ]);
+ $in->ask_from_({ messages => $msg,
+ if_($category =~ m!disk/.*(ide|sata|scsi|hardware_raid|usb|firewire)!, interactive_help_id => 'setupSCSI'),
+ },
+ [ { list => [ N_("Yes"), N_("No"), N_("See hardware info") ], val => \$r, type => 'list', format => \&translate } ]);
if ($r eq "No") { return @l }
if ($r eq "Yes") {
- push @l, load_category__prompt($in, $category) || next;
+ push @l, load_category__prompt($in, $modules_conf, $category) || next;
} else {
- $in->ask_warn('', [ detect_devices::stringlist() ]);
+ $in->ask_warn('', join("\n", detect_devices::stringlist()));
}
}
}
+my %category2text = (
+ 'bus/usb' => N_("Installing driver for USB controller"),
+ 'bus/firewire' => N_("Installing driver for firewire controller \"%s\""),
+ 'disk/card_reader|ide|scsi|hardware_raid|sata|firewire|virtual' => N_("Installing driver for hard disk drive controller \"%s\""),
+ list_modules::ethernet_categories() => N_("Installing driver for ethernet controller \"%s\""),
+);
+
sub wait_load_module {
- my ($in, $category, $text, $module) = @_;
- $in->wait_message('',
- [
- #-PO: the first %s is the card type (scsi, network, sound,...)
- #-PO: the second is the vendor+model name
- N("Installing driver for %s card %s", $category, $text), if_($::expert, N("(module %s)", $module))
- ]);
+ my ($in, $category, $text, $_module) = @_;
+ my $msg = do {
+ if (my $t = $category2text{$category}) {
+ sprintf(translate($t), $text);
+ } else {
+ #-PO: the first %s is the card type (scsi, network, sound,...)
+ #-PO: the second is the vendor+model name
+ N("Installing driver for %s card %s", $category, $text);
+ }
+ };
+ $in->wait_message(N("Configuring Hardware"), $msg);
}
sub load_module__ask_options {
my ($in, $module_descr, $parameters) = @_;
- my @parameters = map { [ @$_[0, 1, 2] ] } @$parameters;
+ #- deep copying
+ my @parameters = map { [ @$_[0, 1] ] } @$parameters;
if (@parameters) {
$in->ask_from('',
N("You may now provide options to module %s.\nNote that any address should be entered with the prefix 0x like '0x123'", $module_descr),
- [ map { { label => $_->[0] . ($_->[1] ? " ($_->[1])" : ''), help => $_->[2], val => \$_->[3] } } @parameters ],
+ [ map { { label => $_->[0], help => $_->[1], val => \$_->[2] } } @parameters ],
) or return;
- [ map { if_($_->[3], "$_->[0]=$_->[3]") } @parameters ];
+ join(' ', map { if_($_->[2], "$_->[0]=$_->[2]") } @parameters);
} else {
my $s = $in->ask_from_entry('',
N("You may now provide options to module %s.
Options are in format ``name=value name2=value2 ...''.
For instance, ``io=0x300 irq=7''", $module_descr), N("Module options:")) or return;
- [ split ' ', $s ];
+ $s;
}
}
sub load_category__prompt {
- my ($in, $category) = @_;
+ my ($in, $modules_conf, $category) = @_;
(my $msg_type = $category) =~ s/\|.*//;
- my %available_modules = map_each { $::a => $::b ? "$::a ($::b)" : $::a } modules::category2modules_and_description($category);
+
+ my %available_modules = map_each { my $dsc = $::b; $dsc =~ s/\s+/ /g; $::a => $dsc ? "$::a ($dsc)" : $::a } modules::category2modules_and_description($category);
my $module = $in->ask_from_listf('',
#-PO: the %s is the driver type (scsi, network, sound,...)
N("Which %s driver should I try?", $msg_type),
@@ -126,7 +149,7 @@ not cause any damage.", $module_descr)), [ N_("Autoprobe"), N_("Specify options"
eval {
my $_w = wait_load_module($in, $category, $module_descr, $module);
log::l("user asked for loading module $module (type $category, desc $module_descr)");
- modules::load([ $module, @$options ]);
+ modules::load_and_configure($modules_conf, $module, $options);
};
return $module_descr if !$@;