303 lines
7.8 KiB
Plaintext
303 lines
7.8 KiB
Plaintext
|
#!/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
|