#!/bin/bash # Ensure we have a valid TMPDIR if [ ! -d "${TMPDIR}" ]; then TMPDIR="`getconf DARWIN_USER_TEMP_DIR 2>/dev/null`" if [ ! -d "${TMPDIR}" ]; then TMPDIR="/var/tmp" fi if [ ! -d "${TMPDIR}" ]; then TMPDIR="/tmp" fi fi # Config HOST="vera.uberzach.com" TIMEOUT=10 SHARE="media" LOCK="${TMPDIR}/mountMedia.mounting" REMOTE_USER="${USER}" LOCAL_MEDIA="/Users/Shared/Plex" MEDIA_CHECK_DIR="TV/John Plays FIFA" # Globals OFFLINE=0 LOCAL_LINK=0 MEDIA="" # Allow forced updates if [ -n "${FORCE}" ] && [ "${FORCE}" -ne "0" ]; then FORCE=1 else FORCE=0 fi # Hack for mismatched usernames if [ "${USER}" == "tv" ]; then REMOTE_USER="atv" fi function cleanup { rm -f "${LOCK}" exit $1 } function findMedia { MEDIA="" # Find media at the root of any mounted volume with a name starting with $SHARE for i in "/Volumes/${SHARE}"*; do if [ -d "${i}" ] && [ -d "${i}/${MEDIA_CHECK_DIR}" ]; then MEDIA="${i}" fi done # Find offline media if we're offline if [ $OFFLINE -gt 0 ]; then if [ -z "${MEDIA}" ] && [ -d "${LOCAL_MEDIA}" ] && [ -d "${LOCAL_MEDIA}/${MEDIA_CHECK_DIR}" ]; then MEDIA="${LOCAL_MEDIA}" fi fi } function writeLinks { DEST="${1}" if [ -e "${HOME}/media" ] || [ -h "${HOME}/media" ]; then rm -f "${HOME}/media" ln -s "${DEST}" "${HOME}/media" else echo "No such path: ${HOME}/media" 1>&2 cleanup 1 fi } # Lock touch "${LOCK}" read MOUNT_PID < "${LOCK}" if [ -n "${MOUNT_PID}" ]; then if ps -A -o pid | grep -q "${MOUNT_PID}"; then sleep 5 exit 1 fi fi echo $$ > "${LOCK}" export MEDIA_MOUNTING=$$ # Determine if we have a remote link if [ -h "${HOME}/media" ] && readlink "${HOME}/media" | grep -qE "^${LOCAL_MEDIA}"; then LOCAL_LINK=1 fi # Skip this whole shebang if we've got a valid, remote link if [ $LOCAL_LINK -eq 0 ] && [ $FORCE -eq 0 ] && ~/bin/video/isMediaMounted; then cleanup 0 fi # Check for connectivity and server live-ness if ! ~/bin/video/timeout -t "${TIMEOUT}" nc -z "${HOST}" 548 >/dev/null 2>&1 || \ ! ~/bin/video/timeout -t "${TIMEOUT}" nc -z "${HOST}" 139 >/dev/null 2>&1; then echo "`basename "${0}"`: Host not available: ${HOST}" 1>&2 OFFLINE=1 fi # Drop local links if we're online if [ $OFFLINE -eq 0 ] && [ $LOCAL_LINK -ne 0 ]; then writeLinks "/var/empty" fi # At this point any valid link is acceptable if [ $FORCE -eq 0 ] && ~/bin/video/isMediaMounted; then cleanup 0 fi # Connect if needed and possible findMedia if [ -z "${MEDIA}" ] && [ $OFFLINE -eq 0 ]; then ~/bin/video/timeout -t 30 osascript -e 'tell application "Finder" to mount volume "smb://'"${REMOTE_USER}@${HOST}/${SHARE}"'"' sleep 5 fi # Create links to the best media we can find findMedia if [ -n "${MEDIA}" ]; then writeLinks "${MEDIA}" else echo "`basename "${0}"`: Unable to link media volume" 1>&2 cleanup 1 fi # Exit cleanly cleanup 0