Files
musicdl-catalog-sync-suite/catalog-sync/scripts/catalogsync/templates/download_all.sh
T

58 lines
1.6 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
APP_HOME="$(cd "${SCRIPT_DIR}/.." && pwd)"
CONFIG_FILE="${APP_HOME}/config/catalogsync.env"
# shellcheck source=./load_env.sh
source "${SCRIPT_DIR}/load_env.sh"
fail() {
echo "[download_all.sh] ERROR: $*" >&2
exit 1
}
require_var() {
local var_name="$1"
if [[ -z "${!var_name:-}" ]]; then
fail "Missing required config variable: ${var_name} (from ${CONFIG_FILE})"
fi
}
if [[ -f "${CONFIG_FILE}" ]]; then
load_env_file "${CONFIG_FILE}"
else
fail "Config file not found: ${CONFIG_FILE}. Copy catalogsync.env.example to catalogsync.env first."
fi
for required_var in LIBRARY_DIR DB_PATH INPUT_DIR LOG_DIR PYTHON_BIN VENV_DIR; do
require_var "${required_var}"
done
if [[ -n "${VENV_DIR:-}" && -x "${VENV_DIR}/bin/python" ]]; then
PYTHON_BIN="${VENV_DIR}/bin/python"
fi
if ! command -v "${PYTHON_BIN}" >/dev/null 2>&1; then
fail "PYTHON_BIN is not executable or not found in PATH: ${PYTHON_BIN}"
fi
mkdir -p "${LIBRARY_DIR}" "${APP_HOME}/data" "${INPUT_DIR}" "${LOG_DIR}" "$(dirname "${DB_PATH}")"
export PYTHONPATH="${APP_HOME}/app${PYTHONPATH:+:${PYTHONPATH}}"
LOG_FILE="${LOG_DIR}/download_all_$(date +%Y%m%d_%H%M%S).log"
exec > >(tee -a "${LOG_FILE}") 2>&1
echo "[download_all.sh] logging to ${LOG_FILE}"
EXTRA_ARGS=()
if [[ -n "${DOWNLOAD_SOURCES:-}" ]]; then
EXTRA_ARGS+=(--download-sources "${DOWNLOAD_SOURCES}")
fi
"${PYTHON_BIN}" -m musicdl.catalogsync.cli run \
--db "${DB_PATH}" \
--library-root "${LIBRARY_DIR}" \
--workers "${DOWNLOAD_WORKERS:-10}" \
"${EXTRA_ARGS[@]}" \
"$@"