2024-08-22 12:13:38 +00:00
|
|
|
#!/bin/bash -
|
|
|
|
#===============================================================================
|
|
|
|
#
|
|
|
|
# FILE: snapshot_metadata
|
|
|
|
#
|
|
|
|
# USAGE: ./snapshot_metadata episode_number
|
|
|
|
#
|
2024-11-23 22:28:52 +00:00
|
|
|
# DESCRIPTION: Collects JSON metadata from the IA for a given show and stores
|
|
|
|
# it in the cache. Runs 'view_derivatives' on the JSON to
|
|
|
|
# display the derivatives if any, and to save their names if
|
|
|
|
# found, for deletion.
|
|
|
|
# Deletion is performed thus (external to this script):
|
|
|
|
#
|
|
|
|
# cat assets/hpr$(./next_repair)/derived.lis | xargs ia delete hpr$(./next_repair) --no-backup
|
2024-08-22 12:13:38 +00:00
|
|
|
#
|
|
|
|
# OPTIONS: ---
|
|
|
|
# REQUIREMENTS: ---
|
|
|
|
# BUGS: ---
|
|
|
|
# NOTES: ---
|
|
|
|
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
2024-11-23 22:28:52 +00:00
|
|
|
# VERSION: 0.0.3
|
2024-08-22 12:13:38 +00:00
|
|
|
# CREATED: 2024-08-16 20:36:51
|
2024-11-23 22:28:52 +00:00
|
|
|
# REVISION: 2024-10-02 17:40:13
|
2024-08-22 12:13:38 +00:00
|
|
|
#
|
|
|
|
#===============================================================================
|
|
|
|
|
|
|
|
set -o nounset # Treat unset variables as an error
|
|
|
|
|
2024-11-23 22:28:52 +00:00
|
|
|
VERSION="0.0.3"
|
2024-08-22 12:13:38 +00:00
|
|
|
|
|
|
|
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,,}"
|
|
|
|
|
|
|
|
#
|
2024-11-23 22:28:52 +00:00
|
|
|
# Ensure show id is correctly formatted. We want it to be 'hpr1234' but we
|
|
|
|
# allow the 'hpr' bit to be omitted, as well as any leading zeroes. We need to
|
|
|
|
# handle the weirdness of "leading zero means octal" though, but we always
|
|
|
|
# store it as 'hpr1234' once processed.
|
2024-08-22 12:13:38 +00:00
|
|
|
#
|
|
|
|
if [[ $show =~ (hpr)?([0-9]+) ]]; then
|
2024-11-23 22:28:52 +00:00
|
|
|
printf -v show 'hpr%04d' "$((10#${BASH_REMATCH[2]}))"
|
2024-08-22 12:13:38 +00:00
|
|
|
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
|