diff options
Diffstat (limited to 'perl-install/printer.pm')
-rw-r--r-- | perl-install/printer.pm | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/perl-install/printer.pm b/perl-install/printer.pm index 3274627be..906d8550e 100644 --- a/perl-install/printer.pm +++ b/perl-install/printer.pm @@ -437,9 +437,57 @@ sub read_configured_queues($) { } @{$printer->{configured}{$QUEUES[$i]->{'queuedata'}{'queue'}}{'queuedata'}{options}} = @options; } + # Construct an entry line for tree view in main window of + # printerdrake + make_menuentry($printer, $QUEUES[$i]->{'queuedata'}{'queue'}); } } +sub make_menuentry { + my ($printer, $queue) = @_; + my $spooler = $shortspooler_inv{$printer->{SPOOLER}}; + my $connect = $printer->{configured}{$queue}{'queuedata'}{'connect'}; + my $localremote; + if ($connect =~ m!^file:!) { + $localremote = _("Local Printers"); + } else { + $localremote = _("Remote Printers"); + } + my $queue = $printer->{configured}{$queue}{'queuedata'}{'queue'}; + my $make = $printer->{configured}{$queue}{'queuedata'}{'make'}; + my $model = $printer->{configured}{$queue}{'queuedata'}{'model'}; + my $connection; + if ($connect =~ m!^file:/dev/lp(\d+)$!) { + my $number = $1; + $connection = _(" on parallel port \#%s", $number); + } elsif ($connect =~ m!^file:/dev/usb/lp(\d+)$!) { + my $number = $1; + $connection = _(", USB printer \#%s", $number); + } elsif ($connect =~ m!^file:(.+)$!) { + $connection = _(", printing to %s", $1); + } elsif ($connect =~ m!^lpd://([^/]+)/([^/]+)/?$!) { + $connection = _("on LPD server \"%s\", printer \"%s\"", $2, $1); + } elsif ($connect =~ m!^socket://([^/:]+):([^/:]+)/?$!) { + $connection = _(", TCP/IP host \"%s\", port \"%s\"", $1, $2); + } elsif (($connect =~ m!^smb://([^/\@]+)/([^/\@]+)/?$!) || + ($connect =~ m!^smb://.*/([^/\@]+)/([^/\@]+)/?$!) || + ($connect =~ m!^smb://.*\@([^/\@]+)/([^/\@]+)/?$!)) { + $connection = _("on Windows server \"%s\", share \"%s\"", $1, $2); + } elsif (($connect =~ m!^ncp://([^/\@]+)/([^/\@]+)/?$!) || + ($connect =~ m!^ncp://.*/([^/\@]+)/([^/\@]+)/?$!) || + ($connect =~ m!^ncp://.*\@([^/\@]+)/([^/\@]+)/?$!)) { + $connection = _("on Novell server \"%s\", printer \"%s\"", $1, $2); + } elsif ($connect =~ m!^postpipe:(.+)$!) { + $connection = _(", using command %s", $1); + } else { + $connection = ""; + } + my $sep = "!"; + $printer->{configured}{$queue}{'queuedata'}{'menuentry'} = + ($::expert ? "$spooler$sep" : "") . + "$localremote$sep$queue: $make $model$connection"; +} + sub read_printer_db(;$) { my $spooler = $_[0]; @@ -684,6 +732,7 @@ sub read_cups_options ($) { #------------------------------------------------------------------------------ sub read_cups_printer_list { + my ($printer) = $_[0]; # This function reads in a list of all printers which the local CUPS # daemon currently knows, including remote ones. local *F; @@ -695,7 +744,8 @@ sub read_cups_printer_list { if ($line =~ m/^\s*device\s+for\s+([^:\s]+):\s*(\S+)\s*$/) { my $queuename = $1; my $comment = ""; - if ($2 =~ m!^ipp://([^/:]+)[:/]!) { + if (($2 =~ m!^ipp://([^/:]+)[:/]!) && + (!$printer->{configured}{$queuename})) { $comment = _("(on %s)", $1); } else { $comment = _("(on this machine)"); @@ -707,6 +757,36 @@ sub read_cups_printer_list { return @printerlist; } +sub get_cups_remote_queues { + my ($printer) = $_[0]; + # This function reads in a list of all remote printers which the local + # CUPS daemon knows due to broadcasting of remote servers or + # "BrowsePoll" entries in the local /etc/cups/cupsd.conf/ + local *F; + open F, ($::testing ? "$prefix" : "chroot $prefix/ ") . + "lpstat -v |" || return (); + my @printerlist = (); + my $line; + while ($line = <F>) { + if ($line =~ m/^\s*device\s+for\s+([^:\s]+):\s*(\S+)\s*$/) { + my $queuename = $1; + my $comment = ""; + if (($2 =~ m!^ipp://([^/:]+)[:/]!) && + (!$printer->{configured}{$queuename})) { + $comment = _("On CUPS server \"%s\"", $1); + my $sep = "!"; + push (@printerlist, + ($::expert ? _("CUPS") . $sep : "") . + _("Remote Printers") . "$sep$queuename: $comment" + . ($queuename eq $printer->{DEFAULT} ? + _(" (Default)") : ())); + } + } + } + close F; + return @printerlist; +} + sub set_cups_autoconf { my $autoconf = $_[0]; @@ -1147,6 +1227,9 @@ sub lphelp_output { open F, ($::testing ? "$prefix" : "chroot $prefix/ ") . "$lphelp $queue |"; $helptext = join("", <F>); close F; + if (!$helptext || ($helptext eq "")) { + $helptext = "Option list not available!\n"; + } return $helptext; } |