#!/bin/sh

case "$1" in
    --help|-v|--version) exec leechcraft-qt6 "$@" ;;
esac

xprop -root -remove _NET_NUMBER_OF_DESKTOPS \
      -remove _NET_DESKTOP_NAMES \
      -remove _NET_CURRENT_DESKTOP 2> /dev/null

# D-Bus autolaunch is broken
if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
    eval `dbus-launch --sh-syntax --exit-with-session`
fi

# LeechCraft is the session: restart it after a crash or on its request instead of letting the session end
quickCrashes=0
while :; do
    started=$(date +%s)
    leechcraft-qt6 --desktop --supervised "$@"
    status=$?

    case $status in
        0|129|130|143) exit $status ;;               # quit, or stopped by HUP, INT or TERM
        7) quickCrashes=0; continue ;;               # restart requested by LeechCraft
        254) exit $status ;;                         # AnHero: crashed while quitting
        255) ;;                                      # AnHero: crashed
        *) [ $status -gt 128 ] || exit $status ;;    # up to 128: refused to start, above: killed by a signal
    esac

    if [ $(( $(date +%s) - started )) -lt 60 ]; then
        quickCrashes=$((quickCrashes + 1))
    else
        quickCrashes=0
    fi
    if [ $quickCrashes -ge 3 ]; then
        echo "leechcraft-session: LeechCraft keeps crashing on startup, ending the session" >&2
        exit $status
    fi
    echo "leechcraft-session: LeechCraft exited with $status, restarting it" >&2
done
