# old version (without -$pkgrel): ${1%%-*}
# new version (without -$pkgrel): ${2%%-*}

PKGNAME="vipnetclient-gui"

# arg 1:  the new package version
pre_install() {
    pre_upgrade $@
}

# arg 1:  the new package version
post_install() {
    post_upgrade $@
}

# arg 1:  the new package version
# arg 2:  the old package version
pre_upgrade() {
    markers(){
	rm -rf /tmp/vipnetclient
	mkdir -p /tmp/vipnetclient
	# Creating file-markers on each existing vipnetclient process and send them USR1
	for pid in $(pgrep -U0 -x vipnetclient); do
    	    local user=$(grep -awz USER /proc/${pid}/environ 2>/dev/null | tr -d '\0' | cut -c 6-)
    	    [ -z "$user" ] && continue
    	    echo ${pid} > /tmp/vipnetclient/${user}
	done
    }
    if [ -n $2 ] || ( [ -n $1 ] && which vipnetclient > /dev/null 2>&1 ); then # upgrade or replacing vipnetclient cli package
	markers
    fi
    true
}

# arg 1:  the new package version
# arg 2:  the old package version
post_upgrade() {
    reload(){
	printf "Reloading running processes "
	pkill -x --signal USR1 vipnetclient 2>/dev/null

	# wait for every marker to be deleted by a reloaded process
	for i in $(seq 60); do
    	    printf "."
    	    [ -z "$(ls -A /tmp/vipnetclient 2>/dev/null)" ] && break;
    	    for f in /tmp/vipnetclient/* ; do
        	ls /proc 2>/dev/null | grep -w "$(cat $f)" >/dev/null 2>&1 || rm -f $f
    	    done
    	    sleep 1
	done
        if [ -z "$(ls -A /tmp/vipnetclient 2>/dev/null)" ]; then
    	    printf " success\n"; 
	else
    	    printf " some processes are not reloaded\n"; 
	fi
	rm -rf /tmp/vipnetclient # not sure about it
    }

    # update man db
    mandb >/dev/null 2>&1

    #check OS
    #OS_RELEASE="$( grep -Po "^ID=\K\w+" /etc/os-release 2>/dev/null )-$( grep -Pom1 "^(VERSION|RELEASE).*=\"?\K[\w\.\,\-]+" /etc/os-release 2>/dev/null )"
    #[ $(echo "$OS_RELEASE" | grep -q "astra") ] perl -pi -e "s/Icon=VipnetClient/Icon=/var/lib/vipnet/icons/VipnetClient_48x48.png/g" "/usr/share/applications/ViPNet.desktop"

    # for some distrs
    find /var/lib/vipnet -type d -exec chmod 755 {} \;

    # update icon cache
    [ -x "$(which gtk-update-icon-cache)" ] && gtk-update-icon-cache -f -t /usr/share/icons/hicolor > /dev/null 2>&1
    # update MIME types
    [ -x "$(which update-mime-database)" ] && update-mime-database /usr/share/mime > /dev/null 2>&1
    [ -x "$(which update-desktop-database)" ] && update-desktop-database /usr/share/applications > /dev/null 2>&1

    touch /usr/share/applications/ViPNet.desktop

    # create service and init scripts
    if which systemctl >/dev/null 2>&1; then
	systemctl reset-failed
	systemctl stop vipnetclientdaemon*
    elif which update-rc.d >/dev/null 2>&1; then
	update-rc.d vipnetclient defaults 90 10 >/dev/null 2>&1
    fi

    /usr/bin/vipnetclient --setcap --version

    # Update shared libraries paths
    ldconfig 2>/dev/null

    if [ -n $2 ]; then # restart if upgrade
	echo "Restarting vipnetclient-gui (if any running)"
	pkill -f -USR1 vipnetclient-gui-bin 2>/dev/null
	reload
    elif [ -n $1 ] && [ -d /tmp/vipnetclient ] ; then # restart if replacing vipnetclient cli package
	reload
    fi
    true
}
# arg 1:  the old package version
pre_remove() {
    stop_gui(){
	pgrep -f vipnetclient-gui-bin > /dev/null 2>&1 || return 0 
	printf "Stopping vipnetclient GUI "
        pkill -f -INT vipnetclient-gui-bin 2>/dev/null
        for i in $(seq 60); do 
	    printf "."
    	    sleep 1
    	    if pgrep -f vipnetclient-gui-bin > /dev/null 2>&1 ; then
        	continue
    	    fi
    	    echo " done"
    	    return 0
	done
	# Kill'em all
	pkill -f -KILL vipnetclient-gui-bin 2>/dev/null
	echo " done"
	return 0
    }
#    [ -n $1 ] && exit 0 # no futher action for upgrade
    if [ -f /tmp/vipnetclient.replace ]; then 
	stop_gui
    else
	vipnetclient --cleanup
    fi
    true
}

# arg 1:  the old package version
post_remove() {
    # update icon cache
    [ -x "$(which gtk-update-icon-cache)" ] && gtk-update-icon-cache -f -t /usr/share/icons/hicolor > /dev/null 2>&1
    # update MIME types
    [ -x "$(which update-mime-database)" ] && update-mime-database /usr/share/mime > /dev/null 2>&1
    [ -x "$(which update-desktop-database)" ] && update-desktop-database /usr/share/applications > /dev/null 2>&1
#    if [ $1 -eq 1 ] || [ -f /tmp/vipnetclient.replace ]; then
#    	exit 0 # no futher action for upgrade/replace
#    fi
    # update man db
    mandb >/dev/null 2>&1
    # disable service and remove init scripts
    if which systemctl >/dev/null 2>&1; then
	systemctl disable vipnetclient-gui >/dev/null 2>&1
	if [ -f /etc/systemd/system/vipnetclient_gui_login.service ]; then
    	    systemctl disable vipnetclient_gui_login >/dev/null 2>&1
	fi
    elif which update-rc.d >/dev/null 2>&1; then
	update-rc.d -f vipnetclient-gui remove >/dev/null 2>&1
    else
	rm -f /etc/rc*/*vipnetclient-gui >/dev/null 2>&1
    fi
    # Update shared libraries paths
    ldconfig 2>/dev/null
    true
}
