#!/bin/bash
v=200430 #sfs
#yad --form true $(ls -1 / | tr '\n' '\!') false --field test2:CHK --field test:CB --field test3:CHK
sudo mkdir -p /tmp/netctl
TRAYX(){
#ntf -i TRAYX &
#sudo pkill -x trayeth-mon 
#sudo pkill -x traygsm-mon
#sudo pkill -x traywifi-mon
sudo kill `pidof -x trayeth-mon traywifi-mon traygsm-mon`
sudo pkill -f "Переключатель сетевых профилей netctl"
sudo rm /tmp/menutray.*
} #; export -f TRAYX
TRAYX
[ -e /usr/lib/netctl/network ] && network=/usr/lib/netctl/network || network=/usr/lib/network/network

AUTO(){ ##/etc/rc.d
i=10 ;p="$1"
. "/etc/netctl/$p" 
while [ $i -gt 0 ] ;do 
    i=$(($i-1))
XX(){
    sleep 2
    echo $i ;ifconfig -a
    if [ "`echo $Interface |grep -v USB`" ] ; then #не модем
	ifconfig -a |egrep '^'$Interface':' || continue
    fi
}
ifconfig $Interface && { 
#/usr/local/bin/netctl.sh "ethernet-dhcp" 2>&1 >>/2222 ;exit 
    echo "$Interface check $i"
    ifconfig $Interface down 
    sudo $network start "$p" && sudo touch "/tmp/netctl/$p"
#    /usr/local/bin/inet-test 10 /usr/local/bin/rdate.sh 
    exit
} || sleep 1 
done
exit
}
[ "$1" ] && AUTO "$1"

value() { egrep -o "(^| )$1=[^ ]+" /proc/cmdline | cut -d= -f2; } #sfs
LIST(){
j1="`find $e -maxdepth 1 -type f`"
for i in $j1;do
    a="$a$(awk -F Description= '/^Description=/ && !/wireless/ {print "'`basename $i`' - "$2"!"}' $i)"
done 
echo $a
}
#[ -e /usr/bin/rc ] && rc=1
pidof systemd || rc=1
NCS(){
p="`netctl list |sed 's/^[*+]\ //' |tr -d " "`"
for i in $p ;do
    if [ "$rc" ];then
	#i="`echo $i|tr -d " "`"
	[ -x "`find /etc/rc.d/ -maxdepth 1 -type f |grep -Fx "/etc/rc.d/net-$i"`" ] && as=" ; автостарт" || as=

	. /etc/netctl/$i ; [ "`echo $Interface |grep USB`" ] && Interface=ppp0
	#XXXncs(){
	#ntf -i "$Interface-`ifconfig |egrep '^'$Interface':'`-"
	#[ "`ifconfig |egrep '^'$Interface':'`" ] && st="запущен" ||st="остановлен"
	if [ "`iwconfig $Interface`" ];then
	    [ "$ESSID" = "$(iwconfig |awk -F\" '/^'$Interface'/ {print $2}')" ] && st="запущен" ||st="остановлен"
	    #ntf -i "$Interface-$ESSID-" "-$(iwconfig |awk -F\" '/^'$Interface'/ {print $2}')-"  &
	else [ "`ifconfig |egrep '^'$Interface':' |grep ",RUNNING"`" ] && st="запущен" ||st="остановлен"
	fi 
	#}
	#[ -f "/tmp/netctl/$i" ] && st="запущен" ||st="остановлен"
        echo "<u>$i:</u> $st $as"
    else
#	[ "`netctl status $i |awk  '/Loaded:/ {print $4}'`" = "enabled)" ] 
	[ "`netctl is-enabled $i`" = "enabled" ] && as=" ; автостарт" || as=
	#[ "`netctl status $i |awk  '/Loaded:/ {print $4}'`" = "enabled;" ] && as=" ; автостарт" || as=
#        echo "<u>$i:</u> `netctl status $i |awk  '/Active:/ {print $2}' |sed 's/inactive/остановлен/' |sed 's/active/запущен/'`$as"
        echo "<u>$i:</u> `netctl is-active $i |sed 's/inactive/остановлен/' |sed 's/active/запущен/'`$as"
    fi
done
} #; export -f NCS
#NCS ;exit

