forked from HPR/hpr-tools
		
	Moved project directories and files to an empty local repo
This commit is contained in:
		
							
								
								
									
										302
									
								
								Show_Submission/do_state_change
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										302
									
								
								Show_Submission/do_state_change
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,302 @@ | ||||
| #!/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 | ||||
		Reference in New Issue
	
	Block a user