| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | #!/bin/bash - | 
					
						
							|  |  |  | #=============================================================================== | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #         FILE: do_brave | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #        USAGE: ./do_brave <epno> | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  DESCRIPTION: Run the Brave browser to view completed notes | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #      OPTIONS: --- | 
					
						
							|  |  |  | # REQUIREMENTS: --- | 
					
						
							|  |  |  | #         BUGS: 2020-06-01: New version of Brave (now called 'brave-browser') | 
					
						
							|  |  |  | #               necessitates changes in how this script was originally | 
					
						
							|  |  |  | #               designed. The softlink between hpr????.out and hpr????.html | 
					
						
							|  |  |  | #               has been converted to a hard link. | 
					
						
							|  |  |  | #        NOTES: We use a link 'do_browser' to point to whichever script runs | 
					
						
							|  |  |  | #               the preferred browser. It's been Brave for several years now, | 
					
						
							|  |  |  | #               but we haven't changed this! | 
					
						
							|  |  |  | #               2022-12-22: We now write state changes to the file .status in | 
					
						
							|  |  |  | #               the show directory, so we need to do that here too. Also | 
					
						
							|  |  |  | #               changed to using the function library for cleanup_temp. | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | #               2024-10-17: Changed the logic around 'hpr????_full.html' by | 
					
						
							|  |  |  | #               using a TT² template to enclose the usual HTML fragment in | 
					
						
							|  |  |  | #               enough HTML to make it standalone. We have to get values from | 
					
						
							|  |  |  | #               'shownotes.json' and paass them into 'tpage' to do this, and | 
					
						
							|  |  |  | #               the end result is not the same as the one generated by | 
					
						
							|  |  |  | #               'do_pandoc'. The result looks better than using the HTML | 
					
						
							|  |  |  | #               fragment. | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | #       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | #      VERSION: 0.0.6 | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | #      CREATED: 2016-03-20 15:22:29 | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | #     REVISION: 2024-10-17 19:33:42 | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | # | 
					
						
							|  |  |  | #=============================================================================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set -o nounset                              # Treat unset variables as an error | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SCRIPT=${0##*/} | 
					
						
							|  |  |  | #DIR=${0%/*} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # 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" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Basic validation | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | if [[ $# -ne 1 ]]; then | 
					
						
							|  |  |  |     echo "Usage $SCRIPT shownumber" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | epno="${1}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | # | 
					
						
							|  |  |  | # Directories and files | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | BASENAME="$HOME/HPR/Show_Submission" | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | SHOWDIR="$BASENAME/shownotes/hpr${epno}" | 
					
						
							|  |  |  | RAWNOTES="$SHOWDIR/hpr${epno}.out" | 
					
						
							|  |  |  | HTML="$SHOWDIR/hpr${epno}.html" | 
					
						
							|  |  |  | FULLHTML="$SHOWDIR/hpr${epno}_full.html" | 
					
						
							|  |  |  | SHOWNOTES="$SHOWDIR/shownotes.json" | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | STATUSFILE="$SHOWDIR/.status" | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | FORMATFILE="$SHOWDIR/.format" | 
					
						
							|  |  |  | FORMAT="$(cat "$FORMATFILE")" | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | HTMLFILE="$FULLHTML" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # Check we have this template | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | FULLTPL="$BASENAME/make_fullnotes.tpl" | 
					
						
							|  |  |  | [[ -e $FULLTPL ]] || { echo "Unable to find template $FULLTPL"; exit 1; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | # | 
					
						
							|  |  |  | # Check we have this browser | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | BRAVE=$(command -v brave-browser) | 
					
						
							|  |  |  | [[ -v BRAVE ]] || { echo "Problem finding the Brave browser"; exit 1; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  | # Taking a different approach with the 'full' html. If the format is known to | 
					
						
							|  |  |  | # be 'html5' there will not be one the first time we run this script. We will | 
					
						
							|  |  |  | # make 'hpr????_full.html' by enclosing the HTML "fragment" in 'hpr????.html' | 
					
						
							|  |  |  | # in a TT² template with HTML header and footer. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | if [[ $FORMAT = 'html5' ]]; then | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Extract the fields we want from the JSON and make them Bash variables | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     declare _author _title _summary # Declare them for shellcheck | 
					
						
							|  |  |  |     jqprog='@sh "_author=\(.host.Host_Name) ' | 
					
						
							|  |  |  |     jqprog+='_title=\(.episode.Title) ' | 
					
						
							|  |  |  |     jqprog+='_summary=\(.episode.Summary)"' | 
					
						
							|  |  |  |     eval "$(jq -r "$jqprog" "$SHOWNOTES")" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Feed the variables to the template to make the full HTML | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     tpage --define author="$_author" \ | 
					
						
							|  |  |  |         --define title="$_title" \ | 
					
						
							|  |  |  |         --define summary="$_summary" \ | 
					
						
							|  |  |  |         --define body="$HTML" \ | 
					
						
							|  |  |  |         "$FULLTPL" > "$FULLHTML" | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # See above for how we make the 'full' notes if the host sent in HTML | 
					
						
							|  |  |  |     # notes. Here we have received notes that use one of the excepted markup | 
					
						
							|  |  |  |     # formats or are plain text (≡ Pandoc Markdown). | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # If the 'full' HTML is not found (for unknown reasons) we look for | 
					
						
							|  |  |  |     # hpr????.html, which is a link to the notes from the form (hpr????.out), | 
					
						
							|  |  |  |     # and view that. If the link didn't get created (not sure why) we copy the | 
					
						
							|  |  |  |     # "raw" notes to a temporary file with an '.html' extension (TODO: we | 
					
						
							|  |  |  |     # could just make a link here). Otherwise we found nothing viewable. | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     if [[ ! -e $FULLHTML ]]; then | 
					
						
							|  |  |  |         if [[ -e $HTML ]]; then | 
					
						
							|  |  |  |             echo "No full HTML found, viewing $HTML instead" | 
					
						
							|  |  |  |             HTMLFILE="$HTML" | 
					
						
							|  |  |  |         elif [[ -e $RAWNOTES ]]; then | 
					
						
							|  |  |  |             echo "No files with ''.HTML' suffix, viewing raw notes" | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  |             TMP1=$(mktemp '/tmp/notes_XXXXXX.html') || { echo "$SCRIPT: creation of temporary file failed!"; exit 1; } | 
					
						
							|  |  |  |             trap 'cleanup_temp $TMP1' SIGHUP SIGINT SIGPIPE SIGTERM EXIT | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-01 20:45:20 +00:00
										 |  |  |             cp "$RAWNOTES" "$TMP1" | 
					
						
							|  |  |  |             HTMLFILE="$TMP1" | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             echo "Nothing to view, giving up" | 
					
						
							|  |  |  |             exit | 
					
						
							|  |  |  |         fi | 
					
						
							| 
									
										
										
										
											2024-06-04 16:35:44 +01:00
										 |  |  |     fi | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Open a parent instance of Brave (in the background), then open the HTML | 
					
						
							|  |  |  | # notes after a short delay, thereby ensuring they open in a tab rather than | 
					
						
							|  |  |  | # in another window.  Brave has great potential but documentation is a bit | 
					
						
							|  |  |  | # sparse. | 
					
						
							|  |  |  | # NOTE: We're using debug statements for the moment until this method is shown | 
					
						
							|  |  |  | # to be a good one. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # if [[ $(pgrep -u "$USER" -f '/usr/bin/brave-browser' -c) -eq 0 ]]; then | 
					
						
							|  |  |  | #     echo "D> Starting parent browser" | 
					
						
							|  |  |  | #     $BRAVE > /dev/null 2>&1 & | 
					
						
							|  |  |  | #     echo "D> Delaying ..." | 
					
						
							|  |  |  | #     sleep 3 | 
					
						
							|  |  |  | # fi | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # 2020-11-29 Looks like the parent + child model doesn't work any more (they | 
					
						
							|  |  |  | # keep changing this browser!). Also, just running the browser doesn't return | 
					
						
							|  |  |  | # to the command line any more so it seems to need to be in the background. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # echo "D> Starting browser tab" | 
					
						
							|  |  |  | echo "D> Starting browser itself" | 
					
						
							|  |  |  | $BRAVE "${HTMLFILE}" > /dev/null 2>&1 & | 
					
						
							|  |  |  | # $BRAVE "${HTMLFILE}&" | 
					
						
							|  |  |  | # $BRAVE "${HTMLFILE}" | 
					
						
							|  |  |  | RES=$? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [[ $RES -eq 0 ]]; then | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Update the status file | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     echo "rendered" >> "$STATUSFILE" || \ | 
					
						
							|  |  |  |         { echo "Failed to update $STATUSFILE"; exit 1; } | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     echo "Oops! Something went wrong!" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21 |