Initial commit - migration from music repo to own repo
This commit is contained in:
commit
48d5fb91af
13 changed files with 337 additions and 0 deletions
18
src/clean_target
Normal file
18
src/clean_target
Normal file
|
@ -0,0 +1,18 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Cleans target of all FLAC files that are owned by IMAGEID that exist in TARGET directory
|
||||
###
|
||||
|
||||
clean_target() {
|
||||
local TARGET="${1}"
|
||||
local IMAGEID="${2}"
|
||||
local MANIFEST="${3}"
|
||||
|
||||
for old_file in $(grep ${IMAGEID} ${MANIFEST} | cut -d'=' -f1); do
|
||||
rm ${TARGET}/${old_file}
|
||||
done
|
||||
sed -i "/${IMAGEID}/d" ${MANIFEST}
|
||||
find ${TARGET}/* -empty -type d -delete >/dev/null 2>&1
|
||||
}
|
||||
|
28
src/cmd_deploy
Normal file
28
src/cmd_deploy
Normal file
|
@ -0,0 +1,28 @@
|
|||
#! /bin/bash
|
||||
|
||||
###
|
||||
# Deploys image ID using deploy_imageid function
|
||||
###
|
||||
|
||||
cmd_deploy() {
|
||||
local TARGET="${1}"; shift
|
||||
local imageidList=(${@})
|
||||
local MANIFEST="${TARGET}/${MANIFEST}"
|
||||
local LAST_COMMIT="${TARGET}/${LAST_COMMIT}"
|
||||
local EXCLUDE="${TARGET}/${EXCLUDE}"
|
||||
if [[ ! -f "${MANIFEST}" ]] || [[ ! -f "${LAST_COMMIT}" ]] || [[ ! -f "${EXCLUDE}" ]]; then return 1; fi
|
||||
|
||||
|
||||
for imageid in ${imageidList[@]}; do
|
||||
_msg ECHO "Cleaning ${imageid} of ${TARGET}"
|
||||
clean ${TARGET} ${imageid} ${MANIFEST} >${STDERR} 2>&1
|
||||
[[ $? -ne 0 ]] && local ERRORS=true
|
||||
if [[ -f "${imageid}.tags" ]] && is_not_excluded ${imageid} ${EXCLUDE}; then
|
||||
deploy ${imageid} ${TARGET} ${MANIFEST}
|
||||
[[ $? -ne 0 ]] && local ERRORS=true
|
||||
fi
|
||||
done
|
||||
[[ ${ERRORS} ]] && return 2
|
||||
|
||||
}
|
||||
|
28
src/cmd_exclude
Normal file
28
src/cmd_exclude
Normal file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Command used to ADD or DELete an exception rule in OPT_EXCLUDE_FILE
|
||||
###
|
||||
|
||||
cmd_exclude() {
|
||||
local TARGET="${1}"
|
||||
local EXCLUDE="${TARGET}/${EXCLUDE}"
|
||||
local CMD="${2}"; shift 2
|
||||
local fieldList=("${@}")
|
||||
|
||||
case ${CMD} in
|
||||
add)
|
||||
printf "%s\n" ${fieldList[@]} >> ${EXCLUDE}
|
||||
;;
|
||||
|
||||
del)
|
||||
for field in ${fieldList[@]}; do
|
||||
sed -i "/${field}/d" ${EXCLUDE}
|
||||
done
|
||||
;;
|
||||
|
||||
ls)
|
||||
cat ${EXCLUDE}
|
||||
;;
|
||||
esac
|
||||
}
|
20
src/cmd_init
Normal file
20
src/cmd_init
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Command initializes TARGET directory by creating OPT_FILE_MANIFEST and OPT_FILE_EXCLUDE
|
||||
# OPT_FILE_COMMIT
|
||||
###
|
||||
|
||||
cmd_init() {
|
||||
local TARGET="${1}"
|
||||
local MANIFEST="${TARGET}/${MANIFEST}"
|
||||
local LAST_COMMIT="${TARGET}/${LAST_COMMIT}"
|
||||
local EXCLUDE="${TARGET}/${EXCLUDE}"
|
||||
|
||||
[[ -z "$(ls -A "${TARGET}")" ]] || return 1
|
||||
touch "${MANIFEST}"
|
||||
touch "${EXCLUDE}"
|
||||
echo "COMMIT=$(git rev-list HEAD | tail -n 1)" > ${LAST_COMMIT}
|
||||
[[ $? -eq 0 ]] && return 0 || return 2
|
||||
}
|
||||
|
60
src/deploy_imageid
Normal file
60
src/deploy_imageid
Normal file
|
@ -0,0 +1,60 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Deploys IMAGEID to TARGET and then updates MANIFEST file
|
||||
##
|
||||
|
||||
|
||||
deploy_imageid() {
|
||||
local IMAGEID="${1}"
|
||||
local TARGET="${2}"
|
||||
local MANIFEST="${3}"
|
||||
local TOTALTRACKS="$(grep -e TITLE ${IMAGEID}.tags | wc -l)"
|
||||
|
||||
if [[ ! -e "${IMAGEID}.flac" ]]; then
|
||||
_msg EXEC "Downloading data for ${IMAGEID}"
|
||||
git annex get ${IMAGEID}.* >${STDERR} 2>&1
|
||||
[[ $? -ne 0 ]] && _msg WARN || _msg OK
|
||||
local DELETE=true
|
||||
fi
|
||||
|
||||
_msg EXEC "Generating data for ${IMAGEID}"
|
||||
gen_flac ${IMAGEID}.flac ${IMAGEID}.cue >${STDERR} 2>&1
|
||||
local EXIT_CODE=$?
|
||||
[[ ${EXIT_CODE} -eq 0 ]] && _msg OK || _msg WARN
|
||||
|
||||
_msg EXEC "Parsing metadata for ${IMAGEID}"
|
||||
local COUNT=1
|
||||
while [[ ${COUNT} -le ${TOTALTRACKS} ]]; do
|
||||
metaList[${COUNT}]="$(gen_meta ${IMAGEID}.tags ${COUNT})"
|
||||
local COUNT=$(( ${COUNT} + 1 ))
|
||||
done
|
||||
_msg OK
|
||||
|
||||
_msg EXEC "Applying metadata for ${IMAGEID}"
|
||||
local COUNT=1
|
||||
while [[ ${COUNT} -le ${TOTALTRACKS} ]]; do
|
||||
awk 'BEGIN {RS=";"}{print $0}' <<< ${metaList[${COUNT}]} | head -n -1 | metaflac --import-tags-from=- --import-picture-from="${IMAGEID}.jpg" $(printf 'split-track%02d.flac' ${COUNT})
|
||||
[[ $? -ne 0 ]] && local GEN_META_ERR=true
|
||||
local COUNT=$(( ${COUNT} + 1 ))
|
||||
done
|
||||
[[ ${GEN_META_ERR} ]] && _msg WARN || _msg OK
|
||||
|
||||
_msg EXEC "Deploying ${IMAGEID} to ${TARGET}"
|
||||
local COUNT=1
|
||||
while [[ ${COUNT} -le ${TOTALTRACKS} ]]; do
|
||||
local DIR=$(gen_dir ${metaList[${COUNT}]} | sed s'|:|_|g')
|
||||
mkdir -p "${TARGET}/$(dirname "${DIR}")"
|
||||
mv $(printf 'split-track%02d.flac' ${COUNT}) "${TARGET}/${DIR}.flac"
|
||||
echo "${DIR}.flac=${IMAGEID};" >> ${MANIFEST}
|
||||
local COUNT=$(( ${COUNT} + 1 ))
|
||||
done
|
||||
_msg OK
|
||||
|
||||
if [[ ${DELETE} ]]; then
|
||||
_msg EXEC "Dropping data for ${IMAGEID}"
|
||||
git annex drop ${IMAGEID}.* >${STDERR} 2>&1
|
||||
_msg OK
|
||||
fi
|
||||
}
|
||||
|
13
src/env
Normal file
13
src/env
Normal file
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Sets environment variables necessary for the functioning of this script
|
||||
###
|
||||
|
||||
source /usr/lib/bash/bunc
|
||||
IFS='
|
||||
'
|
||||
MANIFEST=".manifest"
|
||||
LAST_COMMIT=".last_commit"
|
||||
EXCLUDE=".exclude"
|
||||
|
21
src/is_not_excluded
Normal file
21
src/is_not_excluded
Normal file
|
@ -0,0 +1,21 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Returns true if IMAGEID is not excluded from the OPT_EXCLUDE_FILE.
|
||||
###
|
||||
|
||||
is_not_excluded() {
|
||||
local IMAGEID="${1}"
|
||||
local EXCLUDE="${2}"
|
||||
local excludeList=($(cat ${EXCLUDE}))
|
||||
|
||||
[[ -z ${excludeList[@]} ]] && return 0
|
||||
|
||||
for exclude in ${excludeList[@]}; do
|
||||
local FIELD=$(echo ${exclude} | cut -d'=' -f1)
|
||||
local VALUE=$(echo ${exclude} | cut -d'=' -f2)
|
||||
[[ -z "$(grep -i -l "\"${FIELD}\" : \"${VALUE}\"" ${IMAGEID}.tags)" ]] || return 1
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
54
src/parser
Normal file
54
src/parser
Normal file
|
@ -0,0 +1,54 @@
|
|||
#!
|
||||
|
||||
###
|
||||
# Parses arguments and commands from shell
|
||||
###
|
||||
|
||||
case "${1}" in
|
||||
exclude)
|
||||
shift
|
||||
cmd_exclude ${@}
|
||||
;;
|
||||
|
||||
init)
|
||||
shift
|
||||
cmd_init ${@}
|
||||
;;
|
||||
|
||||
deploy)
|
||||
shift
|
||||
TARGET="${1}"; shift
|
||||
imageidList=($(printf '%s\n' ${@} | sed 's/\(.*\)\..*/\1/'))
|
||||
cmd_deploy ${TARGET} ${imageidList[@]}
|
||||
;;
|
||||
|
||||
update)
|
||||
shift
|
||||
TARGET="${1}"; shift
|
||||
LAST_COMMIT="${TARGET}/${LAST_COMMIT}"
|
||||
NEW_COMMIT=$(git rev-parse HEAD)
|
||||
OLD_COMMIT=$(grep COMMIT "${LAST_COMMIT}" | cut -d'=' -f2)
|
||||
imageidList=($(sed 's/\(.*\)\..*/\1/' <<< $(git diff --name-only ${NEW_COMMIT} ${OLD_COMMIT}) | awk '!seen[$0]++' | grep SHA256))
|
||||
echo $LAST_COMMIT
|
||||
echo $NEW_COMMIT
|
||||
echo $OLD_COMMIT
|
||||
echo ${imageidList[@]}
|
||||
|
||||
cmd_deploy ${TARGET} ${imageidList[@]}
|
||||
case $? in
|
||||
0)
|
||||
_msg ECHO "Update completed succesfully"
|
||||
sed -i "s/COMMIT=.*/COMMIT=${NEW_COMMIT}/" ${LAST_COMMIT}
|
||||
;;
|
||||
|
||||
1)
|
||||
_msg ECHO "Missing exclude, manifest or exclude file. Please make sure you init"
|
||||
;;
|
||||
|
||||
2)
|
||||
_msg ECHO "Update completed with errors. Please review and deploy problematic images manually."
|
||||
sed -i "s/COMMIT=.*/COMMIT=${NEW_COMMIT}/" ${LAST_COMMIT}
|
||||
;;
|
||||
esac
|
||||
esac
|
||||
|
13
src/print_deployed_ids
Normal file
13
src/print_deployed_ids
Normal file
|
@ -0,0 +1,13 @@
|
|||
#!/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
|
||||
}
|
27
src/print_meta
Normal file
27
src/print_meta
Normal file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Prints metadata of specified TRACKNUMBER, from textfile following the MTAG specification. Outputs as standard FIELD=VALUE that can then be pipped into metaflac.
|
||||
###
|
||||
|
||||
|
||||
print_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]++'))
|
||||
|
||||
for tag in ${tagList[@]}; do
|
||||
local COUNT=1
|
||||
while [[ ${COUNT} -le ${TRACKNUMBER} ]]; do
|
||||
local PRTVAR=$(print_meta_track ${COUNT} ${tag} ${TAGS})
|
||||
[[ ! -z ${PRTVAR} ]] && local CURVAR=${PRTVAR}
|
||||
local COUNT=$(( ${COUNT} + 1 ))
|
||||
done
|
||||
echo -n "${tag}=${CURVAR};"
|
||||
unset CURVAR
|
||||
unset PRTVAR
|
||||
done
|
||||
echo -n "IMAGEID=$(sed 's|.tags||g' <<< ${MTAG})"
|
||||
}
|
||||
|
14
src/print_meta_field
Normal file
14
src/print_meta_field
Normal file
|
@ -0,0 +1,14 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Prints VALUE of FIELD, for specific TRACK NUMBER out of a JSON string. Expects to be used
|
||||
# by print_meta()
|
||||
###
|
||||
|
||||
print_meta_field() {
|
||||
local TRACK_NO="${1}"
|
||||
local FIELD="${2}"; shift 2
|
||||
local TAGS="${@}"
|
||||
|
||||
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}}'
|
||||
}
|
25
src/print_target_dir
Normal file
25
src/print_target_dir
Normal file
|
@ -0,0 +1,25 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Prints output dir based on provided metadata TAGS. Expects input from print_meta function.
|
||||
###
|
||||
|
||||
print_target_dir() {
|
||||
local TAGS="${@}"
|
||||
local tagList=(GENRE COMPOSER ALBUM ARTIST 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
|
||||
|
||||
if [[ "${GENRE}" == "Classical" ]]; then
|
||||
echo -n "${GENRE}/${COMPOSER}/${ALBUM}/${ARTIST}/${DATE} - ${PERFORMER}/"
|
||||
else
|
||||
echo -n "${GENRE}/${ARTIST}/${DATE} - ${ALBUM}/"
|
||||
fi
|
||||
[[ ${TOTALDISCS} -gt 1 ]] && echo -n "${DISCNUMBER}."
|
||||
printf "%02d" ${TRACKNUMBER}
|
||||
echo -n " - $(sed 's|/|-|g' <<< ${TITLE} | sed 's|?||g')"
|
||||
}
|
||||
|
16
src/split_flac
Normal file
16
src/split_flac
Normal file
|
@ -0,0 +1,16 @@
|
|||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Splits specified FLAC image into multiple flac files using a text file formatted under the
|
||||
# CUE specification
|
||||
###
|
||||
|
||||
split_flac() {
|
||||
local FLAC="${1}"
|
||||
local CUE="${2}"
|
||||
|
||||
[[ -z "$(cuebreakpoints ${CUE} 2>/dev/null)" ]] && { cat ${FLAC} > split-track01.flac; return 0; }
|
||||
cuebreakpoints ${CUE} 2>/dev/null | shntool split ${FLAC} -o flac -O always
|
||||
[[ $? -ne 0 ]] && { cuebreakpoints ${CUE} 2>/dev/null | sed s/$/0/ | shntool split ${FLAC} -o flac -O always; return 2; } || return 0
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue