forked from HPR/hpr-tools
		
	
		
			
	
	
		
			175 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			175 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/bin/bash - | ||
|  | #=============================================================================== | ||
|  | # | ||
|  | #         FILE: do_change_format | ||
|  | # | ||
|  | #        USAGE: ./do_change_format <epno> | ||
|  | # | ||
|  | #  DESCRIPTION: Changes the declared format of a show. Mainly useful to change | ||
|  | #               'markdown_standard' (largely useless) to 'Markdown_Pandoc', | ||
|  | #               but can be used to override notes declared as 'html5' when | ||
|  | #               they are 'plain_text'. | ||
|  | #               2022-12-22: Now using only shownotes.json, writing the new | ||
|  | #               value to the .format file and writing status changes to the | ||
|  | #               .status file. DOES NOT update the JSON. | ||
|  | # | ||
|  | #      OPTIONS: --- | ||
|  | # REQUIREMENTS: --- | ||
|  | #         BUGS: --- | ||
|  | #        NOTES: --- | ||
|  | #       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com | ||
|  | #      VERSION: 0.0.4 | ||
|  | #      CREATED: 2018-12-06 11:11:30 | ||
|  | #     REVISION: 2024-02-13 20:33:42 | ||
|  | # | ||
|  | #=============================================================================== | ||
|  | 
 | ||
|  | set -o nounset                              # Treat unset variables as an error | ||
|  | 
 | ||
