Recently Written · git

dsad

Dmenu interface for Simple Audio Daemon

git clone https://github.com/equwal/dsad

Log | Files | Refs


commit a5438ed2fccd642c5105ba7765350ccdef55788c
Spenser Truex <truex@equwal.com>
2021-01-21 07:04:14 -0800

Remove complex "working directory" misfeature from sadd

 sad-add | 86 ++++++++++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 58 insertions(+), 28 deletions(-)
diff --git a/sad-add b/sad-add
index 6ef5e37..7327e47 100755
--- a/sad-add
+++ b/sad-add
@@ -1,51 +1,81 @@
 #!/bin/sh
-
-# Start with a folder or a "playlist".
-# A playlist is a newline-separated list of files/folders.
-# You can't have newlines in any files in a playlist.
 SAD_SOCK=${SAD_SOCK:-"$HOME"/.socket}
-SAD_PATH=${SAD_PATH:-"$HOME"/aud}
-SAD_PATH="$SAD_PATH"/$1
 SAD_DEFAULT_MODE=${SAD_DEFAULT_MODE:-"random"}
 
-
 # Portable echo. No arguments.
 echo () { printf %s\\n "$*" ; }
 
+usage () {
+    echo "usage: $0 [-p playlist] [subpaths...]"
+    echo "$0 mus/song.mp3"
+    echo "$0 mus/eminem"
+    echo "$0 -p mus/programming.list # can include folders or files."
+}
+
+[ -z "$*" ] && usage && exit 1
+
 nosock () {
     echo "Socket not found at $SAD_SOCK"
     echo "Did you start the SAD?\nsad -f $SAD_SOCK &"
 }
 nopath () {
-    echo "Playlist/folder not found at $SAD_PATH"
-    echo "You can set the working dir with SAD_PATH"
+    echo "Playlist/folder not found."
+    echo "You can set the working dir with."
 }
 
-[ -e "$SAD_SOCK" ] || nosock
-[ -e "$SAD_PATH" ] || nopath
+file () {
+    echo file
+    printf 'add %s\n' "$1" | nc -NU "$SAD_SOCK"
+}
 
-echo 'h'
+dir () {
+    find "$1" -type f \
+        \( -iname "*.mp3" -or \
+        -iname "*.ogg" -or \
+        -iname "*.flac" -or \
+        -iname "*.wav" \) \
+        -exec printf 'add %s\n' {} \; | \
+        nc -NU "$SAD_SOCK"
+}
+
+dispatch () {
+    if [ ! -e "$1" ]; then
+        echo "Path $1 not found"
+    else
+        if [ -f "$1" ]; then
+            file "$1"
+        else
+            dir "$1"
+        fi
+    fi
+}
+
+
+playlist () {
+    # dirname clobbers multiple trailing newlines
+    d=$(dirname "$1" ; echo x) ; d=${d%??}
+    while read -r p; do
+        dispatch "$d/$p"
+    done <<EOF
+$(cat "$1")
+EOF
+}
+
+[ -e "$SAD_SOCK" ] || nosock
 
 if [ ! -S "$SAD_SOCK" ]; then
 	echo "$0: no unix domain socket at: ${SAD_SOCK}" >&2
 	exit 1
 fi
 
-echo $SAD_SOCK $SAD_PATH
+echo "$SAD_DEFAULT_MODE" | nc -NU "$SAD_SOCK"
 
-while read -r p; do
-    d=$(dirname "$p")
-    echo $d
-    test -d "$d" || printf 'add %s\n' "$d" | nc -U "$SAD_SOCK"
-    find "$d" -type f \
-        \( -iname "*.mp3" -or \
-        -iname "*.ogg" -or \
-        -iname "*.flac" -or \
-        -iname "*.wav" \) \
-        -exec printf 'add %s\n' {} \; | \
-        nc -NU "$SAD_SOCK"
-done <<-!__EOF__
-$SAD_PATH
-!__EOF__
 
-echo
+while true; do
+        case $1 in
+            -h|--help)     usage; exit 0;;
+            -p|--playlist) playlist "$2"; shift 2; break;;
+            --)                           shift; break;;
+            *)             dispatch "$1"; shift; break;;
+        esac
+done