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
							 |