diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..d4ecb29 --- /dev/null +++ b/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +EXEC=dam + +echo -e "#!/bin/bash\n" > ${EXEC} + +for file in $(find src/ -type f); do + awk '!/^ *#/ && NF' ${file} >> ${EXEC} +done +echo 'eval $@' >> ${EXEC} diff --git a/src/clean_target b/src/clean_target deleted file mode 100644 index 6694a9f..0000000 --- a/src/clean_target +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -# doc clean_target { -# -# DESCRIPTION -# clean_target - Cleans target of IMAGEID -# -# USAGE -# clean_target -# -# } - -clean_target() { - local TARGET="${1}" - local IMAGEID="${2}" - local DB_FILE="${3}" - - rownoList=($(_cfg query '$2=='${IMAGEID} ${DB_FILE})) - - for rowno in ${rownoList[@]}; do - FILE_PATH=$(_cfg print TARGET_PATH ${rowno} ${DB_FILE}) - rm "${TARGET}/${FILE_PATH}" - _cfg drop row ${rowno} - done - find ${TARGET}/* -empty -type d -delete >/dev/null 2>&1 -} - diff --git a/src/dam b/src/dam new file mode 100644 index 0000000..18ded1a --- /dev/null +++ b/src/dam @@ -0,0 +1,3 @@ +#!/bin/bash + +eval $@ diff --git a/src/deploy b/src/deploy deleted file mode 100644 index 678fce8..0000000 --- a/src/deploy +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# doc deploy { -# -# DESCRIPTION -# deploy - Deploys IMAGEID to TARGET and then updates DB file. -# -# USAGE -# deploy -# - - -deploy() { - local GIT_DIR="${1}" - local TARGET="${2}" - local DB_FILE="${TARGET}/${3}" - local IMAGEID="${4}" - - - - ## targetmetaList, targetpathList, deployedpathList, deployedmetaList generators - # targetmetaList and targetpathList are used to define both the metadata, and path - # of split files. deployedpathList and deployedmetaList are used later to determine - # if a change occured in the targetpath and targetmeta, if the IMAGEID has already been - # deployed. - - # Defines the TARGET and DEPLOYED total tracks. - local TOTALTRACKS="$(grep -e TITLE "${GITDIR}/${IMAGEID}.tags" | wc -l)" - local TARGET_TOTALTRACKS="$(grep -e TITLE "${GITDIR}/${IMAGEID}.tags" | wc -l)" - local DEPLOYED_TOTALTRACKS="$(grep -e ${IMAGEID} "${DB_FILE}" | wc -l)" - # Current working track variable - local COUNT=1 - while [[ ${COUNT} -le ${TARGET_TOTALTRACKS} ]]; do - local targetmetaList[${COUNT}]="$(print_target_meta ${IMAGEID}.tags ${COUNT})" - local targetpathList[${COUNT}]="${TARGET}/$(print_target_path ${targetmetaList[${COUNT}]})" - local deployedpathList[${COUNT}]="${TARGET}/$(print_deployed_path ${IMAGEID} ${COUNT} ${DB_FILE})" - local deployedmetaList[${COUNT}]="$(print_deployed_meta ${deployedpathList[${COUNT}]})" - # Bumps up working track number - local COUNT=$(( ${COUNT} + 1 )) - done - - # Checks is there's a discrepancy between what has been deployed and what is targetted to be deployed. - # This can be caused by an unclean deployment, or a change in the cue files. In this case, the clean_target - # function will be used to clean the target of the unclean imageid, and then normal deployment will occur. - if [[ ${TARGET_TOTALTRACKS} -ne ${DEPLOYED_TOTALTRACKS} ]] && [[ ${DEPLOYED_TOTALTRACKS} -ne 0 ]]; then - clean_target ${TARGET} ${IMAGEID} ${DB_FILE} - fi - - if [[ -z "${deployedpathList[@]}" ]]; then - ## FLAC Splitter - # Splits the provided IMAGEID's FLAC file into multiple tracks using the provided CUE file. - # A hack is sort of applies here by populating the deployedpathList with the output files of split_flac. - split_flac "${GITDIR}" "${IMAGEID}" - local COUNT=1 - while ${COUNT} -le ${TARGET_TOTALTRACKS}; do - local deployedpathList[${COUNT}]="${GITDIR}/$(printf 'split-track%02d.flac' ${COUNT})" - local deployedmetaList[${COUNT}]="" - local COUNT=$(( ${COUNT} + 1 )) - done - fi - - ## Metadata application - # Applies metadata to flac files that are either newly generated by split_flac to already deployed files that require it. - local COUNT=1 - while [[ ${COUNT} -le ${TARGET_TOTALTRACKS} ]]; do - # If ${targetmetaList[${COUNT}]} in ${deployedmetaList[${COUNT}]} are not equal, it means that either the already deployed - # flac file needs metadata updating, or a newly generated split flac needs metadata application - if [[ "${targetmetaList[${COUNT}]}" != "${deployedmetaList[${COUNT}]}" ]]; then - [[ ! -z "${deployedmetaList[${COUNT}]}" ]] && metaflac --remove-all ${deployedpathList[${COUNT}]} - awk 'BEGIN {RS=";"}{print $0}' <<< ${targetmetaList[${COUNT}]} | head -n -1 | metaflac --import-tags-from=- --import-picture-from="${IMAGEID}.jpg" ${deployedpathList[${COUNT}]} - fi - local COUNT=$(( ${COUNT} + 1 )) - done - - ## Track deployment - # Deploys files to appropriate targetpath, of course only if necessary. - local COUNT=1 - while [[ ${COUNT} -le ${TARGET_TOTALTRACKS} ]]; do - if [[ "${targetpathList[${COUNT}]}" != "${deployedpathList[${COUNT}]}" ]]; then - mkdir -p "$(dirname "${targetpathList[${COUNT}]}")" - mv "${deployedpathList[${COUNT}]}" "${targetpathList[${COUNT}]}" - local ROW_NO=$(_cfg query '$2=='${IMAGEID}' && $3=='${COUNT}'' ${DB_FILE}) - _cfg drop row ${ROW_NO} ${DB_FILE} - _cfg insert row "true" ${IMAGEID} ${COUNT} "${targetpathList[${COUNT}]}" ${DB_FILE} - fi - local COUNT=$(( ${COUNT} + 1 )) - done -} diff --git a/src/deploy_gen b/src/deploy_gen index 786abe6..2b120ec 100644 --- a/src/deploy_gen +++ b/src/deploy_gen @@ -7,15 +7,12 @@ # formatted under the CUE specification # # USAGE -# deploy_gen +# deploy_gen # } deploy_gen() { local GITDIR="${1}" - local DB_FILE="${2}" - local IMAGEID="${3}" - local TRACKID="${4}" - local TRACKNO=$(print_track_no ${DB_FILE} ${IMAGEID} ${TRACKID}) + local IMAGEID="${2}" ## breakpointList generator # Generates list with cuebreakpoints utility @@ -23,13 +20,13 @@ deploy_gen() { # In the event that breakpointList is empty because image represents only one track, # no split occurs, and returns a 0. - [[ -z "${breakpointList[@]}" ]] && { cat "${GITDIR}/${IMAGEID}.flac" > ${GITDIR}/${TRACKID}.flac; return 0; } + [[ -z "${breakpointList[@]}" ]] && { cat "${GITDIR}/${IMAGEID}.flac" > ${GITDIR}/split-track01.flac; return 0; } # Attempts first split. If fails because of lack of CD quality file, retries with modified breakpointList - if ! printf '%s\n' ${breakpointList[@]} | shntool split "${GITDIR}/${IMAGEID}.flac" -o flac -O always -x ${TRACKNO} -d "${GITDIR}" -f ${TRACKID}.flac; then - printf '%s\n' ${breakpointList[@]} | sed s/$/0/ | shntool split "${GITDIR}/${IMAGEID}.flac" -o flac -O always -x ${TRACKNO} -d "${GITDIR}" -f ${TRACKID}.flac - [[ $? -eq 0 ]] && return 2 || return 1 + if ! printf '%s\n' ${breakpointList[@]} | shntool split "${GITDIR}/${IMAGEID}.flac" -o flac -O always -d "${GITDIR}"; then + printf '%s\n' ${breakpointList[@]} | sed s/$/0/ | shntool split "${GITDIR}/${IMAGEID}.flac" -o flac -O always -d "${GITDIR}" + [[ $? -ne 0 ]] && return 2 || return 1 fi - return 0 + } diff --git a/src/deploy_imageid b/src/deploy_imageid new file mode 100644 index 0000000..5b731d2 --- /dev/null +++ b/src/deploy_imageid @@ -0,0 +1,29 @@ +#!/bin/bash + +# doc deploy_imageid { +# +# DESCRIPTION +# deploy_imageid - Wraps the deploy_trackid function on a per imageid basis +# +# USAGE +# deploy_imageid +# +# } + +deploy_imageid() { + ## Argument parsing + local GIT_DIR="${1}" + local TARGET="${2}" + local DB_FILE="${3}" + local IMAGEID="${4}" + + [[ -n "$(awk -v imageid=${IMAGEID} 'BEGIN{FS="\t"}{if($1=="true" && $2==imageid && $4=="null"){print NR}}' ${DB_FILE})" ]] && { deploy_gen ${GIT_DIR} ${IMAGEID}; deploy_mv ${GIT_DIR} ${IMAGEID}; } + + local trackidList=($(awk -v imageid=${IMAGEID} 'BEGIN{FS="\t"}{if($2==imageid){print $3}}' ${DB_FILE})) + for trackid in ${trackidList[@]}; do + _msg ECHO "Processing ${trackid} of ${IMAGEID}" + deploy_trackid ${GIT_DIR} ${TARGET} ${DB_FILE} ${IMAGEID} ${trackid} + done +} + + diff --git a/src/deploy_mv b/src/deploy_mv new file mode 100644 index 0000000..2c1e5d6 --- /dev/null +++ b/src/deploy_mv @@ -0,0 +1,27 @@ +#!/bin/bash + +# doc deploy_mv { +# +# DESCRIPTION +# deploy_mv - Renames output files from deploy_gen to associated TRACKID +# +# USAGE +# deploy_mv +# +# } + +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 different 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}" + 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 + return 0 +} diff --git a/src/deploy_trackid.sh b/src/deploy_trackid.sh deleted file mode 100644 index 44eaff6..0000000 --- a/src/deploy_trackid.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - -# doc deploy_trackid { -# -# DESCRIPTION -# deploy_trackid - Deploys TRACKID of IMAGEID to TARGET -# -# USAGE -# deploy_trackid [] [<...>] -# -# } - -deploy_trackid() { - ## Argument parsing - local GIT_DIR="${1}" - local TARGET="${2}" - local DB_FILE="${3}" - local IMAGEID="${4}" - local TRACKID="${5}" - - - ## Path and metadata parsing - local TRACKNO=$(print_track_no ${DB_FILE} ${IMAGEID} ${TRACKID}) - local FUTURE_META="$(print_future_meta ${IMAGEID}.tags ${TRACKNO})" - local FUTURE_PATH="${TARGET}/$(print_future_path$ ${FUTURE_META}})" - local PRESENT_PATH="${TARGET}/$(print_future_path ${IMAGEID} ${TRACKNO} ${DB_FILE})" - local PRESENT_META="$(print_future_meta ${PRESENT_PATH})" - local ROW_NO==$(_cfg query '$2=="'${IMAGEID}'" && $3=="'${TRACKID}'"' ${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 - if [[ -z "${PRESENT_PATH}" ]]; then - deploy_gen ${GIT_DIR} ${IMAGEID} ${TRACKNO} - local PRESENT_PATH="${GIT_DIR}/output.flac" - fi - - if [[ "${PRESENT_META}" != "${FUTURE_META}" ]]; then - [[ -z "${PRESENT_META}" ]] || metaflac --remove-all ${PRESENT_PATH} - awk 'BEGIN {RS=";"}{print $0}' <<< ${FUTURE_META} | head -n -1 | metaflac --import-tags-from=- --import-picture-from="${GIT_DIR}/${IMAGEID}.jpg" "${PRESENT_PATH}" - fi - - if [[ "${PRESENT_PATH}" != "${FUTURE_PATH}" ]]; then - mkdir -p "$(dirname "${FUTURE_PATH}")" - mv "${PRESENT_PATH}" "${FUTURE_PATH}" - _cfg change TARGET_PATH ${ROW_NO} "${FUTURE_PATH}" ${DB_FILE} - fi - - else - if [[ ! -z "${PRESENT_PATH}" ]]; then - rm "${PRESENT_PATH}" - _cfg change TARGET_PATH ${ROW_NO} "" - fi - fi - return 0 -} diff --git a/src/is_selected b/src/is_selected index b5739cc..5f5aed8 100644 --- a/src/is_selected +++ b/src/is_selected @@ -15,7 +15,6 @@ is_selected() { local IMAGEID="${2}" local TRACKID="${3}" - ROWNO=$(_cfg query '$2=="'${IMAGEID}'" && $3=="'${TRACKID}'"' ${DB_FILE}) - [[ "$(_cfg print SELECTED ${ROWNO} ${DB_FILE})" == "true" ]] && return 0 || return 1 + [[ "$(awk -v imageid=${IMAGEID} -v trackid=${TRACKID} 'BEGIN{FS"\t"}{if($2==imageid && $3==trackid){print $1}}' ${DB_FILE})" == "true" ]] && return 0 || return 1 } diff --git a/src/print_deployed_ids b/src/print_deployed_ids deleted file mode 100644 index 4f0a72c..0000000 --- a/src/print_deployed_ids +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -### -# Prints IDs that are already deployed by parsing the IMAGEID field in all of the FLAC files -# that are present in the TARGET directory. -### - -print_deployed_ids() { - local TARGET="${@}" - for flac in $(find "${TARGET}" -name '*.flac' -not -path '*/\.*' -printf "%P\t"); do - echo "${flac}=$(metaflac --list ${TARGET}/${flac} | grep IMAGEID | cut -d= -f2);" - done -} diff --git a/src/print_future_meta b/src/print_future_meta index 425120d..63299af 100644 --- a/src/print_future_meta +++ b/src/print_future_meta @@ -16,13 +16,12 @@ print_future_meta() { local MTAG=${1} local TRACKNUMBER="${2}" - local TAGS=$(cat ${MTAG} | sed -e 's/^[[:space:]]*\"//') - local tagList=($(echo ${TAGS} | awk 'BEGIN {RS="\", ";FS="\" : \""}{if($1!~"{"){print $1}}' | awk '!seen[$0]++')) + local tagList=($(awk 'BEGIN{RS="\",*\n * \"";FS="\" : \""}{if($1!~"@"){print $1}}' ${MTAG} | awk '!seen[$0]++')) for tag in ${tagList[@]}; do local COUNT=1 while [[ ${COUNT} -le ${TRACKNUMBER} ]]; do - local PRTVAR=$(print_meta_field ${COUNT} ${tag} ${TAGS}) + local PRTVAR=$(print_meta_field ${MTAG} ${COUNT} ${tag}) [[ ! -z ${PRTVAR} ]] && local CURVAR=${PRTVAR} local COUNT=$(( ${COUNT} + 1 )) done @@ -30,6 +29,6 @@ print_future_meta() { unset CURVAR unset PRTVAR done - echo -n "IMAGEID=$(sed 's|.tags||g' <<< ${MTAG})" + echo -n "IMAGEID=$(sed 's|.tags||g' <<< $(basename "${MTAG}"))" } diff --git a/src/print_future_path b/src/print_future_path index 6d1b330..10d5305 100644 --- a/src/print_future_path +++ b/src/print_future_path @@ -1,42 +1,42 @@ #!/bin/bash -# doc print_target_path { +# doc print_future_path { # # DESCRIPTION # Prints relative output path based on provided metadata TAGS. Expects input from print_meta # function. # # USAGE -# print_target_path +# print_future_path # # } -print_target_path() { +print_future_path() { local TAGS="${@}" - local tagList=(GENRE COMPOSER ALBUM ARTIST PERFORMER DATE DISCNUMBER TOTALDISCS TRACKNUMBER TITLE) + local tagList=(GENRE COMPOSER ALBUM ARTIST CONDUCTOR PERFORMER DATE DISCNUMBER TOTALDISCS TRACKNUMBER TITLE) for tag in ${tagList[@]}; do CURTAG="$(awk -v field=${tag} 'BEGIN{RS=";";FS="="}{if($1==field){printf $2}}' <<< ${TAGS})" eval local ${tag}='${CURTAG}' done - [[ -z "${GENRE+x}" ]] && echo -n "${GENRE}/" - if [[ -z "${CONDUCTOR+x}" ]]; then - [[ -z "${COMPOSER+x}" ]] && echo -n "${COMPOSER}/" - [[ -z "${ALBUM+x}" ]] && echo -n "${ALBUM}/" - [[ -z "${ARTIST+x}" ]] && echo -n "${ARTIST}/" - [[ -z "${DATE+x}" ]] && echo -n "${DATE}" - if [[ -z "${DATE+x}" ]] && [[ -z "${PERFORMER+x}" ]]; then echo -n "-"; fi - [[ -z "${PERFORMER+x}" ]] && echo -n "${PERFORMER}/" + [[ -n "${GENRE}" ]] && echo -n "${GENRE}/" + if [[ -n "${CONDUCTOR}" ]]; then + [[ -n "${ARTIST}" ]] && echo -n "${ARTIST}/" + [[ -n "${ALBUM}" ]] && echo -n "${ALBUM}/" + [[ -n "${CONDUCTOR}" ]] && echo -n "${CONDUCTOR}/" + [[ -n "${DATE}" ]] && echo -n "${DATE}" + if [[ -n "${DATE}" ]] && [[ -n "${PERFORMER}" ]]; then echo -n " - "; fi + [[ -n "${PERFORMER+x}" ]] && echo -n "${PERFORMER}/" else - [[ -z "${ARTIST+x}" ]] && echo -n "${ARTIST}/" - [[ -z "${DATE+x}" ]] && echo -n "${DATE}" - if [[ -z "${DATE+x}" ]] && [[ -z "${ARTIST+x}" ]]; then echo -n "-"; fi - [[ -z "${ALBUM+x}" ]] && echo -n "${ALBUM}/\t" + [[ -n "${ARTIST}" ]] && echo -n "${ARTIST}/" + [[ -n "${DATE}" ]] && echo -n "${DATE}" + if [[ -n "${DATE}" ]] && [[ -n "${ALBUM}" ]]; then echo -n " - "; fi + [[ -n "${ALBUM}" ]] && echo -n "${ALBUM}/" fi [[ ${TOTALDISCS} -gt 1 ]] && echo -n "${DISCNUMBER}." printf "%02d" ${TRACKNUMBER} - echo -n " - $(sed 's|/|-|g' <<< ${TITLE} | sed 's|?||g')" + echo -n " - $(sed 's|/|-|g' <<< ${TITLE} | sed 's|?||g').flac" } diff --git a/src/print_meta_field b/src/print_meta_field index 0430e6e..8dea73c 100644 --- a/src/print_meta_field +++ b/src/print_meta_field @@ -1,14 +1,20 @@ #!/bin/bash -### -# Prints VALUE of FIELD, for specific TRACK NUMBER out of a JSON string. Expects to be used -# by print_meta() -### +# doc print_meta_field { +# +# DESCRIPTION +# print_meta_field - Prints VALUE of FIELD, for specific TRACK NUMBER out of a JSON string. Expects to be used +# by print_meta() +# +# USAGE +# print_meta_field +# +# } print_meta_field() { - local TRACK_NO="${1}" - local FIELD="${2}"; shift 2 - local TAGS="${@}" + local FILE="${1}" + local TRACK_NO="${2}" + local FIELD="${3}" - awk -v track="${TRACK_NO}" 'BEGIN {RS="\" * }"}{if(NR==track){print $0}}' <<< ${TAGS} | awk -v field="${FIELD}" 'BEGIN {RS="\", ";FS="\" : \"";}{if($1==field){print $2}}' + awk -v track="${TRACK_NO}" 'BEGIN {RS="\"\n * }"}{if(NR==track){print $0}}' ${FILE} | awk -v field="${FIELD}" 'BEGIN{RS="\",*\n * \"";FS="\" : \""}{if($1==field){print $2}}' } diff --git a/src/print_present_meta b/src/print_present_meta index f1835b2..7e67a91 100644 --- a/src/print_present_meta +++ b/src/print_present_meta @@ -11,7 +11,9 @@ # } print_present_meta() { - local FLAC="${1}" - - metaflac --list --block-type=VORBIS_COMMENT "${FLAC}" | grep "comment\[" | awk 'BEGIN{FS=": ";ORS=";"}{print $2}' - } + local FILE="${1}" + + if [[ -f ${FILE} ]]; then + awk 'BEGIN{FS=": ";ORS=";"}{if($1 ~ /comment\[/){print $2}}' <<< $(metaflac --list --block-type=VORBIS_COMMENT "${FILE}") | sed 's|.$||' + fi +} diff --git a/src/print_present_path b/src/print_present_path index 990eab5..2b0b03d 100644 --- a/src/print_present_path +++ b/src/print_present_path @@ -6,15 +6,14 @@ # Prints path of exiting TRACKID for IMAGEID. # # USAGE -# print_present_path +# print_present_path # # } print_present_path() { - local IMAGEID="${1}" - local TRACKID="${2}" - local DB_FILE="${3}" + local DB_FILE="${1}" + local IMAGEID="${2}" + local TRACKID="${3}" - local ROW=$(_cfg query '$2=="'${IMAGEID}'" && $3=="'${TRACKNO}'"' ${DB_FILE}) - _cfg print TARGET_PATH ${ROW} ${DB_FILE} + awk -v imageid=${IMAGEID} -v trackid=${TRACKID} 'BEGIN{FS="\t"}{if($2==imageid && $3==trackid){print $4}}' ${DB_FILE} } diff --git a/src/print_track_no b/src/print_track_no new file mode 100644 index 0000000..0a82d96 --- /dev/null +++ b/src/print_track_no @@ -0,0 +1,26 @@ +#!/bin/bash + +# doc print_track_no { +# +# DESCRIPTION +# print_track_no - Prints track number of TRACKID using MTAG file +# +# USAGE +# print_track_no +# +# } + +print_track_no() { + local GIT_DIR="${1}" + local IMAGEID="${2}" + local TRACKID="${3}" + + local TOTALTRACKS=$(grep TITLE ${GIT_DIR}/${IMAGEID}.tags | wc -l) + + local COUNT=1 + while [[ ${COUNT} -le ${TOTALTRACKS} ]]; do + [[ "$(print_meta_field ${GIT_DIR}/${IMAGEID}.tags ${COUNT} TRACKID)" == "${TRACKID}" ]] && echo ${COUNT} + local COUNT=$(( ${COUNT} + 1 )) + done +} + diff --git a/src/update_db.sh b/src/update_db similarity index 59% rename from src/update_db.sh rename to src/update_db index 8e4fd5c..fddd3f6 100644 --- a/src/update_db.sh +++ b/src/update_db @@ -11,15 +11,16 @@ # } update_db() { - local GITDIR="${1}" + local GIT_DIR="${1}" local TARGET="${2}" local DB_FILE="${3}"; shift 3 local imageidList=(${@}) + [[ -f "${DB_FILE}" ]] || touch "${DB_FILE}" for imageid in ${imageidList[@]}; do - trackidList=($(awk 'BEGIN{FS="\" : \"";RS="\",\n * \""}{if($1=="TRACKID"){print $2}}')) + trackidList=($(awk 'BEGIN{FS="\" : \"";RS="\",\n * \""}{if($1=="TRACKID"){print $2}}' ${GIT_DIR}/${imageid}.tags)) for trackid in ${trackidList[@]}; do - [[ -z $(_cfg query '$2=="'${imageid}'" && $3=="'${trackid}'"' ${DB_FILE}) ]] && _cfg insert true ${imageid} ${trackid} + [[ -z $(awk -v imageid="${imageid}" -v trackid="${trackid}" 'BEGIN{FS="\t"}{if($2==imageid && $3==trackid){print $0}}' ${DB_FILE}) ]] && echo -e "true\t${imageid}\t${trackid}\tnull" >> ${DB_FILE} done done } diff --git a/tst/test_update_db b/tst/test_update_db new file mode 100644 index 0000000..231fa65 --- /dev/null +++ b/tst/test_update_db @@ -0,0 +1,12 @@ +#!/bin/bash + + +source ../src/env +source ../src/update_db + +GIT_DIR=~/media/music +TARGET=~/media/target +DB_FILE=~/media/target/.dam.db +IMAGEID=SHA256-zyVXHCNCiYlngNrv5cpTXfOWsm8--82bc52d968f90a4e3b4ec316e67c6e0acae66112db9f237cb4b11df623cf20c2 + +update_db ${GIT_DIR} ${TARGET} ${DB_FILE} ${IMAGEID}