AtOM/lib/config/getDestination

239 lines
5.9 KiB
Bash

#!/bin/bash
getConfigDestination() {
case "$key" in
'enabled')
# 1 = process this destination, 0 = skip it
destinationenabled["$destination"]="$value"
;;
'path')
# Strip trailing slash for consistency
destinationpath["$destination"]="${value%/}"
;;
'format')
case "$value" in
'mp3')
destinationformat["$destination"]=mp3
# Flag that lame must be present
lameneeded=1
# MP3 can't handle more than 2 channels
[[ -z ${destinationchannels["$destination"]} ]] \
&& destinationchannels["$destination"]=2
;;
'opus')
destinationformat["$destination"]=opus
# Flag that opusenc must be present
opusencneeded=1
;;
'vorbis')
destinationformat["$destination"]=vorbis
# Flag that oggenc must be present
oggencneeded=1
;;
'copy')
# Files are copied/hardlinked as-is
destinationformat["$destination"]=copy
;;
*)
echo "Unsupported destination format: $value" >&2
exit $EFORMAT
;;
esac
;;
'quality')
# Vorbis-only: oggenc quality scale (integer, typically 0-10)
expr='^[0-9]*$'
if ! [[ $value =~ $expr ]]
then
echo "Invalid quality value: $value" >&2
exit $EQUALITY
fi
unset expr
case "${destinationformat["$destination"]}" in
'vorbis')
destinationquality["$destination"]="$value"
;;
*)
echo "Invalid parameter '$key' for" \
"format" \
"'${destinationformat["$destination"]}'" >&2
exit $EFMTINVPARM
;;
esac
;;
'normalize')
# Whether to normalize audio volume (via sox --norm)
case $value in
'true'|'on'|'yes'|'1')
destinationnormalize["$destination"]=1
;;
'false'|'off'|'no'|'0')
destinationnormalize["$destination"]=0
;;
*)
echo "normalize takes values:" \
"'yes' ,'true' ,'on', '1', 'no'," \
"'false','off', '0'"
;;
esac
;;
'bitrate')
# Opus/MP3: target bitrate in kbps
# integer only; Bash doesn't support floats
expr='^[0-9]*$'
if ! [[ $value =~ $expr ]]
then
echo "Invalid bitrate value: $value" >&2
exit $EQUALITY
fi
unset expr
case "${destinationformat["$destination"]}" in
'opus')
destinationquality["$destination"]="$value"
;;
'mp3')
destinationquality["$destination"]="$value"
;;
*)
echo "$Invalid parameter \"$key\" for format \"${destinationformat["$destination"]}\"" >&2
exit $EFMTINVPARM
;;
esac
;;
'loss')
# Opus Forward Error Correction: expected packet loss percentage (0-100)
expr='^[0-9]*$'
if ! [[ $value =~ $expr ]]
then
echo "Invalid loss value: $value" >&2
exit $EQUALITY
fi
unset expr
case "${destinationformat["$destination"]}" in
'opus')
destinationloss["$destination"]="$value"
;;
*)
echo "Invalid parameter '$key' for" \
"format" \
"'${destinationformat["$destination"]}'" >&2
exit $EFMTINVPARM
;;
esac
;;
'channels')
# Up/downmix to this many channels if needed
expr='^[0-9]*$'
if ! [[ $value =~ $expr ]]
then
echo "Invalid channel count: $value" >&2
exit $ECHANNEL
fi
unset expr
destinationchannels["$destination"]=$value
;;
'frequency')
# Resample to this sample rate in Hz (e.g. 44100)
expr='^[0-9]*$'
if ! [[ $value =~ $expr ]]
then
echo "Invalid frequency value: $value" >&2
exit $ECHANNEL
fi
unset expr
destinationfrequency["$destination"]=$value
;;
'noresample')
# MP3-only: prevent lame from auto-downsampling at low
# bitrates
case $value in
'true'|'on'|'yes'|'1')
destinationnoresample["$destination"]=1
;;
'false'|'off'|'no'|'0')
destinationnoresample["$destination"]=0
;;
*)
echo "noresample takes values:" \
"'yes' ,'true' ,'on', '1', 'no',"\
"'false','off', '0'"
;;
esac
;;
'rename')
# File rename pattern using %{tag} tokens
case "$value" in
*/*)
destinationrenamepath["$destination"]="${value%/*}"
;;
esac
destinationrename["$destination"]="${value##*/}"
;;
'fat32compat')
# Strip FAT32-illegal characters (? \ < > : * | ")
# trim spaces/dots
case $value in
'true'|'on'|'yes'|'1')
destinationfat32compat["$destination"]=1
;;
'false'|'off'|'no'|'0')
destinationfat32compat["$destination"]=0
;;
*)
echo "fat32compat takes values:" \
"'yes' ,'true' ,'on', '1', 'no',"\
"'false','off', '0'"
;;
esac
;;
'ascii-only')
# Transliterate Unicode filenames to ASCII using
#Requires Perl Text::Unidecode
case $value in
'true'|'on'|'yes'|'1')
destinationascii["$destination"]=1
# Signal that the perl coprocess will
# be needed
textunidecodeneeded=1
;;
'false'|'off'|'no'|'0')
destinationascii["$destination"]=0
;;
*)
echo "ascii-only takes values:" \
"'yes' ,'true' ,'on', '1', 'no',"\
"'false','off', '0'"
;;
esac
;;
'skip_mime-type')
# Accumulate pipe-separated list of mime patterns to
# exclude entirely
destinationskipmime[$destination]="${destinationskipmime[$destination]:+${destinationskipmime[$destination]}|}$value"
;;
'copy_mime-type')
# Accumulate pipe-separated list of mime patterns to
# copy verbatim (action=2)
destinationcopymime[$destination]="${destinationcopymime[$destination]:+${destinationcopymime[$destination]}|}$value"
;;
'copy_extension')
# Accumulate pipe-separated list of file extensions to
# copy verbatim
destinationcopyext[$destination]="${destinationcopyext[$destination]:+${destinationcopyext[$destination]}|}$value"
;;
'higher-than')
# Only re-encode source files with bitrate ABOVE this
# threshold (kbps)
# Files at or below this bitrate will be
# hardlinked/copied instead
expr='^[0-9]*$'
if ! [[ $value =~ $expr ]]
then
echo "Invalid higher-than bitrate value: $value" >&2
exit $EMAXBPS
fi
unset expr
destinationmaxbps[$destination]="$value"
;;
esac
}