plexMonitor.sh 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/bin/bash
  2. # Config
  3. EXEC_DIR="${HOME}/bin/video"
  4. TEMP_DIR="`getconf DARWIN_USER_TEMP_DIR`"
  5. # Compare the current state to the last one
  6. compareState() {
  7. CHANGED=1
  8. "${EXEC_DIR}/${CMD}" > "${TEMP_FILE}" 2>/dev/null
  9. if [ -r "${MODE}" ]; then
  10. diff "${TEMP_FILE}" "${MODE}" > /dev/null
  11. if [ $? -eq 0 ]; then
  12. CHANGED=0
  13. fi
  14. fi
  15. # If anything changed, note the update time and store the current state for future reference
  16. if [ $CHANGED -gt 0 ]; then
  17. date '+%s' > "${MODE}.lastUpdate"
  18. mv "${TEMP_FILE}" "${MODE}"
  19. fi
  20. # Special case for PLAYING mode -- it's a bit of a hack, but it saves a lot of code other places
  21. if [ $CHANGED -gt 0 ] && [ "${MODE}" == "PLAYING" ]; then
  22. LAST_PLAYING=$PLAYING
  23. PLAYING=0
  24. if grep -q 'PlayStatus\:Playing' "${MODE}"; then
  25. PLAYING=1
  26. fi
  27. if [ -z "${LAST_PLAYING}" ] || [ $LAST_PLAYING -ne $PLAYING ]; then
  28. echo $PLAYING > "PLAY_STATUS"
  29. cp "${MODE}.lastUpdate" "PLAY_STATUS.lastUpdate"
  30. fi
  31. fi
  32. }
  33. # Sanity check
  34. if [ ! -d "${EXEC_DIR}" ] || [ ! -d "${TEMP_DIR}" ]; then
  35. echo "Bad config" 1>&2
  36. exit 1
  37. fi
  38. # Allow use in daemon mode
  39. LOOP_DELAY="${1}"
  40. # Determine who we are
  41. MODE="PLAYING"
  42. CMD="plex-playing"
  43. if basename "${0}" | grep -qi GUI; then
  44. MODE="GUI"
  45. CMD="plex-gui"
  46. fi
  47. # Construct our runtime paths
  48. DATA_DIR="${TEMP_DIR}/plexMonitor"
  49. TEMP_FILE="`mktemp -t plexMonitor.XXXXXXXX`"
  50. # Get into position
  51. if [ ! -d "${DATA_DIR}" ]; then
  52. mkdir -p "${DATA_DIR}"
  53. fi
  54. cd "${DATA_DIR}"
  55. # Compare
  56. compareState
  57. # Sleep and repeat (if requested)
  58. if [ -n "${LOOP_DELAY}" ]; then
  59. while [ 1 ]; do
  60. sleep $LOOP_DELAY
  61. compareState
  62. done
  63. fi
  64. # Cleanup
  65. rm -f "${TEMP_FILE}"
  66. exit 0