Changes in client/bin/gbr [43ddb7a:600e713]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
client/bin/gbr
r43ddb7a r600e713 1 1 #!/usr/bin/perl 2 2 3 # This script was largely written by Jessica Hamrick (jhamrick), with 4 # help from Kyle Brogle (broglek) 3 # Written by Jessica Hamrick (C) 2010 5 4 6 5 use strict; … … 11 10 use Getopt::Long; 12 11 use Image::ExifTool qw(ImageInfo); 13 use List::Util 'shuffle';14 use File::Find;15 12 16 # the usage for this script 17 my $usage = <<USAGE; 18 Usage: gbr [options] [-q QUEUE] FILES 13 my $usage = "Usage: gbr QUEUE FILES\n"; 19 14 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 15 my $q = ""; 16 GetOptions ('q|queue=s' => \$q); 28 17 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; 18 my @files = @ARGV[0 .. $#ARGV]; 36 19 37 # parse the options38 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 exit46 if ($help) {47 print $usage;48 exit 0;49 }50 51 # get the files to print from the arguments52 my @files = @ARGV[0 .. $#ARGV];53 my @allfiles;54 55 # if the recursive flag was passed, then recursively find files56 if ($recursive) {57 58 # helper function to add a file to the end of the list, but only59 # 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 @allfiles68 find(\&append, @files);69 70 # if we're not shuffling the list, then sort the files. If we are71 # shuffling the list, then don't bother sorting (since we're going72 # 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 files81 if ($shuffle) {82 @files = shuffle(@files);83 }84 85 # if the number flag was specified, then only play the specified86 # number of files87 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 the92 # default queue93 20 if (!$q){ 94 21 $q = "DEFAULT"; 95 22 } 96 97 # if there are no files specified to print, then show the usage,98 # because the user is Doing It Wrong99 23 if (!@files) { 100 24 print $usage; … … 102 26 } 103 27 104 # set configuration path, and complain if it doesn't exist105 28 my $configpath = "$ENV{'HOME'}/.gutenbach/$q"; 106 29 if (! -e $configpath) { … … 109 32 } 110 33 111 # initialize the host and queue variables: host holds the address for112 # the machine on which the remote queue runs, and queue holds the name113 # of the printer114 34 my ($host, $queue); 115 35 116 # load the configuration file (this will set $host and $queue)117 36 if (-r $configpath) { 118 37 local $/; … … 122 41 } 123 42 124 # initialize a new CUPS session125 43 my $cups = Net::CUPS->new(); 126 # set the server to the one specified in the config file127 44 $cups->setServer("$host"); 128 # set the printer name to the one specified in the config file129 45 my $printer = $cups->getDestination("$queue"); 130 131 # if $printer is not defined, then throw an error132 46 unless( $printer){ 133 print "Cannot access queue $q... 47 print "Cannot access queue $q...do you have network connectivity and permission to view the queue?\n"; 134 48 exit 1; 135 49 } 136 137 # initialize the job id and title variables for use below138 50 my ($jobid, $title); 139 51 140 # for each file that the user wants to print141 52 foreach my $file(@files) { 142 143 # check to see if the file is a youtube video. If it is, then144 # write the URL to a temporary file, and set the number of copies145 # on the print job to 42 (this is the dirty hack we have in place146 # to indicate that the job is a youtube file instead of a normal147 # file)148 53 if ($file =~ m|http://www\.youtube\.com/watch\?v=|) { 149 54 open FILE, ">", "/tmp/gutenbach-youtube" or die "Couldn't create temporary file"; … … 153 58 $printer->addOption("copies", 42); 154 59 } 155 156 # otherwise, we assume it's a normal file. Try to use exiftool's157 # ImageInfo to find out the tag information about the file (i.e.,158 # title, artist, and album). If you can, then rename the job to159 # reflect those tags. Otherwise, keep the normal title.160 60 else { 161 61 my $fileinfo = ImageInfo($file); … … 170 70 } 171 71 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 } 192 80 }
Note: See TracChangeset
for help on using the changeset viewer.