Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • client/bin/gbr

    r43ddb7a r600e713  
    11#!/usr/bin/perl
    22
    3 # This script was largely written by Jessica Hamrick (jhamrick), with
    4 # help from Kyle Brogle (broglek)
     3# Written by Jessica Hamrick (C) 2010
    54
    65use strict;
     
    1110use Getopt::Long;
    1211use Image::ExifTool qw(ImageInfo);
    13 use List::Util 'shuffle';
    14 use File::Find;
    1512
    16 # the usage for this script
    17 my $usage = <<USAGE;
    18 Usage: gbr [options] [-q QUEUE] FILES
     13my $usage = "Usage: gbr QUEUE FILES\n";
    1914
    20         -q, --queue             Specify a queue other than the default
    21         -d, --dryrun            Just list what would be done
    22         -s, --shuffle           Randomize the order that the songs are queued in
    23         -r, --recursive         Recursively find files if a directory is passed in
    24         -n, --number NUMBER     Only print NUMBER files, if more than NUMBER are given
    25                                 (this will print the first NUMBER files if -s is not given)
    26         -h, --help              Print this message
    27 USAGE
     15my $q = "";
     16GetOptions ('q|queue=s' => \$q);
    2817
    29 # initialize the variables for the options
    30 my $q = "";
    31 my $dryrun = 0;
    32 my $help = 0;
    33 my $shuffle = 0;
    34 my $recursive = 0;
    35 my $number = 0;
     18my @files = @ARGV[0 .. $#ARGV];
    3619
    37 # parse the options
    38 GetOptions ('q|queue=s' => \$q,
    39             'd|dryrun' => \$dryrun,
    40             'h|help' => \$help,
    41             's|shuffle' => \$shuffle,
    42             'r|recursive' => \$recursive,
    43             'n|number=i' => \$number);
    44 
    45 # if the -h flag was passed, then print the usage and exit
    46 if ($help) {
    47     print $usage;
    48     exit 0;
    49 }
    50 
    51 # get the files to print from the arguments
    52 my @files = @ARGV[0 .. $#ARGV];
    53 my @allfiles;
    54 
    55 # if the recursive flag was passed, then recursively find files
    56 if ($recursive) {
    57 
    58     # helper function to add a file to the end of the list, but only
    59     # if it is a file (and not a directory)
    60     sub append {
    61         my $name = $File::Find::name;
    62         if (-f $name) {
    63             push(@allfiles, $name);
    64         }
    65     }
    66    
    67     # recursively find all the files and add them to @allfiles
    68     find(\&append, @files);
    69 
    70     # if we're not shuffling the list, then sort the files.  If we are
    71     # shuffling the list, then don't bother sorting (since we're going
    72     # to shuffle it anyway)
    73     unless ($shuffle) {
    74         @files = sort(@allfiles);
    75     } else {
    76         @files = @allfiles;
    77     }
    78 }
    79 
    80 # if the shuffle flag was passed, then shuffle the order of the files
    81 if ($shuffle) {
    82     @files = shuffle(@files);
    83 }
    84 
    85 # if the number flag was specified, then only play the specified
    86 # number of files
    87 if ($number > 0 and $number < $#files) {
    88     @files = @files[0 .. $number-1]
    89 }
    90 
    91 # if the -q option is not specified, then assume we're using the
    92 # default queue
    9320if (!$q){
    9421    $q = "DEFAULT";
    9522}
    96 
    97 # if there are no files specified to print, then show the usage,
    98 # because the user is Doing It Wrong
    9923if (!@files) {
    10024    print $usage;
     
    10226}
    10327
    104 # set configuration path, and complain if it doesn't exist
    10528my $configpath = "$ENV{'HOME'}/.gutenbach/$q";
    10629if (! -e $configpath) {
     
    10932}
    11033
    111 # initialize the host and queue variables: host holds the address for
    112 # the machine on which the remote queue runs, and queue holds the name
    113 # of the printer
    11434my ($host, $queue);
    11535
    116 # load the configuration file (this will set $host and $queue)
    11736if (-r $configpath) {
    11837    local $/;
     
    12241}
    12342
    124 # initialize a new CUPS session
    12543my $cups = Net::CUPS->new();
    126 # set the server to the one specified in the config file
    12744$cups->setServer("$host");
    128 # set the printer name to the one specified in the config file
    12945my $printer = $cups->getDestination("$queue");
    130 
    131 # if $printer is not defined, then throw an error
    13246unless( $printer){
    133     print "Cannot access queue $q... do you have network connectivity and permission to view the queue?\n";
     47    print "Cannot access queue $q...do you have network connectivity and permission to view the queue?\n";
    13448    exit 1;
    13549}
    136 
    137 # initialize the job id and title variables for use below
    13850my ($jobid, $title);
    13951
    140 # for each file that the user wants to print
    14152foreach my $file(@files) {
    142 
    143     # check to see if the file is a youtube video.  If it is, then
    144     # write the URL to a temporary file, and set the number of copies
    145     # on the print job to 42 (this is the dirty hack we have in place
    146     # to indicate that the job is a youtube file instead of a normal
    147     # file)
    14853    if ($file =~ m|http://www\.youtube\.com/watch\?v=|) {
    14954        open FILE, ">", "/tmp/gutenbach-youtube" or die "Couldn't create temporary file";
     
    15358        $printer->addOption("copies", 42);
    15459    }
    155 
    156     # otherwise, we assume it's a normal file.  Try to use exiftool's
    157     # ImageInfo to find out the tag information about the file (i.e.,
    158     # title, artist, and album).  If you can, then rename the job to
    159     # reflect those tags.  Otherwise, keep the normal title.
    16060    else {
    16161        my $fileinfo = ImageInfo($file);
     
    17070    }
    17171
    172     # unless it's a dry run, send the print job, given the file and
    173     # the job title
    174     unless ($dryrun) {
    175         $jobid = $printer->printFile($file, $title);
    176 
    177         # if the printFile command returned a job id, then print that out
    178         # for the user to see
    179         if ($jobid) {
    180             print "Sent job '$title' (id $jobid)\n";
    181         }
    182 
    183         # otherwise, let them know that an error occurred
    184         else {
    185             print "Error sending job '$title'\n";
    186         }
    187 
    188     # otherwise, just print what we would do
    189     } else {
    190         print "Would send file '$file' with title '$title'\n";
    191     }   
     72    $jobid = $printer->printFile($file, $title);
     73   
     74    if ($jobid) {
     75        print "Sent job '$title' (id $jobid)\n";
     76    }
     77    else {
     78        print "Error sending job '$title'\n";
     79    }
    19280}
Note: See TracChangeset for help on using the changeset viewer.