forked from HPR/hpr-tools
		
	
		
			
	
	
		
			198 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			198 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/bin/bash - | ||
|  | #=============================================================================== | ||
|  | # | ||
|  | #         FILE: snapshot_metadata | ||
|  | # | ||
|  | #        USAGE: ./snapshot_metadata episode_number | ||
|  | # | ||
|  | #  DESCRIPTION: Collects metadata from the IA for a given show and stores it | ||
|  | #               in the cache. | ||
|  | # | ||
|  | #      OPTIONS: --- | ||
|  | # REQUIREMENTS: --- | ||
|  | #         BUGS: --- | ||
|  | #        NOTES: --- | ||
|  | #       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com | ||
|  | #      VERSION: 0.0.2 | ||
|  | #      CREATED: 2024-08-16 20:36:51 | ||
|  | #     REVISION: 2024-08-17 10:31:15 | ||
|  | # | ||
|  | #=============================================================================== | ||
|  | 
 | ||
|  | set -o nounset                              # Treat unset variables as an error | ||
|  | 
 | ||
|  | VERSION="0.0.2" | ||
|  | 
 | ||
|  | SCRIPT=${0##*/} | ||
|  | # DIR=${0%/*} | ||
|  | 
 | ||
|  | STDOUT="/dev/fd/2" | ||
|  | 
 | ||
|  | # | ||
|  | # Select the appropriate working directory for the host | ||
|  | # | ||
|  | case $(hostname) in | ||
|  |     i7-desktop) | ||
|  |         BASEDIR="$HOME/HPR/InternetArchive" | ||
|  |         ;; | ||
|  |     borg) | ||
|  |         BASEDIR="$HOME/IA" | ||
|  |         ;; | ||
|  |     *) | ||
|  |         echo "Wrong host!" | ||
|  |         exit 1 | ||
|  |         ;; | ||
|  | esac | ||
|  | 
 | ||
|  | cd "$BASEDIR" || { echo "Failed to cd to $BASEDIR"; exit 1; } | ||
|  | 
 | ||
|  | # | ||
|  | # Load library functions | ||
|  | # | ||
|  | LIB="$HOME/HPR/function_lib.sh" | ||
|  | [ -e "$LIB" ] || { echo "Unable to source functions"; exit; } | ||
|  | # shellcheck disable=SC1090 | ||
|  | source "$LIB" | ||
|  | 
 | ||
|  | # | ||
|  | # Enable coloured messages | ||
|  | # | ||
|  | define_colours | ||
|  | 
 | ||
|  | # | ||
|  | # Sanity checks | ||
|  | # | ||
|  | IA=$(command -v ia) | ||
|  | [ -n "$IA" ] || { echo "Program 'ia' was not found"; exit 1; } | ||
|  | VIEWD="$BASEDIR/view_derivatives" | ||
|  | [ -e "$VIEWD" ] || { echo "Program '$VIEWD' was not found"; exit 1; } | ||
|  | 
 | ||
|  | # {{{ -- Functions -- _usage | ||
|  | 
 | ||
|  | #===  FUNCTION  ================================================================ | ||
|  | #         NAME: make_dir | ||
|  | #  DESCRIPTION: Make a directory if it doesn't exist, failing gracefully on | ||
|  | #               errors. | ||
|  | #   PARAMETERS: $1      directory path | ||
|  | #      RETURNS: True if success, otherwise exits the caller script | ||
|  | #=============================================================================== | ||
|  | make_dir () { | ||
|  |     local dir="${1}" | ||
|  | 
 | ||
|  |     if [[ ! -d $dir ]]; then | ||
|  |         mkdir -p "$dir" || { | ||
|  |             coloured 'red' "Failed to create $dir" | ||
|  |             exit 1 | ||
|  |         } | ||
|  |     fi | ||
|  | } | ||
|  | 
 | ||
|  | #===  FUNCTION  ================================================================ | ||
|  | #         NAME: _usage | ||
|  | #  DESCRIPTION: Reports usage; always exits the script after doing so | ||
|  | #   PARAMETERS: 1 - the integer to pass to the 'exit' command | ||
|  | #      RETURNS: Nothing | ||
|  | #=============================================================================== | ||
|  | _usage () { | ||
|  |     local -i result=${1:-0} | ||
|  | 
 | ||
|  |     cat >$STDOUT <<-endusage | ||
|  | ${SCRIPT} - version: ${VERSION} | ||
|  | 
 | ||
|  | Usage: ./${SCRIPT} showid | ||
|  | 
 | ||
|  | Collects notes for a show and adds them to the cache directory | ||
|  | 
 | ||
|  | Arguments: | ||
|  |     showid              The show id in the form 'hpr1234' | ||
|  | 
 | ||
|  | endusage | ||
|  |     exit "$result" | ||
|  | } | ||
|  | 
 | ||