START(){
TRAYX
. "/etc/netctl/$1"
#[ "`ifconfig |egrep '^'$Interface':' |grep ",RUNNING"`" ]  && (ntf -i "$Interface уже используется" &)  && (netctl-stat &) && return
`which sudo` ifconfig $Interface down 
    if [ "$rc" ];then
        wt -start "Запуск профиля сети $1"
        #ntf -i  "`sudo network start $1 2>&1 |sed 's/<3>//g'`" 
        #ntf -i  "`sudo network start $1 2>&1 |sed 's/<3>//g' && wt -kill || wt -kill`" 
        ##XX#ntf -i  "`sudo network start $1 2>&1 |egrep -v '^Starting' |sed 's/<3>//g' && echo ddd >/1 && wt -kill || wt -kill`" 
        #ntf -i  "`sudo network start "$1" 2>&1 |egrep -v '^Starting' |sed 's/<3>//g' && wt -kill || wt -kill`" &
        ret=
        ret="`sudo $network start "$1" 2>&1 && touch "/tmp/netctl/$1"`"
        wt -kill
        ntf -i "`echo "$ret"|egrep -v '^Starting' |sed 's/<3>//g'` " &
    else    
	sudo wt "netctl start $1"
    fi
#        [ "$Connection" = mobile_ppp ] && mdm=20 && wt -s "sleep $mdm" "$mdm сек. ожидаем модемное соединение" 
if [ "$Connection" = mobile_ppp ] ;then
    #&& mdm=20 && 
    wt -start "Ожидаем модемное соединение" 
    c=0 ;c1=30
    while [ $c -lt $c1 ]  ;do
	let c=$c+1
	[ "`ifconfig |egrep '^ppp0: ' |grep RUNNING`" ] && break
	sleep 1
#    ntf -i "Интернет подключен" &
#    sudo rdate -s tick.greyware.com &
    done
    wt -kill
fi

TRAYOLD(){
    	if [ ! "`pgrep -f /usr/local/bin/traywifi`" ];then
    	    [ "$ESSID" ]  && traywifi &
    	fi
	sleep 4
	if [ "`ifconfig ppp0`" ];then
	    [ "`pgrep -f traygsm`" ] || (sleep 1 && `which sudo` traygsm) &
	fi
}

} #; export -f START

STOP(){
    TRAYX
    if [ "$rc" ];then
        #ntf -i  "`sudo network stop $1 2>&1 |egrep -v '^Stopping'  |sed 's/<3>//g'`" &
        ret=
        ret="`sudo $network stop "$1" 2>&1 && rm "/tmp/netctl/$1"`"
        ntf -i  "`echo "$ret" |egrep -v '^Stopping'  |sed 's/<3>//g'` " &
    else    
	sudo wt "netctl stop  $1"
    fi
} #; export -f STOP

ENA(){
    if [ "$rc" ];then
#    echo '#!/bin/ash
#mkdir -p /tmp/netctl
#(sudo /usr/lib/network/network start "'$1'" && sudo touch "/tmp/netctl/'$1'") &' > "/etc/rc.d/net-$1" && chmod 755 "/etc/rc.d/net-$1" #&& \
    echo '#!/bin/ash
/usr/local/bin/netctl.sh "'$1'" &' > "/etc/rc.d/net-$1" && chmod 755 "/etc/rc.d/net-$1" 
#    (ntf -i "Профиль сети $1" "будет запускаться при старте системы" &) || (ntf -e "Ошибка $1" &)
    else    
	sudo wt "netctl enable $1"
    fi
} #; export -f ENA

