Dans amc/AMC-perl/AMC/Print/cupslp.pm serait-il possible de tenter lpstat -a en cas d'échec de lpstat -e ? (Feature #688)


Added by Joël Brogniart over 4 years ago. Updated about 4 years ago.


Status:New Start date:11/28/2019
Priority:Normal Due date:
Assignee:- % Done:

0%

Category:-
Target version:-

Description

Au commit git:43a83e09, dans printer_list(), lpstat -a est remplacé par lpstat -e et cela fonctionne correctement avec les versions récentes de macOS (au moins 10.15 et 10.14). Par contre avec des versions plus anciennes de macOS (au moins 10.12 et 10.11) la version système de cups est plus ancienne est ne connait pas l'option -e.

Serait-il possible de revenir à l'ancien fonctionnement basé sur lpstat -a en cas d'échec de lpstat -e pour que cela fonctionne avec les versions plus anciennes de macOS ?

Cela pourrait être quelque chose du genre (je ne suis pas un spécialiste de PERL).

sub printers_list {
    my ($self) = @_;
    my @list = ();
    if(open( PL, "-|", "lpstat", "-e" )) {
        while (<PL>) {
            chomp;
            push @list, { name => $_, description => "" };
        }
    } else {
        open(PL,"-|","lpstat","-a")
           or die "Can't exec lpstat: $!";
        while(<PL>) {
            push @list,{name=>$1,description=>$1}
              if(/^([^\s]+)\s+accept/);
        }
    }
    close PL;
    return ('');
}

History

Updated by Joël Brogniart about 4 years ago

Bon ma solution était vraiment trop triviale et ne fonctionnait pas du tout. Du coup il a fallu que j'apprenne un peu de PERL pour avoir quelque chose qui fonctionne.

La version ci-dessous de la fonction marche chez moi pour macOS 10.15 et 10.12 avec AMC au commit git:fc646f9d (le dernier à ce jour). Est-il envisageable que la nouvelle version soit adoptée si elle fonctionne aussi sur les autres plateformes ?

sub printers_list {
    my ($self) = @_;
    my @list = ();

    # Verify if lpstat -e output to stderr
    open( PL, "-|", "lpstat -e 2>&1 1>/dev/null" )
        or die "Can't exec lpstat: $!";
    my $err = <PL>;
    close PL;
    if($err) {
        # lpstat -e outputted to stderr so try lpstat -a
        open(PL,"-|","lpstat","-a")
           or die "Can't exec lpstat: $!";
        while(<PL>) {
            push @list,{name=>$1,description=>$1}
              if(/^([^\s]+)\s+accept/);
        }
        close PL;
    } else {
        # lpstat -e outputted nothing to stderr so use it
        open( PL, "-|", "lpstat", "-e" )
            or die "Can't exec lpstat: $!";
        while (<PL>) {
            chomp;
            push @list, { name => $_, description => "" };
        }
        close PL;
    }
    return(@list);
}

Pour rappel, le but de cette version de la fonction est de fonctionner avec une version de CUPS récente qui comprend l'option "-e" et des versions anciennes qui ne comprennent pas cette option. La version actuelle de la fonction empêche l'impression sur les anciennes version de CUPS.

Also available in: Atom PDF