|  | # }}} | ||
|  | 
 | ||
|  | #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|  | 
 | ||
|  | #------------------------------------------------------------------------------- | ||
|  | # Argument check | ||
|  | #------------------------------------------------------------------------------- | ||
|  | # Should have one argument | ||
|  | # | ||
|  | if [[ $# != 1 ]]; then | ||
|  |     coloured 'red' "Missing argument" | ||
|  |     _usage 1 | ||
|  | fi | ||
|  | show="${1,,}" | ||
|  | 
 | ||
|  | # | ||
|  | # Ensure show id is correctly formatted. We want it to be 'hpr1234' | ||
|  | # | ||
|  | if [[ $show =~ (hpr)?([0-9]+) ]]; then | ||
|  |     printf -v show 'hpr%04d' "${BASH_REMATCH[2]}" | ||
|  | else | ||
|  |     coloured 'red' "Incorrect show specification: $show" | ||
|  |     coloured 'yellow' "Use 'hpr9999' or '9999' format" | ||
|  |     exit 1 | ||
|  | fi | ||
|  | 
 | ||
|  | 
 | ||
|  | #------------------------------------------------------------------------------- | ||
|  | # Setting up paths | ||
|  | #------------------------------------------------------------------------------- | ||
|  | # | ||
|  | # CACHEDIR is where we store asset details and files | ||
|  | # | ||
|  | CACHEDIR="$BASEDIR/assets" | ||
|  | [ ! -d "$CACHEDIR" ] && { | ||
|  |     coloured 'red' "Creating cache directory" | ||
|  |     make_dir "$CACHEDIR" | ||
|  | } | ||
|  | 
 | ||
|  | # | ||
|  | # Pointers into the cache: | ||
|  | # LOCAL_ASSETDIR  - where the cache for this show lives | ||
|  | # | ||
|  | LOCAL_ASSETDIR="$CACHEDIR/${show}" | ||
|  | [ ! -d "$LOCAL_ASSETDIR" ] && { | ||
|  |     coloured 'green' "Creating cache directory for $show" | ||
|  |     make_dir "$LOCAL_ASSETDIR" | ||
|  | } | ||
|  | 
 | ||
|  | METADATA="$CACHEDIR/$show/metadata.json" | ||
|  | DERIVED="$CACHEDIR/$show/derived.lis" | ||
|  | 
 | ||
|  | #------------------------------------------------------------------------------- | ||
|  | # Save the IA metadata unless we already have the file | ||
|  | #------------------------------------------------------------------------------- | ||
|  | if [[ ! -e $METADATA ]]; then | ||
|  |     if ia metadata "$show" > "$METADATA"; then | ||
|  |         coloured 'green' "Created metadata file" | ||
|  |         if [[ ! -s $METADATA ]]; then | ||
|  |             coloured 'red' "Metadata file is empty" | ||
|  |         fi | ||
|  |     else | ||
|  |         coloured 'red' "Creation of metadata file failed" | ||
|  |         exit 1 | ||
|  |     fi | ||
|  | else | ||
|  |     coloured 'yellow' "Metadata already exists, not replacing it" | ||
|  | fi | ||
|  | 
 | ||
|  | #------------------------------------------------------------------------------- | ||
|  | # Use the collected metadata to view the state of the IA, and collect the derived file names | ||
|  | #------------------------------------------------------------------------------- | ||
|  | coloured 'blue' "Viewing IA files" | ||
|  | "$VIEWD" -verb "$METADATA" | ||
|  | 
 | ||
|  | if "$VIEWD" -list "$METADATA" > "$DERIVED"; then | ||
|  |     nfiles="$(wc -l < "$DERIVED")" | ||
|  |     coloured 'green' "Saved 'derived' files for show $show ($nfiles)" | ||
|  | else | ||
|  |     coloured 'red' "Creation of $DERIVED file failed" | ||
|  | fi | ||
|  | 
 | ||
|  | exit | ||
|  | 
 | ||
|  | # vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21:fdm=marker |