dam/src/deploy_trackid

67 lines
3.3 KiB
Bash

#!/bin/bash
# doc deploy_trackid {
#
# DESCRIPTION
# deploy_trackid - Deploys TRACKID of IMAGEID to TARGET
#
# USAGE
# deploy_trackid <path/to/git/dir> <path/to/target> <path/to/db/file> <IMAGEID> <TRACKID>
#
# }
deploy_trackid() {
## Argument parsing
local GIT_DIR="${1}"
local TARGET="${2}"
local DB_FILE="${3}"
local IMAGEID="${4}"
local TRACKID="${5}"
local TRACKNO="$(print_track_no ${GIT_DIR} ${IMAGEID} ${TRACKID})"
## Path and metadata parsing
local FUTURE_META="$(print_future_meta ${GIT_DIR}/${IMAGEID}.tags ${TRACKNO})"
local FUTURE_PATH="$(print_future_path ${FUTURE_META}})"
local PRESENT_PATH="$(print_present_path ${DB_FILE} ${IMAGEID} ${TRACKID})"
local PRESENT_META="$(print_present_meta "${TARGET}/${PRESENT_PATH}")"
local ROW_NO=$(awk -v imageid=${IMAGEID} -v trackid=${TRACKID} 'BEGIN{FS="\t"}{if($2==imageid && $3==trackid){print NR}}' ${DB_FILE})
# If the track is selected, we will check if the trackid has already been deployed, if not deploy. If the metadata to be
# applied is different than what's deployed, apply new metadata. If the path has changed, move file to new path.
if is_selected ${DB_FILE} ${IMAGEID} ${TRACKID}; then
# In the event that PRESENT_PATH is null, that is to say the trackid is not present on target, transfers it there and then defined the PRESENT_PATH as the transfered FLAC
if [[ "${PRESENT_PATH}" == "null" ]]; then
_msg ECHO "${TRACKID} is not deployed. Deploying"
mv "${GIT_DIR}/${IMAGEID}-${TRACKID}.flac" "${TARGET}/${IMAGEID}-${TRACKID}.flac"
PRESENT_PATH="${IMAGEID}-${TRACKID}.flac"
fi
# If the PRESENT_META and FUTURE_META diverge, wipe the old metadata, and reapply
if [[ "${PRESENT_META}" != "${FUTURE_META}" ]]; then
_msg ECHO "${TRACKID} has differing metadata. Updating"
[[ "${PRESENT_PATH}" == "null" ]] || metaflac --remove-all "${TARGET}/${PRESENT_PATH}"
awk 'BEGIN {RS=";"}{print $0}' <<< ${FUTURE_META} | head -n -1 | metaflac --import-tags-from=- --import-picture-from="${GIT_DIR}/${IMAGEID}.jpg" "${TARGET}/${PRESENT_PATH}"
fi
# If the PRESENT_PATH and FUTURE_PATH diverge, move to new location
if [[ "${PRESENT_PATH}" != "${FUTURE_PATH}" ]]; then
_msg ECHO "${TRACKID} has differing paths. Moving"
mkdir -p "$(dirname "${TARGET}/${FUTURE_PATH}")"
mv "${TARGET}/${PRESENT_PATH}" "${TARGET}/${FUTURE_PATH}"
rmdir -p --ignore-fail-on-non-empty "$(dirname "${TARGET}/${PRESENT_PATH}")"
awk -v rowno=${ROW_NO} -v value="${FUTURE_PATH}" 'BEGIN{FS="\t";OFS="\t"}{if(NR==rowno){$4=value}{print $0}}' ${DB_FILE} > ${DB_FILE}.tmp; mv ${DB_FILE}.tmp ${DB_FILE}
fi
else
if [[ ${PRESENT_PATH} != "null" ]]; then
_msg ECHO "${TARGETID} was previouslty selected, and is now unselected. Deleting"
rm "${TARGET}/${PRESENT_PATH}"
awk -v rowno=${ROW_NO} -v value=null 'BEGIN{FS="\t";OFS="\t"}{if(NR==rowno){$4=value}{print $0}}' ${DB_FILE} > ${DB_FILE}.tmp; mv ${DB_FILE}.tmp ${DB_FILE}
else
_msg ECHO "${TARGETID} not selected"
rm "${GIT_DIR}/${IMAGEID}-${TRACKID}.flac"
fi
fi
}