diff options
Diffstat (limited to 'perl-install/modules/interactive.pm')
| -rw-r--r-- | perl-install/modules/interactive.pm | 88 | 
1 files changed, 51 insertions, 37 deletions
| diff --git a/perl-install/modules/interactive.pm b/perl-install/modules/interactive.pm index 51c58cc85..dae135889 100644 --- a/perl-install/modules/interactive.pm +++ b/perl-install/modules/interactive.pm @@ -1,41 +1,42 @@  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 => join("\n", $description, if_(c::kernel_version() !~ /^\Q2.6/, "[$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 { undef $w; $w = wait_load_module($in, $category, @_) }; -	@l = modules::load_category($category, $wait_message); +	@l = modules::load_category($modules_conf, $category, $wait_message);  	undef $w; #- help perl_checker      }      if (my @err = grep { $_ } map { $_->{error} } @l) { @@ -47,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(", ", map { qq("$_") } @l)), +	  [ 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), @@ -135,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 !$@; | 
