#!/bin/bash
# Start fox desktop envoirenment

# Test if you are already logged in
mkdir -p "$HOME/.cache/foxdelogins"

if [ -n "$X2GO_SESSION" ] && [[ "$(ls "$HOME/.cache/foxdelogins" | wc -l)" > 0 ]] ; then
	SESSIONS="$(ls "$HOME/.cache/foxdelogins" | tr '\n' ',' | sed -e 's/,$//' -e 's/,/, /g')"
	if [ ! "$SESSIONS" = "$HOSTNAME" ] || [[ "$(x2golistsessions|wc -l)" > 1 ]] ; then
		if kdialog --warningyesno "<b>Sie sind schon auf einem anderen Server angemeldet ($SESSIONS)</b><br><br>Doppelte Anmeldungen können zu Abstürzen und anderen Fehlern führen,<br>deshalb bitten wir Sie sich an einer bereits bestehenden Sitzung anzumelden.<br>Sollte dies nicht möglich sein bitten wir Sie sich an die IT zu wenden.<br><br>Sie können sich auf eigenes Risiko mehrfach anmelden,<br>in diesen Fall sollten Sie die Sitzung nicht pausieren und<br>mit möglicherweise instabielen Verhalten in allen Sitzungen rechnen."\
		             --no-label "Verstanden, Trotzdem Anmelden"\
		             --yes-label "Ok, Hier nicht anmelden" ; then
			exit
		fi
	fi
fi

FOXDE_HOSTNAME="$(hostname)"

touch "$HOME/.cache/foxdelogins/$FOXDE_HOSTNAME" || true

on_exit() {
	rm "$HOME/.cache/foxdelogins/$FOXDE_HOSTNAME" || true
}

trap on_exit EXIT

# Set volume for pulseaudio client systems
if [ -f "/is-meet-system" ] || [ -f "/is-x2go-client" ] ; then
	unmute_stuff() {
		# ugly but works
		while ! pgrep -u "$(id -u)" pulseaudio ; do
			sleep 5
		done
		sleep 1
		pactl set-sink-mute @DEFAULT_SINK@ false
		pactl set-sink-volume @DEFAULT_SINK@ 70%
		pactl set-source-mute @DEFAULT_SOURCE@ false
		pactl set-source-volume @DEFAULT_SOURCE@ 70%
	}
	unmute_stuff&
fi

if df --output=fstype "$HOME" | grep -q tmpfs && [ ! -f "/is-x2go-client" ] ; then
	kdialog --msgbox "<p>Aus Gründen der Informationssicherheit und des Datenschutzes werden<br>auf diesem <b>Computer alle Dateien und Einstellungen beim Herunterfahren gelöscht</b><br>um ihn bedenkenlos weitergeben zu können.</p> <p>Dateien und Links können über <a href=\"https://cloud.treuchtlingen.de\">cloud.treuchtlingen.de</a> übertragen werden.</p>" --title "Über dieses Videokonferenzsystem" --ok-label "Ich habe verstanden"&
fi

# Turn numlock on if numlockx is present and not an x2go session
[ -z "$X2GO_SESSION" ] && command -v numlockx >/dev/null 2>/dev/null && numlockx on

# Update xdg directories if xdg-user-dirs-update is present
which xdg-user-dirs-update && xdg-user-dirs-update

if  [ -n "$X2GO_SESSION" ] ; then
	# export a XDG_RUNTIME_DIR in case it isn't already set
	[ -z "$XDG_RUNTIME_DIR" ] && export XDG_RUNTIME_DIR="$TEMPDIR/runtime-$USER/"

	clear_user_caches() {
		# delete qmlcache and shader caches because they cause problems when
		# switching servers the grep is an additional safeguard in case of a major fuckup
		printf "%s\n" "Trying to delete cache folders …"
		printf "%s" "qmlcache … "
		find "$HOME/.cache/" -type d -name qmlcache | grep qmlcache | xargs --no-run-if-empty rm -rf && echo "✅" || echo "❌"
		printf "%s" "qtshadercache … "
		find .cache -type d -name 'qtshadercache-*' | grep qtshadercache | xargs --no-run-if-empty rm -r && echo "✅" || echo "❌"
		printf "%s" "mesa_shader_cache … "
		rm -r .cache/mesa_shader_cache && echo "✅" || echo "❌"
	}

	clear_user_caches

	if [ -f /etc/nologinmsg ] ; then
		NOLOGINMSG="$(cat /etc/nologinmsg)"
		[ -z "$NOLOGINMSG" ] && NOLOGINMSG="Aktuell steht dieser Server nicht zur Verfügung!"
		kdialog --msgbox "$NOLOGINMSG" --title "Server ist aktuell gesperrt." --ok-label "Abmelden"
		x2goterminate-session
	else
		startplasma-x11
	fi
	
	# clear cache after logging out too
	clear_user_caches
elif command -v startfoxclient >/dev/null 2>/dev/null ; then
	startfoxclient
else
	startplasma-x11
fi

