forked from HPR/hpr-tools
		
	InternetArchive/future_upload: Added logging and debugging
InternetArchive/ia_db.sql: Added new tables
InternetArchive/recover_transcripts: New script to run on 'borg' and
    copy missing files from the backup disk to the IA
InternetArchive/repair_assets: More comments, including one about a bug in the design.
InternetArchive/repair_item: Fix relating to octal numbers (if there are
    leading zeroes in a number). '_DEBUG' is now in the function
    library. Added comments to explain obscure stuff.
InternetArchive/snapshot_metadata: New Bash script (to run on my
    desktop) which collects metadata for a show and stores in in the
    '~/HPR/IA/assets' directory. Runs 'view_derivatives' on it to find
    derivative files for deletion.
InternetArchive/tidy_uploaded: Moves files and directories containing
    uploaded files into a holding area for later backup. Added
    debugging, logging and a 'force' mode.
InternetArchive/upload_manager: Manages 'ia.db' (on my workstation).
    Needs many updates which have just started to be added.
InternetArchive/weekly_upload: Old script, now obsolete.
		
	
		
			
				
	
	
		
			198 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 |