Changeset 96ec1eb for client/bin/gbr
- Timestamp:
- Oct 17, 2010, 8:38:47 PM (14 years ago)
- Branches:
- mac
- Children:
- 30e33fb
- Parents:
- ac0ca2a (diff), 267d44e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - git-author:
- Patrick Hurst <phurst@…> (10/17/10 20:38:47)
- git-committer:
- Patrick Hurst <phurst@…> (10/17/10 20:38:47)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
client/bin/gbr
r600e713 r267d44e 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 if (-f $_) { 62 push(@allfiles, $_); 63 } 64 } 65 66 # recursively find all the files and add them to @allfiles 67 find({ wanted => \&append, no_chdir => 1}, @files); 68 69 # if we're not shuffling the list, then sort the files. If we are 70 # shuffling the list, then don't bother sorting (since we're going 71 # to shuffle it anyway) 72 unless ($shuffle) { 73 @files = sort(@allfiles); 74 } else { 75 @files = @allfiles; 76 } 77 } 78 79 # if the shuffle flag was passed, then shuffle the order of the files 80 if ($shuffle) { 81 @files = shuffle(@files); 82 } 83 84 # if the number flag was specified, then only play the specified 85 # number of files 86 if ($number > 0 and $number < $#files) { 87 @files = @files[0 .. $number-1] 88 } 89 90 # if the -q option is not specified, then assume we're using the 91 # default queue 20 92 if (!$q){ 21 93 $q = "DEFAULT"; 22 94 } 95 96 # if there are no files specified to print, then show the usage, 97 # because the user is Doing It Wrong 23 98 if (!@files) { 24 99 print $usage; … … 26 101 } 27 102 103 # set configuration path, and complain if it doesn't exist 28 104 my $configpath = "$ENV{'HOME'}/.gutenbach/$q"; 29 105 if (! -e $configpath) { … … 32 108 } 33 109 110 # initialize the host and queue variables: host holds the address for 111 # the machine on which the remote queue runs, and queue holds the name 112 # of the printer 34 113 my ($host, $queue); 35 114 115 # load the configuration file (this will set $host and $queue) 36 116 if (-r $configpath) { 37 117 local $/; … … 41 121 } 42 122 123 # initialize a new CUPS session 43 124 my $cups = Net::CUPS->new(); 125 # set the server to the one specified in the config file 44 126 $cups->setServer("$host"); 127 # set the printer name to the one specified in the config file 45 128 my $printer = $cups->getDestination("$queue"); 129 130 # if $printer is not defined, then throw an error 46 131 unless( $printer){ 47 print "Cannot access queue $q... do you have network connectivity and permission to view the queue?\n";132 print "Cannot access queue $q... do you have network connectivity and permission to view the queue?\n"; 48 133 exit 1; 49 134 } 135 136 # initialize the job id and title variables for use below 50 137 my ($jobid, $title); 51 138 139 # for each file that the user wants to print 52 140 foreach my $file(@files) { 141 142 # check to see if the file is a youtube video. If it is, then 143 # write the URL to a temporary file, and set the number of copies 144 # on the print job to 42 (this is the dirty hack we have in place 145 # to indicate that the job is a youtube file instead of a normal 146 # file) 53 147 if ($file =~ m|http://www\.youtube\.com/watch\?v=|) { 54 148 open FILE, ">", "/tmp/gutenbach-youtube" or die "Couldn't create temporary file"; … … 58 152 $printer->addOption("copies", 42); 59 153 } 154 155 # otherwise, we assume it's a normal file. Try to use exiftool's 156 # ImageInfo to find out the tag information about the file (i.e., 157 # title, artist, and album). If you can, then rename the job to 158 # reflect those tags. Otherwise, keep the normal title. 60 159 else { 61 160 my $fileinfo = ImageInfo($file); … … 70 169 } 71 170 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 } 171 # unless it's a dry run, send the print job, given the file and 172 # the job title 173 unless ($dryrun) { 174 $jobid = $printer->printFile($file, $title); 175 176 # if the printFile command returned a job id, then print that out 177 # for the user to see 178 if ($jobid) { 179 print "Sent job '$title' (id $jobid)\n"; 180 } 181 182 # otherwise, let them know that an error occurred 183 else { 184 print "Error sending job '$title'\n"; 185 } 186 187 # otherwise, just print what we would do 188 } else { 189 print "Would send file '$file' with title '$title'\n"; 190 } 80 191 }
Note: See TracChangeset
for help on using the changeset viewer.