DISA(){
    if [ "$rc" ];then
    chmod 644 /etc/rc.d/net-$1 #&& \
#    (ntf -i "Профиль сети $1" "НЕ будет запускаться при старте системы" &) || (ntf -e "Ошибка $1" &)
    else    
	sudo wt "netctl disable $1"
    fi
} #; export -f DISA

ED(){
eth="`iwconfig 2>&1 | awk '!/^lo/ && !/^$/ && !/^ppp/ {print $1}'`"
[ "`echo $eth |wc -w`" = "1" ] || eth=eth0
#p=/etc/netctl/examples/ethernet-dhcp

t="$(sed 's/=eth0/='$eth'/g' "$1" | yad  --title netctl-edit --center \
    --width=400 --height=300 \
    --window-icon=gtk-network \
    --image-on-top --image="edit48" \
    --text "<b>Измените шаблон в соответствии с имеющимися интерфейсами:</b>
`iwconfig 2>&1 | egrep -v '^lo' |egrep 'wireless|IEEE' |sed ':a;N;$!ba;s/\n/\n#/g'`" \
    --text-info --editable \
    --text-listen \
    --button gtk-save:0 \
    --button gtk-save-as:2 \
    --button gtk-quit:1
)"
rt="$?"
xxxCFG(){
cfg="`yad  --title "Сохранение профиля netctl" --center \
    --width=600 --height=400 \
    --window-icon=gtk-file \
    --file --filename="/etc/netctl/" \
    --text="Введите имя профиля"`" && ret2= || ret2=1
}

CFG(){
cfg="`yad  --title "Сохранение профиля netctl" --center \
    --Xwidth=600 --Xheight=400 \
    --window-icon=gtk-file \
    --entry \
    --text="Введите имя профиля"`" && ret2= || ret2=1
#    --text="Введите имя профиля"`"
#ntf -w "$? " 
}

if [ "$rt" = "2" ];then
CFG2(){
CFG 
[ "$ret2" ] && return
[ "$cfg" ] || { ntf -a "Имя файла профиля не выбрано" ; CFG2 ; return ; }
[ "`dirname "$cfg"`" = "." ] && sudo echo "$t" > "/etc/netctl/$cfg" || { ntf -a "/etc/netctl/$cfg " "Профиль должен находиться в /etc/netctl" ; CFG2 ; return ; }
}
CFG2
else [ "$t" ] && sudo echo "$t" >/etc/netctl/"`basename $1`"
fi
} #; export -f ED

EXIT(){
($0 &) && exit
} #; export -f EXIT

NEW(){
#sudo pkill -f "Переключатель сетевых профилей netctl" 
TRAYX
    e=/etc/netctl/examples/
    m="<b>Настройка нового профиля сети</b>
Выберите подходящий шаблон для настройки из 
<i>$e</i>"
a= ;LIST
wifi="Wifi-menu - настройка беспроводных соединений"
netauto="Net-auto - настройка сети"
y="$(echo $a$wifi!$netauto |tr '!' '\n' |yad \
    --title "Настройка нового профиля сети" --center \
    --window-icon=gtk-network \
    --image-on-top --image="connect48" \
    --text "\
$m:" \
--list  \
--no-headers \
--column="Настроенные профили:" \
--height=380 --width=470 \
)" 

[ "$?" = "1" ] && return
[ "`echo $y|egrep "$netauto"`" ] && (net-auto &) && exit
[ "`echo $y|egrep "$wifi"`" ] && (sudo wifi-menu.sh  &) && exit
#[ "`echo $y|egrep "$wifi"`" ] && { (sudo net-auto -wi-fi  &) ; exit ; }
p="`echo $y|awk '{print $1}'`"
ED "/etc/netctl/examples/$p" 
} 

RM(){
sudo rm "/etc/netctl/$1" "/etc/rc.d/net-$1" ; TRAYX #sudo pkill -f "Переключатель сетевых профилей netctl"
} ; export -f RM

