summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/install_steps_interactive.pm23
-rw-r--r--perl-install/printer/printerdrake.pm131
2 files changed, 99 insertions, 55 deletions
diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm
index 499d81062..80384370b 100644
--- a/perl-install/install_steps_interactive.pm
+++ b/perl-install/install_steps_interactive.pm
@@ -1045,6 +1045,7 @@ sub summary {
$o->summary_prompt(\@l, $check_complete);
+ $o->cleanupPrinter();
install_steps::configureTimezone($o) if !$timezone_manually_set; #- do not forget it.
}
@@ -1056,15 +1057,18 @@ sub configurePrinter {
require printer::printerdrake;
require printer::detect;
- #- try to determine if a question should be asked to the user or
- #- if he is autorized to configure multiple queues.
- my $ask_multiple_printer = $clicked ? 2 : $o && printer::detect::local_detect();
- $ask_multiple_printer-- or return;
+ #- $clicked = 0: Preparation of "Summary" step, check whether there are
+ #- are local printers. Continue for automatically setting up print
+ #- queues if so, return otherwise
+ #- $clicked = 1: User clicked "Configure" button in "Summary", enter
+ #- Printerdrake for manual configuration
+ my $go_on = $clicked ? 2 : $o && printer::detect::local_detect();
+ $go_on-- or return;
#- install packages needed for printer::getinfo()
$::testing or $o->do_pkgs->install('foomatic-db-engine');
- #- take default configuration, this include choosing the right system
+ #- take default configuration, this include choosing the right spooler
#- currently used by the system.
my $printer = $o->{printer} ||= {};
eval { add2hash($printer, printer::main::getinfo($o->{prefix})) };
@@ -1074,6 +1078,15 @@ sub configurePrinter {
}
+sub cleanupPrinter {
+ my ($o) = @_;
+ #- Clean up $o->{printer} so that the records for an auto-installation
+ #- contain only the important stuff
+ return if !defined($o->{printer});
+ require printer::printerdrake;
+ printer::printerdrake::final_cleanup($o->{printer});
+}
+
#------------------------------------------------------------------------------
sub setRootPassword {
my ($o, $clicked) = @_;
diff --git a/perl-install/printer/printerdrake.pm b/perl-install/printer/printerdrake.pm
index 061a14c4d..3a28c4716 100644
--- a/perl-install/printer/printerdrake.pm
+++ b/perl-install/printer/printerdrake.pm
@@ -3442,64 +3442,80 @@ sub wizard_close {
#- Program entry point for configuration of the printing system.
sub main {
- my ($printer, $in, $normal_run, $upNetwork) = @_;
+ my ($printer, $in, $install_step, $upNetwork) = @_;
+ # $install_step is only made use of during the installation. It is
+ # 0 when this function is called during the preparation of the "Summary"
+ # screen and 1 when the user clicks on "Configure" on the "Summary"
+ # screen
+
+ # Initialization of Printerdrake and queue auto-installation:
+ # During installation we do this step only once, when we prepare
+ # the "Summary" screen in case of detected local printers or when
+ # the "Configure" button in the "Printer" entry of the "Summary"
+ # screen is clicked. If the button is clicked after an automatic
+ # installation of local printers or if it is clicked for the
+ # second time, these steps are not repeated.
+ if (!$::isInstall || !$::printerdrake_initialized) {
+ # Save the user mode, so that the same one is used on the next start
+ # of Printerdrake
+ printer::main::set_usermode($::expert);
+
+ # printerdrake does not work without foomatic, and for more
+ # convenience we install some more stuff
+ {
+ my $_w = $in->wait_message(N("Printerdrake"),
+ N("Checking installed software..."));
+ if (!$::testing &&
+ !files_exist(qw(/usr/bin/foomatic-configure
+ /usr/lib/perl5/vendor_perl/5.8.0/Foomatic/DB.pm
+ /usr/bin/foomatic-rip
+ /usr/share/foomatic/db/source/driver/ljet4.xml
+ /usr/bin/escputil
+ /usr/share/printer-testpages/testprint.ps
+ /usr/bin/nmap
+ /usr/bin/scli
+ ),
+ if_(files_exist("/usr/bin/gimp"),
+ "/usr/lib/gimp/1.2/plug-ins/print")
+ )) {
+ $in->do_pkgs->install('foomatic-db-engine', 'foomatic-filters',
+ 'foomatic-db', 'printer-utils',
+ 'printer-testpages', 'nmap', 'scli',
+ if_($in->do_pkgs->is_installed('gimp'),
+ 'gimpprint'));
+ }
- # Save the user mode, so that the same one is used on the next start
- # of Printerdrake
- printer::main::set_usermode($::expert);
+ # only experts should be asked for the spooler
+ $printer->{SPOOLER} ||= 'cups' if !$::expert;
- # Default printer name, we do not use "lp" so that one can switch the
- # default printer under LPD without needing to rename another printer.
- # Under LPD the alias "lp" will be given to the default printer.
- my $defaultprname = N("Printer");
+ }
- # printerdrake does not work without foomatic, and for more convenience
- # we install some more stuff
- {
- my $_w = $in->wait_message(N("Printerdrake"),
- N("Checking installed software..."));
- if (!$::testing &&
- !files_exist(qw(/usr/bin/foomatic-configure
- /usr/lib/perl5/vendor_perl/5.8.0/Foomatic/DB.pm
- /usr/bin/foomatic-rip
- /usr/share/foomatic/db/source/driver/ljet4.xml
- /usr/bin/escputil
- /usr/share/printer-testpages/testprint.ps
- /usr/bin/nmap
- /usr/bin/scli
- ),
- if_(files_exist("/usr/bin/gimp"),
- "/usr/lib/gimp/1.2/plug-ins/print")
- )) {
- $in->do_pkgs->install('foomatic-db-engine', 'foomatic-filters',
- 'foomatic-db', 'printer-utils',
- 'printer-testpages', 'nmap', 'scli',
- if_($in->do_pkgs->is_installed('gimp'),
- 'gimpprint'));
+ # If we have chosen a spooler, install it and mark it as default
+ # spooler
+ if ($printer->{SPOOLER}) {
+ return unless install_spooler($printer, $in, $upNetwork);
+ printer::default::set_spooler($printer);
}
- # only experts should be asked for the spooler
- $printer->{SPOOLER} ||= 'cups' if !$::expert;
+ # Get the default printer (Done after non-interactive queue setup,
+ # so that these queues are taken into account)
+ assure_default_printer_is_set($printer, $in);
- }
+ # Non-interactive setup of newly detected printers (This is done
+ # only when not in expert mode, so we always have a spooler defined
+ # here)
+ configure_new_printers($printer, $in, $upNetwork);
- # If we have chosen a spooler, install it and mark it as default spooler
- if ($printer->{SPOOLER}) {
- return unless install_spooler($printer, $in, $upNetwork);
- printer::default::set_spooler($printer);
+ # Mark this part as done, it should not be done a second time.
+ if ($::isInstall) {
+ $::printerdrake_initialized = 1;
+ }
}
- # Get the default printer (Done after non-interactive queue setup, so
- # that these queues are taken into account)
- assure_default_printer_is_set($printer, $in);
-
- # Non-interactive setup of newly detected printers (This is done only
- # when not in expert mode, so we always have a spooler defined here)
- configure_new_printers($printer, $in, $upNetwork);
-
- # For preparation of the "Summary" step of the installation all is done
- # now. We do not go into the main loop
- if ($normal_run) {
+ # Main loop: During installation we only enter it when the user has
+ # clicked on the "Configure" button in the "Summary" step. We do not
+ # call it during the preparation of the "Summary" screen.
+ if (!$::isInstall || ($install_step == 1)) {
# Ask for a spooler when none is defined yet
$printer->{SPOOLER} ||=
@@ -3511,6 +3527,12 @@ sub main {
$printer->{AUTODETECTNETWORK} = 1;
$printer->{AUTODETECTSMB} = 1;
+ # Default printer name, we do not use "lp" so that one can
+ # switch the default printer under LPD without needing to
+ # rename another printer. Under LPD the alias "lp" will be
+ # given to the default printer.
+ my $defaultprname = N("Printer");
+
# Control variables for the main loop
my ($menuchoice, $cursorpos, $queue, $newqueue, $editqueue) =
('', '::', $defaultprname, 0, 0);
@@ -4020,6 +4042,15 @@ What do you want to modify on this printer?",
$printer->{complete} = 0;
}
}
+ # In the installation we call the clean-up manually when we leave
+ # the "Summary" step
+ if (!$::isInstall) {
+ final_cleanup($printer);
+ }
+}
+
+sub final_cleanup {
+ my ($printer) = @_;
# Clean up the $printer data structure for auto-install log
foreach my $queue (keys %{$printer->{configured}}) {
foreach my $item (keys %{$printer->{configured}{$queue}}) {
@@ -4027,7 +4058,7 @@ What do you want to modify on this printer?",
}
delete($printer->{configured}{$queue}{queuedata}{menuentry});
}
- foreach (qw(Old_queue QUEUE TYPE str_type currentqueue DBENTRY ARGS complete OLD_CHOICE NEW MORETHANONE MANUALMODEL AUTODETECT AUTODETECTLOCAL AUTODETECTNETWORK AUTODETECTSMB))
+ foreach (qw(Old_queue OLD_QUEUE QUEUE TYPE str_type currentqueue DBENTRY ARGS complete OLD_CHOICE NEW MORETHANONE MANUALMODEL AUTODETECT AUTODETECTLOCAL AUTODETECTNETWORK AUTODETECTSMB noninteractive))
{ delete $printer->{$_} };
}