#!/bin/sh 
v=171223 #sfslinux@gmail.com 

#load_sfs=sfsmnt
#load_sfs=load_sfs
load_sfs="`which sudo` pfsload"
#unload_sfs=sfsumnt
unload_sfs="`which sudo` pfsunload"
which pfs && load_pfs_ram="`which sudo` pfsload -r" || load_pfs_ram="`which sudo` pfsramload"
filemnt="`which sudo` mountfile"
umountfile="`which sudo` umountfile"
#pfsinstall="`which sudo` pfsinstall"
pfsinstall="`which sudo` install_pfs"
pfsuninstall="`which sudo` pfsuninstall"

m="выберите модуль"
echo "1=$1"
if [ "$1" ] ;then
        [ "$1" = "%F" ] && dir="$m" || dir="$1" 
else    dir="$m"
fi

G(){
MAIN_DIALOG='	
<window title="'`basename $0`' v.'$v'"  window-position="1" icon-name="application-pfs">
 <vbox>
   <frame Операции с модулем pfs или sfs                                                 ->
   <hbox>
    <entry activates_default="true" fs-action="file" fs-folder="'`pwd`'"
	fs-filters-mime="application/pfs|application/x-squashfs-image">
     <variable>d</variable>
	 <input>echo "'$dir'"</input>
    </entry>

    <button>
     <input file icon="application-pfs"></input>
     <action type="fileselect">d</action>
     <action>EXIT:mk</action>
    </button>
   </hbox>

   </frame>
    <hbox>

   <button tooltip-text="WWW справка">
    <label>Справка</label>
    <input file icon="gtk-help"></input>
    <action>defaultbrowser "http://wiki.puppyrus.org/puppyrus/pr218/pfs" &</action>
   </button>

       <button cancel></button>
#       <button ok></button>
    </hbox>
 </vbox>
</window>'

export GUI="`echo "$MAIN_DIALOG" | sed -e 's/^#.*//'`"
ret="`gtkdialog --program=GUI --center`"

eval "$ret"
#echo $ret ;exit
[ "$EXIT" = "Cancel" ] && exit
[ "$EXIT" = "abort" ] && exit
[ "$d" = "$m" ] || [ ! "$d" ] && (ntf -e "Ошибка" "Модуль не выбран" &) && ($0 &) && exit || SFS="$d"
}
if [ "$1" ] ;then 
    [ "$1" = "%F" ] && G || SFS="$1" 
else    G
fi


TST() {
	    status=$?
    	    if [ ${status} -eq 0 ]; then
    		fixmenus &
    		ntf -i "$SFSFILE" "успешно $m2" &
    	    else 
    		[ "$m1" ] || m1="В некоторых системах невозможно подключение модуля, находящегося на RAM-диске. Перенесите его на физический носитель (жесткий диск) и подключите."
    		ntf -a "ОШИБКА!" "$m1" && exit 
	    fi
}

#[ ! -f "$1" ] &&  ntf -e "Используйте :" "$0 модуль" && exit
SFS="$(realpath "$SFS")"
[ "`file "$SFS" |grep "Squashfs filesystem, "`" = "" ] && (ntf -e "$SFS " "не Squashfs файл" &) && ($0 &) && exit
NAME="`basename "$SFS" .pfs`"
SFSNAME="`echo "${NAME}" | tr ' ' '_'`"
SFSFILE="`basename "$SFS"`"
mnt=/mnt/$(echo "${SFS}" | tr ' ' '_' | sed "s#^\.##g" | sed "s#/#+#g")

if [ -d /etc/packages/install/"$NAME" ];then
  if [ "`ntf -q "$SFSFILE установлен." "Удалить?"`" ];then
  notify-send "Идет удаление $SFSFILE" "...ждите..." -i info &
  dlgwait=$!
  m2=удален ;m1="`$pfsuninstall "$NAME"`" ; TST 
  kill ${dlgwait} 2>/dev/null 
  fi
  exit
fi

if [ -d /mnt/."$SFSFILE" ];then
  if [ "`ntf -q "$SFSFILE подключен." "\nОтключить?"`" ];then
  m2=отключен ;m1="`$unload_sfs "$SFS"`" ; TST
  pfsramfree &
  exit
  fi
  #exit
fi

if [ -d "${mnt}" ];then
  if [ "`ntf -q "$SFSFILE монтирован." "\nОтмонтировать?"`" ];then
    m2=отключен ;m1="`$umountfile "$SFS"`" ; TST
  fi
  #exit
fi

cd "`dirname "$SFS"`"

HLP() { (defaultbrowser "http://wiki.puppyrus.org/puppyrus/pr218/pfs" & ) ;}
#HLP;exit