I(){
#NCS ;exit
wt -start "проверка сетей"
for p in `netctl list |sed 's/^[*+]/ /' |tr -d ' '` ;do
#ntf -w "=$p="
    . /etc/netctl/$p ; 
    ic3=network2
    [ "$Connection" = "mobile_ppp" ] && Interface=ppp0 && ic3=modem
    [ "$Connection" = "wireless" ]  && ic3=wireless
    [ "$Connection" = "ethernet" ]  && ic3=network_connect
if [ "`NCS | grep -F $p: |grep запущен`" ] ;then
    pr=true ; pra="STOP \"$p\""; ps="`printf "запущен.\nНажать для остановки"`"
    ic=/usr/share/pixmaps/media-play.svg #; ic=media-play
    pt="$p : `ifconfig $Interface |awk '/ inet / {print $2}'`"
else
    pr=false; pra="START \"$p\""; ps="остановлен. 
Нажать для запуска" ; ic=/usr/share/pixmaps/media-pause.svg #;ic=gtk-media-stop
    pt="$p"
fi

if [ "`NCS | grep -F $p: |grep автостарт`" ] ;then
    pa=true ; paa="DISA \"$p\"" ; ic2=/usr/share/pixmaps/add.svg
else
    pa=false; paa="ENA \"$p\"" ; ic2=/usr/share/pixmaps/remove.svg
fi
#NCS | grep $p:  ;echo "$p $pr"
    i2='
    '$i2'
    <hbox>
    			<togglebutton tooltip-text="'$p' '$ps'">
				<label>""</label>
				<default>'$pr'</default>
#				<variable>r'$p'</variable>
#				<action>echo Checkbox is $CHECKBOX now.</action>
				<height>22</height>
				<width>22</width>
				<input file>'$ic'</input>
				<action>if true enable:R'$p'</action>
				<action>if false disable:R'$p'</action>
				<action>if true enable:R'$p'</action>
#				<action>'$pra' &</action>
				<action>EXIT:'$pra'</action>
			</togglebutton>

	<pixmap><height>22</height><width>32</width><input file icon="'$ic3'"></input></pixmap>

#			<entry editable="false" primary-icon-name="'$ic3'">
			<entry editable="false">
				<default>'$pt'</default>
#				<variable>R'$p'</variable>
				<sensitive>'$pr'</sensitive>
			</entry>

    			<togglebutton tooltip-text="Автостарт '$p'">
				<label>""</label>
				<height>22</height>
				<width>22</width>
				<input file>'$ic2'</input>
				<default>'$pa'</default>
#				<variable>E'$p'</variable>
#				<action>'$paa' &</action>
				<action>EXIT:'$paa'</action>
			</togglebutton>

    <button tooltip-text="Редактировать профиль">
     <input file icon="gtk-edit"></input>
     <action>EXIT:ED "/etc/netctl/'$p'"</action>
#        <label>Подключить</label>
    </button>

    <button tooltip-text="Удалить профиль">
     <input file icon="gtk-delete"></input>
#     <action>RM '$p'</action>
     <action>EXIT:RM "'$p'"</action>
    </button>

    </hbox>
    '
done
wt -kill
}
i2= ;I
#echo $i2 ;exit
if [ "`pgrep -f "Переключатель сетевых профилей netctl"`" ];then
    traye=true  ;trayed=trayd
else
    traye=false ;trayed=traye
fi

if [ -f "/home/`sfsusr`/.config/autostart/netctl-tray.desktop" ];then
    traya=true  ;trayaed=trayad
else
    traya=false ;trayaed=trayae
fi

XML='
<window title="Netctl. Настройка сети v.'$v'" resizable="true" decorated="true" border-width="15" window_position="1" icon-name="connect48">
<vbox height="450">
#    <hbox>
#	<pixmap><height>32</height><width>32</width><input file icon="network_connect"></input></pixmap>
#	<text width-request="400"><label>"NetCtl профили настройки сети:"</label></text>
#    </hbox>

  <vbox scrollable="true" hscrollbar-policy="2"  width="400" height="200">
