dam/src/import_src

131 lines
4.3 KiB
Bash

#!/bin/bash
# doc import_src {
#
# DESCRIPTION
# import_src - Imports source into git directory
#
# USAGE
# import_src </path/to/git/dir> </path/to/track/dir>
#
# DEPENDENCIES src/gen_mtag
#
# }
import_src() {
local GIT_DIR="${1}"
local TRACK_DIR="${2}"
[[ ${3} == "-b" ]] && local BATCHID="${4}"
local SOURCE=$(sed 's|.*.import/||' <<<${TRACK_DIR}| cut -d/ -f1)
local supportedsrcList=(FLAC CUETOOLS EAC)
# Checks if source supported
if ! _if_array_contains ${SOURCE} ${supportedsrcList[@]}; then return 1; fi
[[ ! -d "${TRACK_DIR}" ]] && return 2
local fileList=($(find ${TRACK_DIR} -maxdepth 1 -name '*.flac' -printf '%p\n' 2>/dev/null | sort))
# Join trackList
echo "Processing audio files"
case ${SOURCE} in
FLAC)
med_integrity ${fileList[@]} >${STDERR} 2>&1
[[ $? -eq 0 ]] || return 4
gen_image "${TRACK_DIR}/img.flac" $(printf "%s\t" ${fileList[@]})
local EXIT="$?"
[[ $? -eq 0 ]] || return 3
;;
CUETOOLS|EAC)
med_integrity "${TRACK_DIR}/img.flac" >${STDERR} 2>&1
[[ $? -eq 0 ]] || return 4
;;
esac
# Generates IMAGEID
echo "Generating IMAGEID"
local DISCID="${SOURCE}"
[[ "${SOURCE}" == "CUETOOLS" ]] && local DISCID=$(grep "CTDB TOCID:" ${TRACK_DIR}/img.accurip | cut -d' ' -f3 | sed 's|-]||')
[[ "${SOURCE}" == "EAC" ]] && local DISCID="$(grep "REM DISCID" ${TRACK_DIR}/img.cue | cut -d' ' -f3)"
local IMAGEID="SHA256-${DISCID}--$(sha256sum "${TRACK_DIR}/img.flac" | cut -d' ' -f1)"
# Generate addmetaList and trackmetaList
echo "Generating metadata"
case ${SOURCE} in
(FLAC)
local trackList=(${fileList[@]})
local addmetaList=($(gen_metatrack ${trackList[@]}))
local trackmetaList=($(print_meta_flac ${trackList[@]}))
;;
CUETOOLS|EAC)
local trackList=($(grep -o TRACK ${TRACK_DIR}/img.cue ))
local addmetaList=($(gen_metatrack -c "${TRACK_DIR}/img.cue" "${TRACK_DIR}/img.flac" ))
local trackmetaList=($(print_meta_cue ${TRACK_DIR}/img.cue))
;;
esac
local COUNT=0
# Conjoins trackmetaList and addmetaList into metadataList
while [[ ${COUNT} -lt ${#trackList[@]} ]]; do
local metadataList[${COUNT}]="${trackmetaList[${COUNT}]};${addmetaList[${COUNT}]};IMAGEID=${IMAGEID};"
[[ -n "${BATCHID}" ]] && local metadataList[${COUNT}]="${metadataList[${COUNT}]};BATCHID=${BATCHID};"
local COUNT=$(( ${COUNT} + 1 ))
done
# Generate cuesheet
echo "Generating cue file"
case ${SOURCE} in
FLAC)
gen_cue "${TRACK_DIR}" $(printf '%s\t' ${metadataList[@]}) > "${GIT_DIR}/${IMAGEID}.cue"
local EXIT=$?
;;
EAC|CUETOOLS)
awk "!/FILE/{print} /FILE/{print \"FILE ${IMAGEID}.flac WAVE\"}" "${TRACK_DIR}/img.cue" > "${GIT_DIR}/${IMAGEID}.cue"
local EXIT=$?
;;
esac
[[ $? -eq 0 ]] || return 4
# Generate tags file
echo "Generating tags file"
gen_mtag $(printf '%s\t' ${metadataList[@]}) > "${GIT_DIR}/${IMAGEID}.tags"
local EXIT=$?
[[ $? -eq 0 ]] || return 5
# Convert tags and cue to utf-8 with bom
local txtExtensionsList=(tags cue)
for txtExtensions in ${txtExtensionsList[@]}; do
local pathList=("${GIT_DIR}/${IMAGEID}.${txtExtensions}" ${pathList[@]})
done
fix_charset ${pathList[@]}
for path in ${pathList[@]}; do
iconv -t UTF-8//IGNORE "${path}" > "${path}.iconv"
mv "${path}.iconv" "${path}"
done
add_bom ${pathList[@]}
# Remove metadata and move img.flac to GIT_DIR
metaflac --remove-all --dont-use-padding "${TRACK_DIR}/img.flac"
cp "${TRACK_DIR}/img.flac" "${GIT_DIR}/${IMAGEID}.flac"
# Generate cover images
gen_cover "${TRACK_DIR}/img.png" > "${GIT_DIR}/${IMAGEID}.png"
gen_small_cover "${GIT_DIR}/${IMAGEID}.png" > "${GIT_DIR}/${IMAGEID}.jpg"
# Move misc files
echo "Moving misc files"
case ${SOURCE} in
EAC)
cp "${TRACK_DIR}/img.log" "${GIT_DIR}/${IMAGEID}.log"
;;
CUETOOLS)
cp "${TRACK_DIR}/img.log" "${GIT_DIR}/${IMAGEID}.log"
cp "${TRACK_DIR}/img.accurip" "${GIT_DIR}/${IMAGEID}.accurip"
;;
esac
return 0
}