Changes in client/bin/gbr [600e713:43ddb7a]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
client/bin/gbr
r600e713 r43ddb7a 1 1 #!/usr/bin/perl 2 2 3 # Written by Jessica Hamrick (C) 2010 3 # This script was largely written by Jessica Hamrick (jhamrick), with 4 # help from Kyle Brogle (broglek) 4 5 5 6 use strict; … … 10 11 use Getopt::Long; 11 12 use Image::ExifTool qw(ImageInfo); 13 use List::Util 'shuffle'; 14 use File::Find; 12 15 13 my $usage = "Usage: gbr QUEUE FILES\n"; 16 # the usage for this script 17 my $usage = <<USAGE; 18 Usage: gbr [options] [-q QUEUE] FILES 14 19 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 28 29 # initialize the variables for the options 15 30 my $q = ""; 16 GetOptions ('q|queue=s' => \$q); 31 my $dryrun = 0; 32 my $help = 0; 33 my $shuffle = 0; 34 my $recursive = 0; 35 my $number = 0; 17 36 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 18 52 my @files = @ARGV[0 .. $#ARGV]; 53 my @allfiles; 19 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 20 93 if (!$q){ 21 94 $q = "DEFAULT"; 22 95 } 96 97 # if there are no files specified to print, then show the usage, 98 # because the user is Doing It Wrong 23 99 if (!@files) { 24 100 print $usage; … … 26 102 } 27 103 104 # set configuration path, and complain if it doesn't exist 28 105 my $configpath = "$ENV{'HOME'}/.gutenbach/$q"; 29 106 if (! -e $configpath) { … … 32 109 } 33 110 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 34 114 my ($host, $queue); 35 115 116 # load the configuration file (this will set $host and $queue) 36 117 if (-r $configpath) { 37 118 local $/; … … 41 122 } 42 123 124 # initialize a new CUPS session 43 125 my $cups = Net::CUPS->new(); 126 # set the server to the one specified in the config file 44 127 $cups->setServer("$host"); 128 # set the printer name to the one specified in the config file 45 129 my $printer = $cups->getDestination("$queue"); 130 131 # if $printer is not defined, then throw an error 46 132 unless( $printer){ 47 print "Cannot access queue $q... do you have network connectivity and permission to view the queue?\n";133 print "Cannot access queue $q... do you have network connectivity and permission to view the queue?\n"; 48 134 exit 1; 49 135 } 136 137 # initialize the job id and title variables for use below 50 138 my ($jobid, $title); 51 139 140 # for each file that the user wants to print 52 141 foreach 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) 53 148 if ($file =~ m|http://www\.youtube\.com/watch\?v=|) { 54 149 open FILE, ">", "/tmp/gutenbach-youtube" or die "Couldn't create temporary file"; … … 58 153 $printer->addOption("copies", 42); 59 154 } 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. 60 160 else { 61 161 my $fileinfo = ImageInfo($file); … … 70 170 } 71 171 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 } 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 } 80 192 }
Note: See TracChangeset
for help on using the changeset viewer.