diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2026-07-01 15:47:31 +0900 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2026-07-01 15:47:31 +0900 |
| commit | 8e4c077f9c1d3f8487a5c79c832d2d6d51c7c881 (patch) | |
| tree | a582e250ec128cbec7abdb5695dcdf0616861653 /ar/.local | |
| parent | 70d8419836ff66966038805fad35502a5ae2647a (diff) | |
feat(qndl-artist): add normalize subcommand + alias map
Diffstat (limited to 'ar/.local')
| -rwxr-xr-x | ar/.local/bin/qndl-artist | 28 | ||||
| -rw-r--r-- | ar/.local/bin/tests/test-qndl-artist.sh | 24 |
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 |
