X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=lib%2FSpeak.pm;h=c98feca6ee50a43d4e9ddd1760ab015b4b846fd6;hb=75f06ef1cd56d531eb9ae086618bce3ff6aaa510;hp=0869ed4aecae2d48e86f7b162849d342ddaca5a2;hpb=ded8d315fd3f6c050f759865b09f053ae85e52a5;p=clearscm.git diff --git a/lib/Speak.pm b/lib/Speak.pm index 0869ed4..c98feca 100644 --- a/lib/Speak.pm +++ b/lib/Speak.pm @@ -47,6 +47,7 @@ use warnings; use base 'Exporter'; use FindBin; +use Clipboard; use lib "$FindBin::Bin/../lib"; @@ -82,7 +83,7 @@ Otherwise the text in the clipboard will be used. =item $log -If provided, errors and messages will be logged to the logfile, otherwise stdout +If provided, errors and messages will be logged to the logfile, otherwise to speak.log =back @@ -102,51 +103,35 @@ Returns: =cut - if (-f "$FindBin::Bin/shh") { - if ($log) { - $log->msg("Not speaking because we were asked to be quiet - $msg"); - } else { - verbose "Not speaking because we were asked to be quiet - $msg"; - } # if + $log = Logger->new( + path => '/var/local/log', + name => 'speak', + timestamped => 'yes', + append => 1, + ) unless $log; + + if (-f "$FindBin::Bin/../data/shh") { + $msg .= ' [silent shh]'; + $log->msg($msg); return; } # if + # Handle the case where $msg is not passed in. Then use the clipboard; + $msg = Clipboard->paste unless $msg; + # Handle the case where $msg is a filehandle $msg = <$msg> if ref $msg eq 'GLOB'; - # We can't have two speakers going at the same time so if we have an error - # backoff a little and try again. - my $attempts = 0; - my $maxretries = 3; - my $backoff = 2; - - my ($status, @output); - - while ($attempts++ < $maxretries) { - ($status, @output) = Execute "/usr/local/bin/gt \"$msg\""; - - if ($status) { - my $errmsg = "Unable to speak (Status: $status) - " . join "\n", @output; - - if ($log) { - $log->err($errmsg); - } else { - error $errmsg; - } # if + # Log message to log file if $log was passed in. + $log->msg($msg); - sleep $backoff++; - } else { - return; # We said our piece... - } # if - } # while + my ($status, @output) = Execute "/usr/local/bin/gt \"$msg\""; - my $errmsg = 'Maximum retries exceeded - terminating'; + if ($status) { + my $errmsg = "Unable to speak (Status: $status) - " . join "\n", @output; - if ($log) { - $log->err($errmsg, $status); - } else { - error $errmsg, $status; + $log->err($errmsg); } # if return;