#!/bin/bash

set -e
set -f
set -u
set -o pipefail

_zenity(){
    zenity --width=250 --title="Doskast" "$@"
}

readonly config="/etc/doskastrc"

if ! . /etc/doskastrc ; then
    # || : to stabilize return code if clicking "Cancel" in zenity
    _zenity --error --text="Нет файла с настройками Doskast, запустите программу настройки!" || :
    exit 1
fi

if [ -z "${board:-}" ]; then
    _zenity --error --text="Неправильный файл настроек Doskast, запустите программу настройки!" || :
    exit 1
fi

IFS='x' read -a area < <(xdpyinfo | grep -oP 'dimensions:\s+\K\S+')
width="${area[0]}"
height="${area[1]}"
if [ -z "$width" ] || [ -z "$height" ]; then
    _zenity --error --text="Ошибка получения геометрии экрана." || :
    exit 1
fi

# На серверной стороне может быть ограничено кол-во одновременных соединений с одного IP-адреса
# для защиты от DDoS-атак. Имеет смысл установить ограничение в 1 запрос. Однако, если curl
# или серверный обработчик по каким-то причинам зависнут, то соединение будет открыто,
# способа его прибить кнопкой не будет,а новые соединения сервер не примет, пока это не будет закрыто.
if ! timeout 5 curl --fail "http://${board}/cgi-bin/doskast-trigger-connect.cgi?width=${width}&height=${height}"; then
    _zenity --error --text="Ошибка отправки запроса на доску." || :
    exit 1
fi

_zenity --info --text="На доску отправлен запрос на трансляцию экрана этого компьютера." || :
