183 lines
4.9 KiB
Plaintext
183 lines
4.9 KiB
Plaintext
|
#!/bin/bash -
|
||
|
#===============================================================================
|
||
|
#
|
||
|
# FILE: generate_asset_list
|
||
|
#
|
||
|
# USAGE: ./generate_asset_list episode [episode [episode ...]]
|
||
|
#
|
||
|
# DESCRIPTION: Produces SQL for uploading assets for a show without them.
|
||
|
# This is very rough and ready and can only be run on 'borg'
|
||
|
# with access to the 'uploads' and 'done' directories. It's
|
||
|
# based on Ken Fallon's suggested way of doing this, but has
|
||
|
# been adjusted somewhat.
|
||
|
#
|
||
|
# 2023-08-17: Modified to accept multiple episodes per run.
|
||
|
#
|
||
|
# OPTIONS: ---
|
||
|
# REQUIREMENTS: ---
|
||
|
# BUGS: ---
|
||
|
# NOTES: ---
|
||
|
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
||
|
# VERSION: 0.0.4
|
||
|
# CREATED: 2023-06-26 21:50:14
|
||
|
# REVISION: 2023-08-18 00:00:13
|
||
|
#
|
||
|
#===============================================================================
|
||
|
|
||
|
set -o nounset # Treat unset variables as an error
|
||
|
|
||
|
SCRIPT=${0##*/}
|
||
|
# DIR=${0%/*}
|
||
|
|
||
|
# VERSION="0.0.4"
|
||
|
|
||
|
#
|
||
|
# Needs an argument
|
||
|
#
|
||
|
if [[ $# -eq 0 ]]; then
|
||
|
echo "Usage: $SCRIPT episode [episode [episode ...]]"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
#
|
||
|
# Make temporary files and set traps to delete them
|
||
|
#
|
||
|
TMP1=$(mktemp) || { echo "$SCRIPT: creation of temporary file failed!"; exit 1; }
|
||
|
trap 'cleanup_temp $TMP1' SIGHUP SIGINT SIGPIPE SIGTERM EXIT
|
||
|
|
||
|
#
|
||
|
# Configure depending whether local or on borg
|
||
|
#
|
||
|
case $HOSTNAME in
|
||
|
borg)
|
||
|
BASEDIR="$HOME/IA"
|
||
|
UPLOADS="/data/IA/uploads"
|
||
|
DONE="/data/IA/done"
|
||
|
;;
|
||
|
i7-desktop)
|
||
|
BASEDIR="$HOME/HPR/IA"
|
||
|
UPLOADS="$BASEDIR/uploads"
|
||
|
DONE="$BASEDIR/done"
|
||
|
;;
|
||
|
*)
|
||
|
echo "Wrong host!"
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
#
|
||
|
# It's easiest to work here
|
||
|
#
|
||
|
cd "$BASEDIR" || { echo "Failed to cd to $BASEDIR"; exit 1; }
|
||
|
|
||
|
#=== FUNCTION ================================================================
|
||
|
# NAME: cleanup_temp
|
||
|
# DESCRIPTION: Cleanup temporary files in case of a keyboard interrupt
|
||
|
# (SIGINT) or a termination signal (SIGTERM) and at script
|
||
|
# exit
|
||
|
# PARAMETERS: * - names of temporary files to delete
|
||
|
# RETURNS: Nothing
|
||
|
#===============================================================================
|
||
|
function cleanup_temp {
|
||
|
for tmp; do
|
||
|
[ -e "$tmp" ] && rm --force "$tmp"
|
||
|
done
|
||
|
exit 0
|
||
|
}
|
||
|
|
||
|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
#
|
||
|
# Count number of arguments processed
|
||
|
#
|
||
|
argcount=0
|
||
|
|
||
|
#
|
||
|
# Loop through arguments
|
||
|
#
|
||
|
for arg; do
|
||
|
failed=0
|
||
|
|
||
|
#
|
||
|
# Accept a bare number or 'hpr<number>'. Parse out the pieces we'll need later
|
||
|
#
|
||
|
if [[ $arg =~ (hpr)?([0-9]{1,4}) ]]; then
|
||
|
printf -v show 'hpr%04d' "${BASH_REMATCH[2]}"
|
||
|
printf -v episode_id '%d' "${BASH_REMATCH[2]}"
|
||
|
else
|
||
|
echo "Argument '$arg' must be '<number>' or hpr<number>'"
|
||
|
echo "Skipping this argument"
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
#
|
||
|
# Argument is OK, so prepare for the inner loop
|
||
|
#
|
||
|
echo 'INSERT INTO assets (episode_id,filename,extension,size,sha1sum,mime_type,file_type) VALUES' >> "$TMP1"
|
||
|
|
||
|
#
|
||
|
# Loop through the audio types. Keep in this order since the 'wav'
|
||
|
# extension needs to be the last one.
|
||
|
#
|
||
|
for extension in mp3 ogg spx flac opus wav; do
|
||
|
|
||
|
f1="$UPLOADS/${show}.${extension}"
|
||
|
f2="$DONE/${show}.${extension}"
|
||
|
|
||
|
#
|
||
|
# Find the file in either of the two directories.
|
||
|
# If any file type in the list is missing abort.
|
||
|
# TODO: This will leave a partial output which isn't good!
|
||
|
#
|
||
|
if [[ -f "$f1" ]]; then
|
||
|
filename="$f1"
|
||
|
elif [[ -f "$f2" ]]; then
|
||
|
filename="$f2"
|
||
|
else
|
||
|
echo "Can't find $f1 or $f2"
|
||
|
echo "Aborting the processing of $show"
|
||
|
failed=1
|
||
|
break
|
||
|
fi
|
||
|
|
||
|
#
|
||
|
# Collect file statistics and attributes
|
||
|
#
|
||
|
size="$( stat --printf='%s' "${filename}" )"
|
||
|
sha1sum="$( sha1sum "${filename}" | cut -f1 -d' ' )"
|
||
|
mime_type=$( file --dereference --brief --mime "${filename}" )
|
||
|
file_type=$( file --dereference --brief "${filename}" )
|
||
|
|
||
|
#
|
||
|
# Generate the next list of values to insert
|
||
|
#
|
||
|
printf "(%s,'%s','%s',%s,'%s','%s','%s')" \
|
||
|
"${episode_id}" "${show}.${extension}" "${extension}" "${size}" "${sha1sum}" "${mime_type}" "${file_type}" >> "$TMP1"
|
||
|
|
||
|
#
|
||
|
# End with a comma or a semicolon
|
||
|
#
|
||
|
if [[ $extension == 'wav' ]]; then
|
||
|
echo ";" >> "$TMP1"
|
||
|
else
|
||
|
echo "," >> "$TMP1"
|
||
|
fi
|
||
|
|
||
|
done
|
||
|
|
||
|
#
|
||
|
# Add the `UPDATE` too, unless we failed to find a file and aborted.
|
||
|
#
|
||
|
if [[ $failed -eq 0 ]]; then
|
||
|
printf 'UPDATE eps SET valid = 1 WHERE id = %s;\n' "${episode_id}" >> "$TMP1"
|
||
|
((argcount++))
|
||
|
fi
|
||
|
|
||
|
done
|
||
|
|
||
|
if [[ $argcount -gt 0 ]]; then
|
||
|
cat "$TMP1"
|
||
|
fi
|
||
|
|
||
|
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21
|