summaryrefslogtreecommitdiff
path: root/ar/.local
diff options
context:
space:
mode:
Diffstat (limited to 'ar/.local')
-rwxr-xr-xar/.local/bin/qndl-artist28
-rw-r--r--ar/.local/bin/tests/test-qndl-artist.sh24
2 files changed, 52 insertions, 0 deletions
diff --git a/ar/.local/bin/qndl-artist b/ar/.local/bin/qndl-artist
new file mode 100755
index 0000000..d442c56
--- /dev/null
+++ b/ar/.local/bin/qndl-artist
@@ -0,0 +1,28 @@
+#!/bin/sh
+# qndl-artist — 아티스트 폴더/메타데이터 통일 헬퍼
+export LC_ALL="${LC_ALL:-C.UTF-8}"
+
+MUSIC="${XDG_MUSIC_DIR:-$HOME/Music}"
+ALIASES="${QNDL_ALIASES:-${XDG_DOTFILES_DIR:-$HOME/.dotfiles}/global/Music/artist-aliases.tsv}"
+
+# 이름 → 표준명. 맵 정확일치 → 기존 폴더 대소문자무시 매칭 → 원본.
+cmd_normalize() {
+ _name="$1"
+ if [ -f "$ALIASES" ]; then
+ _c="$(awk -F'\t' -v n="$_name" '/^#/ || NF < 2 { next } $1 == n { print $2; exit }' "$ALIASES")"
+ [ -n "$_c" ] && { printf '%s\n' "$_c"; return 0; }
+ fi
+ if [ -d "$MUSIC" ]; then
+ _m="$(find "$MUSIC" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' 2>/dev/null |
+ awk -v n="$_name" 'tolower($0) == tolower(n) { print; exit }')"
+ [ -n "$_m" ] && { printf '%s\n' "$_m"; return 0; }
+ fi
+ printf '%s\n' "$_name"
+}
+
+_sub="${1:-}"
+[ $# -gt 0 ] && shift
+case "$_sub" in
+normalize) cmd_normalize "$@" ;;
+*) printf 'usage: qndl-artist {normalize|apply|apply-download|merge} ...\n' >&2; exit 2 ;;
+esac
diff --git a/ar/.local/bin/tests/test-qndl-artist.sh b/ar/.local/bin/tests/test-qndl-artist.sh
new file mode 100644
index 0000000..d62e837
--- /dev/null
+++ b/ar/.local/bin/tests/test-qndl-artist.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+# 격리 fixture 하네스. 실행: sh tests/test-qndl-artist.sh
+set -u
+BIN="$(CDPATH= cd "$(dirname "$0")/.." && pwd)/qndl-artist"
+FAIL=0
+pass() { printf 'ok - %s\n' "$1"; }
+fail() { printf 'FAIL - %s\n expected: [%s]\n actual: [%s]\n' "$1" "$2" "$3"; FAIL=1; }
+eq() { if [ "$2" = "$3" ]; then pass "$1"; else fail "$1" "$2" "$3"; fi }
+
+# --- fixtures ---
+TMP="$(mktemp -d)"
+trap 'rm -rf "$TMP"' EXIT
+export XDG_MUSIC_DIR="$TMP/Music"
+export QNDL_ALIASES="$TMP/aliases.tsv"
+mkdir -p "$XDG_MUSIC_DIR"
+printf '# header\n4MEN\t4Men\n' > "$QNDL_ALIASES"
+mkdir -p "$XDG_MUSIC_DIR/Epik High" "$XDG_MUSIC_DIR/4Men"
+
+# --- normalize ---
+eq "normalize: map hit" "4Men" "$("$BIN" normalize '4MEN')"
+eq "normalize: case fallback" "Epik High" "$("$BIN" normalize 'EPIK HIGH')"
+eq "normalize: unknown as-is" "NewArtist" "$("$BIN" normalize 'NewArtist')"
+
+exit $FAIL