MAIN(){
export MAIN_DIALOG="<window resizable=\"false\" title=\"Squashfs модуль\" icon-name=\"application-pfs\" window-position=\"2\">
 <vbox>
<vbox>
<frame Выбран модуль: >
<text use-markup=\"true\"><label>\"\
<b>$SFSFILE</b> (`du -h $SFS|awk '{print $1}'`байт)\
\"</label></text>
</frame>
</vbox>
  <hbox>

    <radiobutton tooltip-text=\"Подключить модуль в AUFS 
корневую файловую систему.\">
      <label>Подключить</label>
      <variable>RADIOBUTTON_MOUNT</variable>
	<action>if true enable:ENTRY</action>
	<action>if false disable:ENTRY</action>
    </radiobutton>

    <radiobutton tooltip-text=\"Файлы модуля копируются 
поверх файлов системы.
Аналогично установке .pet.\">
      <label>Установить</label>
      <variable>RADIOBUTTON_SETUP</variable>
    </radiobutton>

    <radiobutton tooltip-text=\"Модуль монтируется в /mnt и
открывается файловым менеджером.\">
      <label>Смотреть</label>
      <variable>RADIOBUTTON_VIEW</variable>
    </radiobutton>

    <radiobutton tooltip-text=\"Модуль распаковывается в 
`pwd`.\">
      <label>Распаковать</label>
      <variable>RADIOBUTTON_UP</variable>
    </radiobutton>

  </hbox>

<frame Опции подключения: >
			<checkbox tooltip-text=\"Подключить модуль в верхний слой AUFS.
Файлы модуля заменят файлы системы.
Можно повредить систему.
Не используйте без необходимости!\">
				<label>в верхний слой AUFS</label>
				<variable>U</variable>
				<default>"true"</default>
				<action>if true enable:ENTRY</action>
				<action>if false disable:ENTRY</action>
			</checkbox>

			<checkbox tooltip-text=\"Перед подключением модуль копируется 
на RAM диск (в память).
Позволяет отключить носитель с модулем.
Ускоряет работу, но увеличивает расход RAM.\">
				<label>с копированием на RAM диск</label>
				<variable>R</variable>
				<action>if true enable:ENTRY</action>
				<action>if false disable:ENTRY</action>
			</checkbox>
				<variable>ENTRY</variable>
</frame>

<frame Текущий расход RAM: >
<text use-markup=\"true\"><label>\"`checkramfree -f`\"</label></text>
</frame>
  <hbox>
   <button help></button>
   <button width-request=\"100\" is-focus=\"true\">
     <input file stock=\"gtk-apply\"></input>
     <label>OK</label>
     <variable>OKBUTTON</variable>
   </button>
   <button cancel></button>
  </hbox>
 </vbox>
</window>"

RETPAR="`gtkdialog --program=MAIN_DIALOG`"
#echo $RETPAR
eval "$RETPAR"
[ "$EXIT" = "Help" ] && HLP && MAIN
[ "$EXIT" != "OK" ] && exit

CHKRNL() {

ck="$(`which checksfsxz`)"
[ "$ck" ] && ntf -a "$ck" "Модули нужно пережать xz -> gzip. Подробнее: 'mksquashfs --help'" && exit 1
}

	if [ "$RADIOBUTTON_MOUNT" = "true" ]; then 
	[ "$U" = "true" ] && load_sfsu="-u" || load_sfsu="-l"
	 if [ "$R" = "true" ] ;then
		load_sfs="$load_pfs_ram $load_sfsu"
	    else
		load_sfs="$load_sfs $load_sfsu"
	 fi
	echo $load_sfs "$SFS" #;exit
	[ "`echo "$SFS"|egrep '.pfs$'`" ]  && CHKRNL
	m2=подключен ;m1="`$load_sfs "$SFS"`" ; TST 
	sfs_event_add "$SFS" 
#	sudo -u "`sfsusr`" pfsfix "$SFS" start
	 #[ ${status} -eq 0 ] && (sleep 3 && ntf -i "Чтобы отключить $SFSFILE," "нажмите на него еще раз." ) &
	fi

	if [ "$RADIOBUTTON_SETUP" = "true" ]; then
	[ "`echo "$SFS"|egrep '.sfs$'`" ] && ntf -e "Установка возможна только для" "модулей.pfs. Переконвертируйте..."  && exit
	CHKRNL
		#m2=установлен ;m1="`$pfsinstall "$SFS"`" ; TST ; `which sudo` pfsfix "$SFS" start
		#m2=установлен ;m1="`$pfsinstall "$SFS"`" ;  `which sudo` pfsfix "$SFS" start
		m2=установлен ;m1="`$pfsinstall "$SFS"`" ;  sfs_event_add "$SFS" 
	fi

	if [ "$RADIOBUTTON_VIEW" = "true" ]; then
	[ "`echo "$SFS"|egrep '.pfs$'`" ] && CHKRNL
	    m2=подключен ;m1="`$filemnt "$SFS"`" ;  TST
    	    defaultfilemanager "$mnt" &
	fi

	if [ "$RADIOBUTTON_UP" = "true" ]; then
	    extractor_pfs  "$SFS"
	    #if [ "`unsquashfs -l "$SFS"  |grep /etc/packages/mount |wc -l`" = "4" ] ;then
	    XXX(){
	    if [ "`unsquashfs -l "$SFS" |grep /etc/packages/mount |egrep '.files$' |wc -l`" -lt 2 ] ;then
	        if [ "`echo "$SFS" | grep ".sfs$"`" != "" ] ;then
	    	    wt "unsquashfs -n -d "`basename "$SFS" .sfs`" "$SFS"" 
	    	else wt "unsquashfs -n -d "`basename "$SFS" .pfs`" "$SFS"" 
	    	fi
	    #else wt "pfsextract -no-progress "$d""
	    else extractor_pfs  "$SFS"
	    fi
	    }
	fi
}
MAIN