From 035443bd6980482b8b63a7d150ec50e5ec98530f Mon Sep 17 00:00:00 2001 From: TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:20:31 +0900 Subject: fix(qndl-artist): isolate mpd reindex in tests, report merge failures, harden map append --- ar/.local/bin/qndl-artist | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'ar/.local/bin/qndl-artist') diff --git a/ar/.local/bin/qndl-artist b/ar/.local/bin/qndl-artist index e276ddc..3ef8bbb 100755 --- a/ar/.local/bin/qndl-artist +++ b/ar/.local/bin/qndl-artist @@ -4,6 +4,7 @@ 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}" +PLAYLIST="${QNDL_MPD_PLAYLIST:-$HOME/.config/mpd/playlists/entire.m3u}" # 이름 → 표준명. 맵 정확일치 → 기존 폴더 대소문자무시 매칭 → 원본. cmd_normalize() { @@ -143,11 +144,16 @@ _map_add() { _v="$1"; _c="$2" [ -f "$ALIASES" ] || { mkdir -p "$(dirname "$ALIASES")"; : > "$ALIASES"; } awk -F'\t' -v v="$_v" '$1==v{f=1} END{exit f?0:1}' "$ALIASES" && return 0 + # 파일이 개행으로 끝나지 않으면 마지막 줄과 이어붙는 손상을 방지 + if [ -s "$ALIASES" ] && [ -n "$(tail -c1 "$ALIASES")" ]; then + printf '\n' >> "$ALIASES" + fi printf '%s\t%s\n' "$_v" "$_c" >> "$ALIASES" } cmd_merge_apply() { _groups="$1" + _failtmp="$(mktemp)" || return 1 printf '%s\n' "$_groups" | while IFS="$(printf '\t')" read -r _canon _rest; do [ -z "$_canon" ] && continue _oldifs="$IFS"; IFS="$(printf '\t')" @@ -155,7 +161,7 @@ cmd_merge_apply() { [ "$_mem" = "$_canon" ] && continue IFS="$_oldifs" find "$MUSIC/$_mem" -type f -name '*.mp3' 2>/dev/null | while IFS= read -r _f; do - cmd_apply "$_f" "$_canon" + cmd_apply "$_f" "$_canon" || printf 'x\n' >> "$_failtmp" done find "$MUSIC/$_mem" -type d -empty -delete 2>/dev/null || true _map_add "$_mem" "$_canon" @@ -163,13 +169,19 @@ cmd_merge_apply() { done IFS="$_oldifs" done + _fails="$(wc -l < "$_failtmp" | tr -d ' ')" + rm -f "$_failtmp" if command -v mpc >/dev/null 2>&1; then mpc update --wait >/dev/null 2>&1 && - find "$MUSIC" -name '*.mp3' | sed "s|$MUSIC/||" | sort \ - > "$HOME/.config/mpd/playlists/entire.m3u" 2>/dev/null || true + find "$MUSIC" -type f -name '*.mp3' | sed "s|$MUSIC/||" | sort \ + > "$PLAYLIST" 2>/dev/null || true + fi + if [ "${_fails:-0}" -gt 0 ]; then + printf 'merge --apply 완료 (%s개 실패/스킵).\n' "$_fails" + else + printf 'merge --apply 완료.\n' fi - printf 'merge --apply 완료.\n' } cmd_merge() { -- cgit v1.2.3