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
							 | 
						||
| 
								 | 
							
								
							 |