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
 |