Removed /usr/local from CDPATH
[clearscm.git] / lib / Speak.pm
index 0869ed4..9cb9441 100644 (file)
@@ -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,38 @@ 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;
+  # Log message to log file if $log was passed in.
+  $log->msg($msg);
 
-      if ($log) {
-        $log->err($errmsg);
-      } else {
-        error $errmsg;
-      } # if
+  #$msg = quotemeta $msg;
+  $msg =~ s/\$/\\\$/g;
 
-      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;