You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.6 KiB

  1. #!/bin/sh /etc/rc.common
  2. NAME='shairport-sync'
  3. START=99
  4. USE_PROCD=1
  5. append_arg() {
  6. local cfg="$1"
  7. local var="$2"
  8. local opt="$3"
  9. local def="$4"
  10. local val
  11. config_get val "$cfg" "$var"
  12. [ -n "$val" -o -n "$def" ] && procd_append_param command $opt "${val:-$def}"
  13. }
  14. append_bool() {
  15. local cfg="$1"
  16. local var="$2"
  17. local opt="$3"
  18. local def="$4"
  19. local val
  20. config_get_bool val "$cfg" "$var" "$def"
  21. [ "$val" = 1 ] && procd_append_param command "$opt"
  22. }
  23. start_shairport_service() {
  24. local cfg=$1
  25. local stuffing
  26. local device
  27. procd_open_instance
  28. procd_set_param command /usr/bin/$NAME
  29. append_arg "$cfg" name "-a"
  30. append_arg "$cfg" port "-p"
  31. append_arg "$cfg" airplaylatency "-A"
  32. append_arg "$cfg" ituneslatency "-i"
  33. config_get stuffing "$cfg" stuffing ""
  34. if [ -n "$stuffing" ] ; then
  35. case "x$stuffing" in
  36. ( "xbasic" ) procd_append_param command -S basic ;;
  37. ( "xsoxr" ) procd_append_param command -S soxr ;;
  38. ( * ) logger "bad argument for -S option -- should be \"basic\" or \"soxr\"" ;;
  39. esac
  40. fi
  41. append_arg "$cfg" beforeaction "-B"
  42. append_arg "$cfg" afteraction "-E"
  43. append_bool "$cfg" awaitactioncompletion "-w"
  44. config_get device "$cfg" device ""
  45. if [ -n "$device" ] ; then
  46. procd_append_param command "--"
  47. append_arg "$cfg" device "-d"
  48. append_arg "$cfg" devicetype "-t"
  49. append_arg "$cfg" volumecontrolname "-c"
  50. fi
  51. procd_close_instance
  52. }
  53. service_triggers() {
  54. procd_add_reload_trigger $NAME
  55. }
  56. start_service() {
  57. config_load $NAME
  58. # Just a single instance
  59. start_shairport_service "main"
  60. }