if [ -f $touchfile ]; then
rm $touchfile
cp ~/.icons/ShhOff.png ~/.icons/Shh.png
- notify-send -t $timeout "Announcements turned on"
else
+ # Stop currently playing audio
+ killall play
+ # Stop any Google TTS
+ kill -9 $(cat /tmp/simple_google_tts.pid)
+ # Clean up tmp
+ rm -rf /tmp/simple_google_tts.*
+ # Touch shh file
touch $touchfile
+ # Change the icon
cp ~/.icons/ShhOn.png ~/.icons/Shh.png
- # Note that a -t 0 will keep the notification up. This way we can
- # be visually reminded that we are not receiving audio announcements
- notify-send -t 0 "Announcements turned off"
fi
=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
=cut
+ $log = Logger->new(
+ path => '/var/local/log',
+ name => 'speak',
+ timestamped => 'yes',
+ append => 1,
+ ) unless $log;
+
if (-f "$FindBin::Bin/../data/shh") {
$msg .= ' [silent shh]';
- if ($log) {
- $log->msg($msg);
- } else {
- verbose $msg;
- } # if
+ $log->msg($msg);
return;
} # if
# 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 ($status, @output);
-
# Log message to log file if $log was passed in.
- $log->msg($msg) if $log;
-
- 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->msg($msg);
- sleep int rand 10;
- } else {
- return;
- } # 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;