|  | SCRIPT=${0##*/} | ||
|  | #DIR=${0%/*} | ||
|  | 
 | ||
|  | VERSION='0.0.4' | ||
|  | 
 | ||
|  | # | ||
|  | # Load library functions (make_file_list, range_parse, cleanup_temp) | ||
|  | # | ||
|  | 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" | ||
|  | 
 | ||
|  | # | ||
|  | # Check the argument after any options | ||
|  | # | ||
|  | if [[ $# -ne 1 ]]; then | ||
|  |     echo "$SCRIPT ($VERSION): Usage $SCRIPT shownumber" | ||
|  |     exit | ||
|  | fi | ||
|  | 
 | ||
|  | # | ||
|  | # Paths to files | ||
|  | # | ||
|  | BASENAME="$HOME/HPR/Show_Submission" | ||
|  | SHOWDIR="$BASENAME/shownotes/hpr${1}" | ||
|  | FORMAT="$SHOWDIR/.format" | ||
|  | FROM="$SHOWDIR/shownotes.json" | ||
|  | STATUSFILE="$SHOWDIR/.status" | ||
|  | JSONNOTES="$SHOWDIR/shownotes.json" | ||
|  | JSONORIG="$SHOWDIR/shownotes.json.orig" | ||
|  | RELEASE="$SHOWDIR/.release" | ||
|  | ORIGIN="$SHOWDIR/.origin" | ||
|  | DEST="hpr@hackerpublicradio.org:upload" | ||
|  | SSHPORT=22 | ||
|  | 
 | ||
|  | # | ||
|  | # Collect the place to write results and the release date | ||
|  | # | ||
|  | upload_dir=$(cat "$ORIGIN") | ||
|  | release_date=$(cat "$RELEASE") | ||
|  | 
 | ||
|  | # | ||
|  | # The permitted formats as defined in the web form | ||
|  | # | ||
|  | declare -A formats | ||
|  | formats[plain_text]='FALSE' | ||
|  | formats[html5]='FALSE' | ||
|  | formats[markdown_standard]='FALSE' | ||
|  | formats[Markdown_GitHub]='FALSE' | ||
|  | formats[Markdown_Pandoc]='FALSE' | ||
|  | formats[restructured_text]='FALSE' | ||
|  | formats[txt2tags]='FALSE' | ||
|  | 
 | ||
|  | # | ||
|  | # Check that we actually have notes for this show, and they aren't empty | ||
|  | # | ||
|  | if [[ -e $FROM ]]; then | ||
|  |     if [[ ! -s $FROM ]]; then | ||
|  |         echo "File $FROM is empty" | ||
|  |         exit 1 | ||
|  |     fi | ||
|  | else | ||
|  |     echo "$SCRIPT: File not found: $FROM" | ||
|  |     exit 1 | ||
|  | fi | ||
|  | 
 | ||
|  | # | ||
|  | # Make temporary files and set traps to delete them. | ||
|  | # | ||
|  | # TMP1 - HTML header | ||
|  | # | ||
|  | TMP1=$(mktemp) || { | ||
|  |     echo "$SCRIPT: creation of temporary file failed!" | ||
|  |     exit 1 | ||
|  | } | ||
|  | trap 'cleanup_temp $TMP1' SIGHUP SIGINT SIGPIPE SIGTERM EXIT | ||
|  | 
 | ||
|  | # | ||
|  | # Record the current format | ||
|  | # | ||
|  | FFORMAT="$(cat "$FORMAT")" | ||
|  | formats[$FFORMAT]='TRUE' | ||
|  | 
 | ||
|  | #     for k in $(printf '%s\n' "${!formats[@]}" | sort); do | ||
|  | #         printf 'D> %18s: %s\n' "$k"  "${formats[$k]}" | ||
|  | #     done | ||
|  | 
 | ||
|  | # | ||
|  | # Generate a Zenity list box with radio buttons. Show current setting and | ||
|  | # allow any other to be selected to replace it. | ||
|  | # | ||
|  | newfmt=$(for k in $(printf '%s\n' "${!formats[@]}" | sort); do | ||
|  |     printf '%s\n%s\n' "${formats[$k]}" "$k"; done |\ | ||
|  |     zenity --list --radiolist --height=300 --width=300 \ | ||
|  |     --column=Choice --title="Change format of notes" \ | ||
|  |     --text="Choose format" --column=Format 2> /dev/null) ||\ | ||
|  |     { echo "Cancelled"; exit; } | ||
|  | #     echo "D> $newfmt" | ||
|  | 
 | ||
|  | # | ||
|  | # If there was a change save the new value | ||
|  | # | ||
|  | if [[ $newfmt != "$FFORMAT" ]]; then | ||
|  |     echo "Changing format to '$newfmt'" | ||
|  | 
 | ||
|  |     # | ||
|  |     # Update .format | ||
|  |     # | ||
|  |     echo "$newfmt" > "$FORMAT" | ||
|  | 
 | ||
|  |     # | ||
|  |     # Update the JSON | ||
|  |     # | ||
|  |     cp "$FROM" "${FROM}.orig" | ||
|  |     cp "$FROM" "$TMP1" | ||
|  |     jq -c --arg new "$newfmt" \ | ||
|  |         '(.metadata.POST.shownotes_format,.metadata.Shownotes_Format) |= $new' \ | ||
|  |         "$TMP1" > "$FROM" | ||
|  | 
 | ||
|  |     # | ||
|  |     # Upload updated JSON to the server, but only if the release date is in | ||
|  |     # the future | ||
|  |     # | ||
|  |     rd=$(date -d "$release_date" +%s) | ||
|  |     now=$(date +%s) | ||
|  |     if [[ $((rd - now)) -gt 0 ]]; then | ||
|  |         echo "Copying $JSONNOTES to upload/$upload_dir/shownotes.json on the HPR server" | ||
|  |         echo "Copying $JSONORIG to upload/$upload_dir/shownotes.json.orig on the HPR server" | ||
|  |         scp -P $SSHPORT "$JSONNOTES" "$JSONORIG" "$DEST/$upload_dir/" | ||
|  |     else | ||
|  |         echo "JSON files not uploaded to the server" | ||
|  |         echo "The release date $release_date is in the past!" | ||
|  |     fi | ||
|  | 
 | ||
|  |     # | ||
|  |     # Update the status file | ||
|  |     # | ||
|  |     echo "format" >> "$STATUSFILE" || \ | ||
|  |         { echo "Failed to update $STATUSFILE"; exit 1; } | ||
|  | fi | ||
|  | 
 | ||
|  | exit | ||
|  | 
 | ||
|  | # vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21 | ||
|  | 
 |