167 lines
3.9 KiB
Bash
Executable File
167 lines
3.9 KiB
Bash
Executable File
#!/bin/bash -
|
|
#===============================================================================
|
|
#
|
|
# FILE: manage_comment_spool
|
|
#
|
|
# USAGE: ./manage_comment_spool [subject] [message-id]
|
|
#
|
|
# DESCRIPTION: Deals with comments in the spool area where they are dropped
|
|
# by Thunderbird. This script is also designed to be run out of
|
|
# Thunderbird when it turns on or off the LED on the Blinkt!
|
|
# (using MQTT) and de-duplicates comments if necessary.
|
|
#
|
|
# OPTIONS: ---
|
|
# REQUIREMENTS: ---
|
|
# BUGS: ---
|
|
# NOTES: ---
|
|
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
|
# VERSION: 0.0.3
|
|
# CREATED: 2023-07-14 15:38:33
|
|
# REVISION: 2023-12-24 16:00:05
|
|
#
|
|
#===============================================================================
|
|
|
|
set -o nounset # Treat unset variables as an error
|
|
|
|
SCRIPT=${0##*/}
|
|
|
|
VERSION="0.0.3"
|
|
|
|
STDOUT="/dev/fd/2"
|
|
|
|
#=== FUNCTION ================================================================
|
|
# NAME: alert
|
|
# DESCRIPTION: Turn a LED on the Blinkt! host to an RGB colour
|
|
# PARAMETERS: 1 - LED number 0..7
|
|
# 2 - RGB colour as 'R,G,B' values, default '0,0,0'
|
|
# RETURNS: 1 on error, otherwise 0
|
|
#===============================================================================
|
|
function alert () {
|
|
local LED="${1}"
|
|
local RGB="${2:-0,0,0}"
|
|
|
|
local BHOST="192.168.0.63"
|
|
|
|
mosquitto_pub -h $BHOST -t pimoroni/blinkt -m "rgb,$LED,$RGB"
|
|
|
|
}
|
|
|
|
#=== FUNCTION ================================================================
|
|
# NAME: _usage
|
|
# DESCRIPTION: Report usage
|
|
# PARAMETERS: None
|
|
# RETURNS: Nothing
|
|
#===============================================================================
|
|
_usage () {
|
|
cat >$STDOUT <<-endusage
|
|
Usage: ./${SCRIPT} [-h] [-s] [subject] [message-id]
|
|
|
|
Version: $VERSION
|
|
|
|
Script to be invoked via Thunderbird to manage and report on the comment spool
|
|
area
|
|
|
|
Options:
|
|
-h Print this help
|
|
-s Silent mode, output less text about actions
|
|
|
|
Arguments:
|
|
subject
|
|
message-id
|
|
These are optional and are only provided when called by Thunderbir
|
|
|
|
Examples
|
|
./${SCRIPT} -h
|
|
|
|
endusage
|
|
exit
|
|
}
|
|
|
|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
#
|
|
# Option defaults
|
|
#
|
|
SILENT=0 # not silent by default
|
|
|
|
#
|
|
# Process options
|
|
#
|
|
while getopts :hs opt
|
|
do
|
|
case "${opt}" in
|
|
h) _usage;;
|
|
s) SILENT=1;;
|
|
?) echo "$SCRIPT: Invalid option; aborting"; exit 1;;
|
|
esac
|
|
done
|
|
shift $((OPTIND - 1))
|
|
|
|
#
|
|
# Constants
|
|
#
|
|
BASENAME="$HOME/HPR/Comment_system"
|
|
LOGDIR="$BASENAME/logs"
|
|
LOG="$LOGDIR/$SCRIPT.log"
|
|
SPOOLDIR="$HOME/HPR/CommentDrop"
|
|
|
|
# The LED to light
|
|
LED=1
|
|
|
|
# Whether we're doing alerts
|
|
ALERTING=1
|
|
|
|
#
|
|
# We expect to be called with two arguments if called from Thunderbird,
|
|
# otherwise we'll make empty defaults.
|
|
#
|
|
if [[ $# -eq 2 ]]; then
|
|
subject="$1"
|
|
message_id="$2"
|
|
else
|
|
subject=
|
|
message_id=
|
|
fi
|
|
|
|
#
|
|
# Check the spool directory
|
|
#
|
|
declare -a EMAIL
|
|
mapfile -t EMAIL < <(find "$SPOOLDIR" -maxdepth 1 -name "*.eml" -printf '%p\n')
|
|
|
|
#
|
|
# Clear out files which end in '-1.eml' (or any single digit number), and tidy
|
|
# the array as well.
|
|
#
|
|
i=0
|
|
for m in "${EMAIL[@]}"; do
|
|
if [[ "$m" =~ -[1-9].eml$ ]]; then
|
|
unset "EMAIL[$i]"
|
|
rm -f "$m"
|
|
fi
|
|
((i++))
|
|
done
|
|
|
|
#
|
|
# If we have comments left we turn on the LED, otherwise we turn it off
|
|
#
|
|
comments="${#EMAIL[@]}"
|
|
if [[ $comments -eq 0 ]]; then
|
|
[ "$SILENT" == 0 ] && echo "Nothing found"
|
|
[ "$ALERTING" == 1 ] && alert $LED
|
|
exit
|
|
else
|
|
[ "$SILENT" == 0 ] && echo "Found $comments $(ngettext comment comments "$comments")"
|
|
[ "$ALERTING" == 1 ] && alert $LED '0,255,128'
|
|
fi
|
|
|
|
#
|
|
# Log the call, but only if there were comments. This includes the two
|
|
# arguments passed by the filter, the subject and message-id.
|
|
#
|
|
echo "$SCRIPT $(date +'%F %H:%M:%S') '$$' '$subject' '$message_id'" >> "$LOG"
|
|
|
|
exit
|
|
|
|
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21
|