#!/bin/sh
# synopkgland: the SDK steps run in synopkgland_sdk; the App's dsm-scripts/preupgrade runs from scripts/app/preupgrade.
synopkgland_sdk() (
if [ ! -e "${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}/executor" ] && [ ! -L "${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}/executor" ]; then
  if [ -e "${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}/daemon" ] || [ -L "${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}/daemon" ]; then
    "${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}/daemon/control" stop "${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}" "${SYNOPKG_PKGVAR:-/var/packages/SynoPkgGopeed/var}" || exit $?
  fi
  exit 0
fi
synopkgland_executor_upgrade_stop() {
  synopkgland_stop_error=$("${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}/executor/lifecycle" stop --package SynoPkgGopeed --upgrade 2>&1 >/dev/null) && return 0
  synopkgland_stop_status=$?
  case "$synopkgland_stop_error" in
    *"flag provided but not defined: -upgrade"*) "${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}/executor/lifecycle" stop --package SynoPkgGopeed; return $? ;;
  esac
  printf '%s\n' "$synopkgland_stop_error" >&2
  return "$synopkgland_stop_status"
}
stop_background_worker() {
  /usr/syno/bin/synosystemctl stop pkguser-SynoPkgGopeed-background.service && return 0
  # DSM's native uninstall stops the unit, then releases the package user's
  # systemd manager before preuninst, so a repeated stop fails. That is only
  # "already stopped" when no process runs the worker executable.
  [ -d /proc/self ] || return 1
  worker="$(readlink -f "${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}/background/worker")" || return 1
  for exe in /proc/[0-9]*/exe; do
    case "$(readlink "$exe" 2>/dev/null)" in
      "$worker"|"$worker (deleted)") echo "background worker still running" >&2; return 1 ;;
    esac
  done
  echo "background worker already stopped" >&2
}
result=0
stop_background_worker || result=1
"/var/packages/SynoPkgGopeed/target/daemon/control" stop "${SYNOPKG_PKGDEST:-/var/packages/SynoPkgGopeed/target}" "${SYNOPKG_PKGVAR:-/var/packages/SynoPkgGopeed/var}" || result=1
synopkgland_executor_upgrade_stop || result=1
exit "$result"
)
synopkgland_app="$(dirname "$0")/app/preupgrade"
"$synopkgland_app" "$@" || exit $?
synopkgland_sdk "$@"
