forked from HPR/hpr-tools
		
	
		
			
				
	
	
		
			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
 |