diff options
Diffstat (limited to 'perl-install/modules/interactive.pm')
| -rw-r--r-- | perl-install/modules/interactive.pm | 90 |
1 files changed, 53 insertions, 37 deletions
diff --git a/perl-install/modules/interactive.pm b/perl-install/modules/interactive.pm index ec7b75826..dae135889 100644 --- a/perl-install/modules/interactive.pm +++ b/perl-install/modules/interactive.pm @@ -1,40 +1,43 @@ 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}, allow_empty_list => 1 }; + 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; } - # BUG: once we've released mdk9.2 and unfreeze cooker, morph this - # into a proper error dialog with a nice error message (but - # for now we cannot due to string freeze :-() - @l = { label => N("Parameters"), help => "", val => N("NONE"), allow_empty_list => 1 } if !@l; if ($in->ask_from(N("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; - } + 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, $b_auto, $b_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); + 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) { my $return = $in->ask_warn('', join("\n", @err)); @@ -45,72 +48,85 @@ sub load_category { @l = map { $_->{description} } @l; if ($b_at_least_one && !@l) { - @l = load_category__prompt($in, $category) or return; + @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_({ messages => $msg, - if_($category =~ m|disk/scsi|, interactive_help_id => 'setupSCSI'), + 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('', 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), @@ -133,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 !$@; |
