play 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/bin/sh
  2. ## usage: play [-a] [selector_name [selector_args...]]
  3. # -a -> play -a; no -a -> play
  4. # selector == local must not take selector_args
  5. abspath() {
  6. echo "$(cd "$(dirname "$1")" >/dev/null||exit; pwd)/"
  7. }
  8. DATA_HOME=${XDG_DATA_HOME:-"$HOME/.local/share"}
  9. XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}
  10. XDG_DIRS="$DATA_HOME:$XDG_DATA_DIRS"
  11. SELECTOR_DIRS=''
  12. IFS=':'; for dir in $XDG_DIRS
  13. do
  14. SELECTOR_DIRS="$SELECTOR_DIRS:$dir/music/selectors"
  15. done
  16. SELECTOR_DIRS="$(abspath "$0")${SELECTOR_DIRS}"
  17. mkdir -p "$DATA_HOME/music/selectors"
  18. name="$(basename "$0")"
  19. if [ "$1" = '-h' ]
  20. then
  21. if [ "$name" = 'play' ]
  22. then
  23. append_arg='[-a] '
  24. action="Play"
  25. options="
  26. Options:
  27. -a\t\tappend to queue\n"
  28. else
  29. action="Enqueue"
  30. fi
  31. printf "
  32. Usage:
  33. \t%s %s[selector_name [selector_args]]
  34. %s music
  35. %b
  36. For more details see %s(1)\n" "$0" "$append_arg" "$action" "$options" "$name"
  37. exit
  38. fi
  39. if [ "$1" = '-a' ] || [ "$name" = 'queue' ]
  40. then
  41. append="-a"
  42. if [ "$1" = '-a' ]
  43. then
  44. shift
  45. fi
  46. fi
  47. if [ "$1" = "" ]
  48. then
  49. selector_name='local'
  50. else
  51. selector_name="$1"
  52. shift
  53. fi
  54. IFS=':'; for dir in $SELECTOR_DIRS
  55. do
  56. if [ -d "$dir" ] && ls "$dir" | grep "$selector_name" >/dev/null
  57. then
  58. selector="$dir/$selector_name/select"
  59. break
  60. fi
  61. done
  62. if [ "$selector" ]
  63. then
  64. PATH="$(abspath "$0"):$PATH"
  65. $selector "$@" | music $append
  66. else
  67. echo "selector ‘$selector_name’ not found"
  68. fi