#!/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