#!/bin/sh

PLEX_DIR="/var/packages/Plex Media Server/target"
PLEX_LIBRARY_PATH=`cat "$PLEX_DIR/plex_library_path"`
PID_FILE="$PLEX_LIBRARY_PATH/Plex Media Server/plexmediaserver.pid"
ARCH=$(uname -m)

if echo $ARCH | grep -q i.86; then
  PROCS=6
else
  PROCS=6
fi

start_plex ()
{
    # Verify device permissions are intact
    Changed=0

    # Ensure the TV Butler udev rule exists
    if [ ! -f /lib/udev/rules.d/60-tv-butler-fix.rules ]; then
      echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="0100", GROUP="video", MODE="0660"' > /lib/udev/rules.d/60-tv-butler-fix.rules
      Changed=1
    fi

    # Check if this model supports HW transcoding
    if [ -d /dev/dri ]; then

      # Ensure the HW Transcoding udev rule exists
      if [ ! -f /lib/udev/rules.d/60-fix-plex-hw-transcoding.rules ]; then
        echo 'SUBSYSTEM=="drm", GROUP="video"' > /lib/udev/rules.d/60-fix-plex-hw-transcoding.rules
        Changed=1

      # If the HW Transcoding udev rule exists, ensure it is correct
      elif [ "`grep -c drm /lib/udev/rules.d/60-fix-plex-hw-transcoding.rules`" -eq 0 ]; then
        echo 'SUBSYSTEM=="drm", GROUP="video"' > /lib/udev/rules.d/60-fix-plex-hw-transcoding.rules
        Changed=1
      fi

      # Check if permissions correct
      if [ "`ls -la /dev/dri/renderD128 | awk -F' ' '{print $4}'`" != "video" ]; then
        Changed=1
      fi
    fi

    # Retrigger udevadm if needed
    if [ $Changed -eq 1 ]; then
      sync
      udevadm trigger
      sleep 3
    fi

    # Continue with normal PMS start
    PLEX_PATH=$(/usr/syno/sbin/synoshare --get Plex | grep Path | awk -F[ '{print $2}' | awk -F] '{print $1}')
    su plex -s /bin/sh -c "export LC_ALL=en_US.utf8;export LANG=en_US.utf8;export LD_LIBRARY_PATH='$PLEX_DIR';export PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS=$PROCS; export PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR='$PLEX_LIBRARY_PATH';export TMPDIR=$PLEX_PATH/tmp_transcoding;ulimit -s 3000;sleep 3;/var/packages/Plex\ Media\ Server/target/Plex\ Media\ Server &"

    counter=20
    while [ $counter -gt 0 ]
    do
        plex_status && break
        let counter=counter-1
        sleep 1
    done
    # create DSM shortcut
    if [ ! -f "/usr/syno/synoman/webman/3rdparty/plex" ]
    then
        ln -s "$PLEX_DIR/dsm_config/plex" /usr/syno/synoman/webman/3rdparty
    fi
    plex_status
}

stop_plex ()
{
    # Kill Plex.
    if [ -f "$PID_FILE" ]
    then
        kill `cat "$PID_FILE"`
    fi
    rm -rf /usr/syno/synoman/webman/3rdparty/plex
}

plex_status ()
{
    if [ ! -f "$PID_FILE" ]
    then
        return 1
    fi
    if [ -d /proc/`cat "$PID_FILE"` ]
    then
        return 0
    else
        return 1
    fi
}

case $1 in
    start)
        echo Starting Plex ...
        start_plex
        exit $?
        ;;
    stop)
        echo Stopping Plex ...
        stop_plex
        exit $?
        ;;
    status)
        if plex_status
        then
            echo Plex is running
            exit 0
        else
            echo Plex is not running
            exit 1
        fi
        ;;
    log)
        echo "$PLEX_LIBRARY_PATH/Plex Media Server/Logs/Plex Media Server.log"
        exit 0
        ;;
    *)
        exit 1
        ;;
esac
