#!/bin/bash

wait_for_process() {
    PNAME=$1
    while [ -z "$(/usr/bin/pgrep $PNAME)" ]; do
        sleep 3;
    done
}

start_notify() {
    local user="$1"
    local display="$2"

    export DISPLAY="$display"
    wait_for_process nm-applet

    for pid in `ps -U "$user" -o pid=`; do
        if grep -z -q XAUTHORITY /proc/$pid/environ; then
            XAUTHORITY=$(grep -z XAUTHORITY /proc/$pid/environ | cut -d= -f2- | tr -d '\0')
            export XAUTHORITY

            DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | tr -d '\0')
            export DBUS_SESSION_BUS_ADDRESS

            break
        fi
    done

#    if [ -z "$XAUTHORITY" ]; then
#        userhome="$(getent passwd "$user" | cut -d: -f6)"
#        XAUTHORITY="$userhome/.Xauthority"
#        export XAUTHORITY
#        echo 2
#    fi

    if [ -z "$XAUTHORITY" ]; then
        return
    fi
    XUSER="$user"
    export XUSER

    sudo -u "$XUSER" -H fly-dialog --msgbox '<a href=http://astralinux.ru><h1>Требуется действие для работы сети</h1></a>' &
#    sudo -u "$XUSER" -H timeout 20 fly-dialog --msgbox '<a href=http://astralinux.ru><h1>Требуется действие для работы сети</h1></a>' &
#    sudo -u "$XUSER" -H xdg-open https://astralinux.ru 2>&1 > /dev/null &
#    sudo -u "$XUSER" -H /usr/bin/notify-send -t 36000 '<a href=http://astralinux.ru>Требуется действие для работы сети</a>' &
#    sudo -u "$XUSER" -H /usr/bin/gdbus call --session --dest org.freedesktop.Notifications --object-path /org/freedesktop/Notifications --method org.freedesktop.Notifications.Notify Chromium 42 dialog-information "Внимание" '<a href="http://astralinux.ru">Требуется действие для работы сети</a>' '[]' {} 5000 &

}

case "$2" in
    connectivity-change)
        if [ "$CONNECTIVITY_STATE" = "PORTAL" ]; then
            if [ -x /bin/loginctl ]; then
                sess=$(loginctl --no-legend |awk '{print $1}')
                for s in $sess; do
                    display=$(loginctl show-session --property=Display "$s" | cut -f2 -d'=')
                    user=$(loginctl show-session --property=Name "$s" | cut -f2 -d'=')
                    if [ "$user" != "fly-dm" ]; then
                        start_notify $user $display
                    fi
                done
            else
                who | awk '$NF ~ /\(:[0-9]+\)/ { print $1 " " substr($NF, 2, length($NF)-2) };' | \
                while read user display; do
                    start_notify $user $display
                done
            fi
        fi
        ;;
    *)
        exit 0
        ;;
esac