#  <vbox scrollable="true" hscrollbar-policy="2"  width="400">
#  <vbox scrollable="true" hscrollbar-policy="2"  width="400" height-request="0">
   <hbox width-request="0"  space-expand="true">

    <button tooltip-text="Создать новый профиль
WiFi подключения">
     <input file icon="wireless"></input>
#     <action>wifi-menu.sh &</action>
     <action>net-auto -wi-fi &</action>
     <action>EXIT:</action>
        <label>Новый Wi-Fi профиль</label>
    </button>

    <button tooltip-text="Создать новый профиль на основе шаблона">
     <input file icon="gtk-add"></input>
     <action>EXIT:new</action>
        <label>Создать профиль</label>
    </button>
   </hbox>
#	<hseparator height-request="100"></hseparator>
	'$i2'
  </vbox>

    <hbox>
'
[ `netctl list |wc -l` -ge 1 ] && XML=''$XML'
    	<text><label>"Трей:"</label></text>
    			<checkbox tooltip-text="Переключатель профилей
в трее">
				<label>""</label>
				<default>'$traye'</default>
				<action>EXIT:'$trayed'</action>
			</checkbox>

    			<checkbox tooltip-text="Переключатель профилей
в автозагрузке">
				<label>""</label>
				<default>'$traya'</default>
				<action>EXIT:'$trayaed'</action>
			</checkbox>
	<vseparator width-request="55"></vseparator>
'
XML=''$XML'
#	<button help></button>
    <button tooltip-text="Справка">
     <input file icon="gtk-help"></input>
     <action>EXIT:Help</action>
#        <label>Настройки сети</label>
    </button>

    <button tooltip-text="Просмотр сетевых настроек">
     <input file icon="gtk-info"></input>
     <action>EXIT:ipinfo</action>
    </button>
'

[ "`value changes`" ] || \
XML=''$XML'
    <button tooltip-text="Сохранение в модуль.pfs
всех сетевых настроек">
     <input file icon="gtk-save"></input>
     <action>EXIT:save</action>
        <label>Сохранить</label>
    </button>
'
XML=''$XML'
    <button tooltip-text="Выход">
     <input file icon="gtk-quit"></input>
     <action>EXIT:Cancel</action>
        <label>Выход</label>
    </button>

#	<button ok></button>
#	<button cancel></button>
    </hbox>
</vbox>
</window>
'
export NETCTL="`echo "$XML" | sed -e 's/#.*//'`"
ret="`gtkdialog --program=NETCTL --center`"
echo "$ret" #;exit
p="`echo "$ret" |awk -F= '/^EXIT=/ {print $2}' |sed 's/\"//g'`"

trd="/home/`sfsusr`/.config/autostart/netctl-tray.desktop"
case "$p" in
    abort|Cancel) exit ;;
    Help)	(defaultbrowser "https://wiki.archlinux.org/index.php/Netctl_(Русский)" &) ; EXIT ;;
    ipinfo)	ipinfo ; EXIT ;;
    new)	NEW ; EXIT ;;
    save)	create-save-pfs net ; EXIT ;;
#    traye)	netctl-tray ; EXIT ;;
    traye)	netctl-tray  ;;
    trayd)	TRAYX ; EXIT ;;
    trayad)	wt "rm "$trd"" ; EXIT ;;
    trayae)

echo "\
[Desktop Entry]
Type=Application
Icon=connect48
Name=Переключатель профилей сети
Comment=Переключатель netctl профилей сети в трее
Exec=netctl-tray" >"/home/`sfsusr`/.config/autostart/netctl-tray.desktop" && chown "`sfsusr`" "$trd" && ntf -i "Создан" "/home/`sfsusr`/.config/autostart/netctl-tray.desktop" &
EXIT ;;
    *) $p ; EXIT ;;
esac