hpr-tools/Show_Submission/do_state_change

303 lines
7.8 KiB
Bash
Executable File

#!/bin/bash -
#===============================================================================
#
# FILE: do_state_change
#
# USAGE: ./do_state_change [-h] [-D] [-m] [-s] [-Y] <epno>
#
# DESCRIPTION: Script to be invoked via symlinks to perform related tasks
# relating to show states.
#
# - When called as 'do_reserve' toggles a '.reserved' marker.
# - When called as 'do_block' creates the directory if necessary
# and makes a dummy 'shownotes.json' as well as a file called
# '.dummy'. Doesn't delete any of this since other software
# will tidy things.
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
# VERSION: 0.0.6
# CREATED: 2021-06-05 22:04:26
# REVISION: 2024-02-06 15:36:02
#
#===============================================================================
set -o nounset # Treat unset variables as an error
SCRIPT=${0##*/}
#DIR=${0%/*}
# shellcheck disable=SC2034
VERSION="0.0.6"
STDOUT="/dev/fd/2"
#
# Load library functions
#
LIB="$HOME/bin/function_lib.sh"
[ -e "$LIB" ] || { echo "$SCRIPT: Unable to source functions"; exit 1; }
# shellcheck source=/home/cendjm/bin/function_lib.sh
source "$LIB"
#
# Colour codes
#
define_colours
#=== FUNCTION ================================================================
# NAME: _usage
# DESCRIPTION: Report usage
# PARAMETERS: None
# RETURNS: Nothing
#===============================================================================
_usage () {
cat >$STDOUT <<-endusage
Usage: ./${SCRIPT} [-h] [-D] [-m] [-s] [-Y] shownumber
Version: $VERSION
Script to be invoked via symlinks to perform related tasks relating to show states
Options:
-h Print this help
-D Run in debug mode where a lot more information is
reported
-m Monochrome mode - no colours
-s Silent mode, output less text about actions
-Y Assume 'Yes' in answer to the prompt
Arguments:
shownumber
Examples
./${SCRIPT} -h
./${SCRIPT} -m 3112
./${SCRIPT} -D 3112
./${SCRIPT} 3112
./${SCRIPT} -Y 3112
endusage
exit
}
#=== FUNCTION ================================================================
# NAME: exists
# DESCRIPTION: Determines wheher all paths given as arguments exist
# PARAMETERS: List of paths
# RETURNS: True if they all exist, otherwise false
#===============================================================================
exists () {
for path in "$@"; do
if [[ ! -e $path ]]; then
return 1
fi
done
return
}
#=== FUNCTION ================================================================
# NAME: _DEBUG
# DESCRIPTION: Writes one or more messages if in DEBUG mode. Each argument is
# seen as a message and is written on a separate line.
# References the global variable 'DEBUG' which is expected to be
# True if debug output is wanted.
# PARAMETERS: List of messages
# RETURNS: Nothing
#===============================================================================
_DEBUG () {
[ "$DEBUG" == 0 ] && return
for msg in "$@"; do
printf 'D> %s\n' "$msg"
done
}
#=== FUNCTION ================================================================
# NAME: _verbose
# DESCRIPTION: Writes a message in verbose mode
# PARAMETERS: $1 message
# RETURNS: Nothing
#===============================================================================
_verbose () {
[ "$VERBOSE" -eq 0 ] && return
for msg in "$@"; do
printf '%s\n' "$msg"
done
}
#=== FUNCTION ================================================================
# NAME: _silent
# DESCRIPTION: Writes a message unless in silent mode
# PARAMETERS: $1 message
# RETURNS: Nothing
#===============================================================================
_silent () {
[ "$SILENT" -eq 1 ] && return
for msg in "$@"; do
printf '%s\n' "$msg"
done
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Paths to files
#
BASENAME="$HOME/HPR/Show_Submission"
TPL="$BASENAME/shownotes/hpr%d/%s"
#
# Option defaults
#
COLOUR=1 # use colours by default
YES=0 # prompt for yes/no by default
TOGGLE=0 # marker can't be removed by default
#
# Process options
#
while getopts :hDmsY opt
do
case "${opt}" in
h) _usage;;
D) DEBUG=1;;
m) COLOUR=0;;
s) SILENT=1;;
Y) YES=1;;
?) echo "$SCRIPT: Invalid option; aborting"; exit 1;;
esac
done
shift $((OPTIND - 1))
DEBUG=${DEBUG:-0}
SILENT=${SILENT:-0}
#
# Cancel colours if requested
#
if [[ $COLOUR -eq 0 ]]; then
undefine_colours
fi
#
# Determine actions depending on how the script was called. Save filenames in
# an array.
#
declare -a MK MFILES
case "${SCRIPT#*/}" in
do_reserve)
MK+=('.reserved')
state='reserved'
TOGGLE=1
;;
do_block)
echo "Blocking of pending shows is not needed any more."
echo "See Journal for details (2024-02-06)"
exit
# MK+=('shownotes.json')
# MK+=('.dummy')
# state='blocked'
# TOGGLE=0
;;
*)
echo "Don't call this script directly; use one of its soft links"
echo "D> $0 $*"
exit 1
;;
esac
#
# Check the argument after any options
#
if [[ $# -ne 1 ]]; then
echo "$SCRIPT: ${red}Usage: $SCRIPT shownumber${reset}"
exit
fi
show="$1"
#
# I used 'hpr4065' by mistake today, so we need to check the show specification
#
if [[ $show =~ ^(hpr)?([0-9]+)$ ]]; then
printf -v show '%04d' "${BASH_REMATCH[2]}"
else
echo "$SCRIPT: ${red}Invalid show specification: $show${reset}"
exit
fi
#
# Build the path(s) to the marker(s) in an array
#
# shellcheck disable=SC2059
for fn in "${MK[@]}"; do
printf -v path "$TPL" "$show" "$fn"
MFILES+=("$path")
done
#
# Path to the show directory
#
SHOWDIR="$BASENAME/shownotes/hpr${show}"
#
# Report the settings in debug mode
#
_DEBUG "Called as = $0" \
"Show number = $show" \
"MK = ${MK[*]}" \
"state = $state" \
"TOGGLE = $TOGGLE" \
"MFILES = ${MFILES[*]}" \
"SHOWDIR = $SHOWDIR"
#
# We need a show directory. If it doesn't exist then we'll create it because
# other scripts will use it.
#
if [[ ! -d $SHOWDIR ]]; then
echo "${red}There is no directory for show $show${reset}"
#
# If the -Y option was not chosen ask with 'yes_no'. It -Y was chosen
# we're to go ahead regardless. This relies on the fact that Bash
# "short-circuits" logical expressions like this.
#
if [[ $YES -eq 1 ]] || yes_no 'Create directory? %s ' 'N'; then
mkdir "$SHOWDIR"
_silent "${green}Directory created for show $show${reset}"
else
_silent "${yellow}Not changed${reset}"
fi
fi
#
# If the marker exists and we can toggle it, we'll do so. If no toggle, we
# report the marker presence or set it as appropriate.
#
if exists "${MFILES[@]}"; then
if [[ $TOGGLE -eq 1 ]]; then
_silent "${yellow}Show $show has a '$state' marker${reset}"
if [[ $YES -eq 1 ]] || yes_no 'Remove marker? %s ' 'N'; then
rm -f "${MFILES[@]}"
_silent "${green}Removed '$state' marker for show $show${reset}"
else
_silent "${yellow}Not changed${reset}"
fi
else
echo "${red}Show $show is already marked '$state'${reset}"
fi
else
_silent "${yellow}Show $show has no '$state' marker${reset}"
touch "${MFILES[@]}"
_silent "${green}Marked show $show as '$state'${reset}"
fi
exit
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21