plexMonitor.sh 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/bash
  2. # Config
  3. EXEC_DIR="${HOME}/bin/video/plexMonitor"
  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. }
  21. # Sanity check
  22. if [ ! -d "${EXEC_DIR}" ] || [ ! -d "${TEMP_DIR}" ]; then
  23. echo "Bad config" 1>&2
  24. exit 1
  25. fi
  26. # Allow use in daemon mode
  27. LOOP_DELAY=0
  28. if [ -n "${1}" ] && [ "${1}" -gt 0 ]; then
  29. LOOP_DELAY=$1
  30. fi
  31. # Determine who we are
  32. MODE="PLAYING"
  33. CMD="plex-playing"
  34. if basename "${0}" | grep -qi GUI; then
  35. MODE="GUI"
  36. CMD="plex-gui"
  37. fi
  38. # Construct our runtime paths
  39. DATA_DIR="${TEMP_DIR}/plexMonitor"
  40. TEMP_FILE="`mktemp -t plexMonitor.XXXXXXXX`"
  41. # Get into position
  42. if [ ! -d "${DATA_DIR}" ]; then
  43. mkdir -p "${DATA_DIR}"
  44. fi
  45. cd "${DATA_DIR}"
  46. # Compare
  47. compareState
  48. # Sleep and repeat (if requested)
  49. while [ $LOOP_DELAY -gt 0 ]; do
  50. sleep $LOOP_DELAY
  51. compareState
  52. done
  53. # Cleanup
  54. rm -f "${TEMP_FILE}"
  55. exit 0