summaryrefslogtreecommitdiffstats
path: root/perl-install/printer.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/printer.pm')
-rw-r--r--perl-install/printer.pm90
1 files changed, 90 insertions, 0 deletions
diff --git a/perl-install/printer.pm b/perl-install/printer.pm
index 40ebc84a4..0781095d8 100644
--- a/perl-install/printer.pm
+++ b/perl-install/printer.pm
@@ -28,6 +28,14 @@ my $FOOMATIC_DEFAULT_SPOOLER = "$FOOMATICCONFDIR/defaultspooler";
);
%spooler_inv = reverse %spooler;
+%shortspooler = (
+ _("CUPS") => "cups",
+ _("LPRng") => "lprng",
+ _("LPD") => "lpd",
+ _("PDQ") => "pdq"
+);
+%shortspooler_inv = reverse %shortspooler;
+
%printer_type = (
_("Local printer") => "LOCAL",
_("Remote printer") => "REMOTE",
@@ -776,6 +784,88 @@ sub print_pages($@) {
@lpq_output;
}
+# ---------------------------------------------------------------
+#
+# Spooler config stuff
+#
+# ---------------------------------------------------------------
+
+sub get_copiable_queues {
+ my ($oldspooler, $newspooler) = @_;
+ local $_; #- use of while (<...
+
+ local *QUEUEOUTPUT; #- don't have to do close ... and don't modify globals
+ #- at least
+ my @queuelist; #- here we will list all Foomatic-generated queues
+ # Get queue list with foomatic-configure
+ open QUEUEOUTPUT, ($::testing ? "$prefix" : "chroot $prefix/ ") .
+ "foomatic-configure -Q -s $oldspooler |" ||
+ die "Could not run foomatic-configure";
+
+ my $entry = {};
+ my $inentry = 0;
+ while (<QUEUEOUTPUT>) {
+ chomp;
+ if ($inentry) {
+ # We are inside a queue entry
+ if (m!^\s*</queue>\s*$!) {
+ # entry completed
+ $inentry = 0;
+ if (($entry->{foomatic}) &&
+ ($entry->{spooler} eq $oldspooler)) {
+ # Is the connection type supported by the new
+ # spooler?
+ if ((($newspooler eq "cups") &&
+ (($entry->{connect} =~ /^file:/) ||
+ ($entry->{connect} =~ /^lpd:/) ||
+ ($entry->{connect} =~ /^socket:/) ||
+ ($entry->{connect} =~ /^smb:/) ||
+ ($entry->{connect} =~ /^ipp:/))) ||
+ ((($newspooler eq "lpd") ||
+ ($newspooler eq "lprng")) &&
+ (($entry->{connect} =~ /^file:/) ||
+ ($entry->{connect} =~ /^lpd:/) ||
+ ($entry->{connect} =~ /^socket:/) ||
+ ($entry->{connect} =~ /^smb:/) ||
+ ($entry->{connect} =~ /^ncp:/) ||
+ ($entry->{connect} =~ /^postpipe:/))) ||
+ (($newspooler eq "pdq") &&
+ (($entry->{connect} =~ /^file:/) ||
+ ($entry->{connect} =~ /^lpd:/) ||
+ ($entry->{connect} =~ /^socket:/)))) {
+ push(@queuelist, $entry->{name});
+ }
+ }
+ $entry = {};
+ } elsif (m!^\s*<name>(.+)</name>\s*$!) {
+ # queue name
+ $entry->{name} = $1;
+ } elsif (m!^\s*<connect>(.+)</connect>\s*$!) {
+ # connection type (URI)
+ $entry->{connect} = $1;
+ }
+ } else {
+ if (m!^\s*<queue\s+foomatic\s*=\s*\"?(\d+)\"?\s*spooler\s*=\s*\"?(\w+)\"?\s*>\s*$!) {
+ # new entry
+ $inentry = 1;
+ $entry->{foomatic} = $1;
+ $entry->{spooler} = $2;
+ }
+ }
+ }
+ close QUEUEOUTPUT;
+
+ return @queuelist;
+}
+
+sub copy_foomatic_queue {
+ my ($printer, $oldqueue, $oldspooler, $newqueue) = @_;
+ run_program::rooted($prefix, "foomatic-configure",
+ "-s", $printer->{SPOOLER},
+ "-n", $newqueue,
+ "-C", $oldspooler, $oldqueue);
+}
+
#-######################################################################################
#- Wonderful perl :(