Changeset 96ec1eb for client/bin/gbr


Ignore:
Timestamp:
Oct 17, 2010, 8:38:47 PM (14 years ago)
Author:
Patrick Hurst <phurst@…>
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)
Message:

Merge branch 'master' into mac

Conflicts:

itunes/gutenbach - Get Queue.scpt
itunes/gutenbach - Queue Music.scpt
itunes/gutenbach - Remove All.scpt
itunes/gutenbach - Toggle Mute.scpt
itunes/gutenbach - Volume Get.scpt
itunes/gutenbach - Volume Set.scpt

File:
1 edited

Legend:

Unmodified
Added
Removed
  • client/bin/gbr

    r600e713 r267d44e  
    11#!/usr/bin/perl
    22
    3 # Written by Jessica Hamrick (C) 2010
     3# This script was largely written by Jessica Hamrick (jhamrick), with
     4# help from Kyle Brogle (broglek)
    45
    56use strict;
     
    1011use Getopt::Long;
    1112use Image::ExifTool qw(ImageInfo);
     13use List::Util 'shuffle';
     14use File::Find;
    1215
    13 my $usage = "Usage: gbr QUEUE FILES\n";
     16# the usage for this script
     17my $usage = <<USAGE;
     18Usage: gbr [options] [-q QUEUE] FILES
    1419
     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
     27USAGE
     28
     29# initialize the variables for the options
    1530my $q = "";
    16 GetOptions ('q|queue=s' => \$q);
     31my $dryrun = 0;
     32my $help = 0;
     33my $shuffle = 0;
     34my $recursive = 0;
     35my $number = 0;
    1736
     37# parse the options
     38GetOptions ('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
     46if ($help) {
     47    print $usage;
     48    exit 0;
     49}
     50
     51# get the files to print from the arguments
    1852my @files = @ARGV[0 .. $#ARGV];
     53my @allfiles;
    1954
     55# if the recursive flag was passed, then recursively find files
     56if ($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
     80if ($shuffle) {
     81    @files = shuffle(@files);
     82}
     83
     84# if the number flag was specified, then only play the specified
     85# number of files
     86if ($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
    2092if (!$q){
    2193    $q = "DEFAULT";
    2294}
     95
     96# if there are no files specified to print, then show the usage,
     97# because the user is Doing It Wrong
    2398if (!@files) {
    2499    print $usage;
     
    26101}
    27102
     103# set configuration path, and complain if it doesn't exist
    28104my $configpath = "$ENV{'HOME'}/.gutenbach/$q";
    29105if (! -e $configpath) {
     
    32108}
    33109
     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
    34113my ($host, $queue);
    35114
     115# load the configuration file (this will set $host and $queue)
    36116if (-r $configpath) {
    37117    local $/;
     
    41121}
    42122
     123# initialize a new CUPS session
    43124my $cups = Net::CUPS->new();
     125# set the server to the one specified in the config file
    44126$cups->setServer("$host");
     127# set the printer name to the one specified in the config file
    45128my $printer = $cups->getDestination("$queue");
     129
     130# if $printer is not defined, then throw an error
    46131unless( $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";
    48133    exit 1;
    49134}
     135
     136# initialize the job id and title variables for use below
    50137my ($jobid, $title);
    51138
     139# for each file that the user wants to print
    52140foreach 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)
    53147    if ($file =~ m|http://www\.youtube\.com/watch\?v=|) {
    54148        open FILE, ">", "/tmp/gutenbach-youtube" or die "Couldn't create temporary file";
     
    58152        $printer->addOption("copies", 42);
    59153    }
     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.
    60159    else {
    61160        my $fileinfo = ImageInfo($file);
     
    70169    }
    71170
    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    }   
    80191}
Note: See TracChangeset for help on using the changeset viewer.