| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | #!/bin/bash - | 
					
						
							|  |  |  | #=============================================================================== | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #         FILE: do_update_reservations | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #        USAGE: ./do_update_reservations <epno> | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  DESCRIPTION: Script to update the status in the 'reservations' table after | 
					
						
							|  |  |  | #               a show has been processed. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #      OPTIONS: --- | 
					
						
							|  |  |  | # REQUIREMENTS: --- | 
					
						
							|  |  |  | #         BUGS: --- | 
					
						
							|  |  |  | #        NOTES: --- | 
					
						
							|  |  |  | #       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com | 
					
						
							|  |  |  | #      VERSION: 0.0.6 | 
					
						
							|  |  |  | #      CREATED: 2022-04-11 09:36:21 | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | #     REVISION: 2024-06-18 20:16:19 | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | # | 
					
						
							|  |  |  | #=============================================================================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | LIB="$HOME/HPR/function_lib.sh" | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | [ -e "$LIB" ] || { echo "$SCRIPT: Unable to source functions"; exit 1; } | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | # shellcheck source=/home/cendjm/HPR/function_lib.sh | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | source "$LIB" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Colour codes | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | define_colours | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #{{{ Functions: --- _usage --- | 
					
						
							|  |  |  | #===  FUNCTION  ================================================================ | 
					
						
							|  |  |  | #         NAME: _usage | 
					
						
							|  |  |  | #  DESCRIPTION: Report usage | 
					
						
							|  |  |  | #   PARAMETERS: None | 
					
						
							|  |  |  | #      RETURNS: Nothing | 
					
						
							|  |  |  | #=============================================================================== | 
					
						
							|  |  |  | _usage () { | 
					
						
							|  |  |  |     cat >$STDOUT <<-endusage | 
					
						
							|  |  |  | Usage: ./${SCRIPT} [-h] [-d] [-m] shownumber | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Version: $VERSION | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Script to update the status in the 'reservations' table after a show has been | 
					
						
							|  |  |  | processed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Options: | 
					
						
							|  |  |  |   -h            Print this help | 
					
						
							|  |  |  |   -d            Dry-run mode. Reports what it will do but doesn't do it | 
					
						
							|  |  |  |   -m            Monochrome mode - no colours | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Arguments: | 
					
						
							|  |  |  |     shownumber | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Examples | 
					
						
							|  |  |  |   ./${SCRIPT} -h | 
					
						
							|  |  |  |   ./${SCRIPT} -m 3112 | 
					
						
							|  |  |  |   ./${SCRIPT} -d 3112 | 
					
						
							|  |  |  |   ./${SCRIPT} -dm 3112 | 
					
						
							|  |  |  |   ./${SCRIPT} 3112 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | endusage | 
					
						
							|  |  |  |     exit | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #}}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Paths to files | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | BASENAME="$HOME/HPR/Show_Submission" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Tools | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | BASECOM='curl -K ./.hpradmin_curlrc -s' | 
					
						
							|  |  |  | URL="https://hub.hackerpublicradio.org/cms/status.php" | 
					
						
							|  |  |  | QUERY="${BASECOM} ${URL}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Option defaults | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | COLOUR=1 # use colours by default | 
					
						
							|  |  |  | DRYRUN=0 # live mode by default | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Process options | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | while getopts :hdm opt | 
					
						
							|  |  |  | do | 
					
						
							|  |  |  |     case "${opt}" in | 
					
						
							|  |  |  |         h) _usage;; | 
					
						
							|  |  |  |         d) DRYRUN=1;; | 
					
						
							|  |  |  |         m) COLOUR=0;; | 
					
						
							|  |  |  |         ?) echo "$SCRIPT: Invalid option; aborting"; exit 1;; | 
					
						
							|  |  |  |     esac | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | shift $((OPTIND - 1)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Cancel colours if requested | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | if [[ $COLOUR -eq 0 ]]; then | 
					
						
							|  |  |  |     undefine_colours | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Check the argument after any options | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | if [[ $# -ne 1 ]]; then | 
					
						
							|  |  |  |     echo "$SCRIPT: ${red}Usage: $SCRIPT shownumber${reset}" | 
					
						
							|  |  |  |     exit | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | epno="$1" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SHOWDIR="$BASENAME/shownotes/hpr${epno}" | 
					
						
							|  |  |  | STATUSFILE="$SHOWDIR/.status" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Check the show in question exists | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | if [[ ! -d $SHOWDIR ]]; then | 
					
						
							|  |  |  |     echo "$SHOWDIR not found, can't continue" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Check the show is in the correct state of local processing | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | declare -a states | 
					
						
							|  |  |  | states+=( '+dir' ) | 
					
						
							|  |  |  | if [[ -e "$SHOWDIR/shownotes.json" ]]; then | 
					
						
							|  |  |  |     states+=( '+shownotes' ) | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | if [[ -e "$SHOWDIR/hpr${epno}.html" ]]; then | 
					
						
							|  |  |  |     states+=( '+processed' ) | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | if [[ -e "$SHOWDIR/.uploaded" ]]; then | 
					
						
							|  |  |  |     states+=( '+uploaded' ) | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | echo "${green}Current state: ${states[*]}${reset}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if ! grep -q -E '\+uploaded' <<<"${states[@]}"; then | 
					
						
							|  |  |  |     echo "The show is not in the +uploaded state" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Run the query with 'curl' and filter out this episode | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | reply="$(${QUERY} | grep -E "^[^,]+,$epno" )" | 
					
						
							|  |  |  | # echo "D> $reply" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # If we found the episode in the list we need to test further | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | if [[ -n $reply ]]; then | 
					
						
							|  |  |  |     echo "Found $epno in 'reservations'" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Get the current state in the database by parsing the line returned. | 
					
						
							|  |  |  |     # Since Ken changed this out of the blue we now have: | 
					
						
							|  |  |  |     # 1. Epoch timestamp | 
					
						
							|  |  |  |     # 2. Episode number | 
					
						
							|  |  |  |     # 3. Episode date | 
					
						
							|  |  |  |     # 4. Key | 
					
						
							|  |  |  |     # 5. Status | 
					
						
							|  |  |  |     # 6. Email | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     if [[ $reply =~ ^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),.*$ ]]; then | 
					
						
							|  |  |  |         state="${BASH_REMATCH[5]}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # | 
					
						
							|  |  |  |         # If it's aready in the desired state we're finished, otherwise we'll | 
					
						
							|  |  |  |         # set the new state | 
					
						
							|  |  |  |         # | 
					
						
							|  |  |  |         if [[ $state == 'METADATA_PROCESSED' ]]; then | 
					
						
							|  |  |  |             echo "Already marked ${blue}${state}${reset}" | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             echo "Ready for marking" | 
					
						
							|  |  |  |             command="${BASECOM} ${URL}?ep_num=${epno}&status=METADATA_PROCESSED" | 
					
						
							|  |  |  |             if [[ $DRYRUN -eq 1 ]]; then | 
					
						
							|  |  |  |                 echo -e "Dry-run: would have run\n${yellow}$command${reset}" | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |                 echo "${yellow}$command${reset}" | 
					
						
							|  |  |  |                 $command | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 # | 
					
						
							|  |  |  |                 # Change state/log what we did | 
					
						
							|  |  |  |                 # | 
					
						
							|  |  |  |                 echo "database" >> "$STATUSFILE" || \ | 
					
						
							|  |  |  |                     { echo "Failed to update $STATUSFILE"; exit 1; } | 
					
						
							|  |  |  |             fi | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         echo "Couldn't parse '$reply'; aborting" | 
					
						
							|  |  |  |         exit 1 | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # We have no record of this show locally | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     echo "Not found $epno" | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21:fdm=marker | 
					
						
							|  |  |  | 
 |