forked from HPR/hpr-tools
		
	
		
			
	
	
		
			167 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			167 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/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 |