forked from HPR/hpr-tools
		
	
		
			
	
	
		
			228 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			228 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/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 | ||
|  | #     REVISION: 2023-06-14 23:24:42 | ||
|  | # | ||
|  | #=============================================================================== | ||
|  | 
 | ||
|  | 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 | ||
|  | 
 | ||
|  | #{{{ 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 | ||
|  | 
 |