#!/bin/bash
# Установка пакетов PFS (PuppyRus), by Zay.
# Версия 0.5, последнее изменение: 16.01.2013

if [ ! "$1" ]; then
  echo "Usage: $(basename "$0") FILE"; exit 1
fi
if [ -f "$1" ]; then
  pack="$(realpath "$1")"
else
  echo "$(basename "$0"): File \"$1\" not found!"; exit 1
fi
status=0

export WAIT_DIALOG="<window title=\" Установка... \" resizable=\"false\"><vbox border-width=\"16\">
<text><label>\"Идет процесс установки пакетов.${IFS}Пожалуйста, подождите...\"</label></text>
</vbox></window>"

# Проверка версии ядра Linux:
if checksfsxz >/dev/null; then
  
  export READ_DIALOG="<window title=\" Чтение... \" resizable=\"false\">
  <vbox border-width=\"16\"><text><label>\"Чтение файла...\"</label></text></vbox>
  </window>"
  gtkdialog --program=READ_DIALOG --center &
  dlgwait=$!

  # Проверка файла и получение списка встроенных пакетов:
  if [ "$(disktype "${pack}" | grep -F 'squashfs, version 4')" != "" ];then
    packageslist="$(pfsinfo "${pack}")"
    status=$?  
    [ ${status} -gt 0 ] && texterror="Ошибка чтения файла $(basename "${pack}")."
  else  
    texterror="Файл $(basename "${pack}") не является PFS-пакетом."
    status=1
  fi
  if [ ${status} -gt 0 ]; then   
    export STOP_DIALOG="<window title=\" Ошибка! \" resizable=\"false\" icon-name=\"gtk-stop\">
    <vbox>
     <vbox border-width=\"12\"><hbox>
      <pixmap icon_size=\"3\"><input file stock=\"gtk-stop\"></input></pixmap>
      <text><label>\"  ${texterror} \"</label></text>
     </hbox></vbox>
     <hbox homogeneous=\"true\"><button ok></button></hbox>
    </vbox>
    </window>"
    kill ${dlgwait} 2>/dev/null
    gtkdialog --program=STOP_DIALOG --center &
    echo "Error: Invalid *.pfs file!"; exit ${status}
  fi

  # Подготовка окна диалога:
  if [ "${packageslist}" != "" ]; then
    numpack=1
    chboxlist="`echo "${packageslist}" | while read package
      do
        echo -n "<checkbox>${IFS}<label> ${package} </label>${IFS}<variable>PACKAGE_${numpack}</variable>${IFS}<default>yes</default>${IFS}</checkbox>${IFS}${IFS}"
        numpack="$(expr ${numpack} + 1)"
      done`"
  else
    kill ${dlgwait} 2>/dev/null
    Xdialog --title " Установка PFS " --msgbox " Пакеты не найдены! \n" 6 0
    exit 1
  fi
    
  export MAIN_DIALOG="<window title=\" Установка PFS \">
<vbox>
 <text><label>\"
Установка пакетов: \"</label></text>
 <vbox scrollable=\"true\" height=\"250\" width=\"400\"> 
  ${chboxlist}
 </vbox>
  <hbox homogeneous=\"true\">
   <checkbox>
    <label>Установить в безопасном режиме </label>
    <variable>CHECKBOX_LOWER</variable>
    <default>no</default>
   </checkbox>
  </hbox>
  <hbox>
   <button ok>
    <variable>OKBUTTON</variable>
   </button>
   <button cancel>
   </button>  
  </hbox>
 </vbox>
</window>"
    
  kill ${dlgwait} 2>/dev/null
  REST="`gtkdialog --program=MAIN_DIALOG --center`"
 
  eval "$REST"
  [ "$EXIT" != "OK" ] && exit

  # Установка выбранных пакетов:
  instpacklist="`echo "${packageslist}" | while read package
    do
      varpack="PACKAGE_${numpack}"
      [ "${!varpack}" = "true" ] && echo -n \""${package}"\"" "
      numpack="$(expr ${numpack} + 1)"
    done`"
  if [ "${instpacklist}" != "" ]; then
    gtkdialog --program=WAIT_DIALOG --center &
    dlgwait=$!
        
    if [ "$CHECKBOX_LOWER" = "false" ]; then
      eval 'pfsinstall "${pack}" -p ${instpacklist}'
    else
      eval 'pfsinstall "${pack}" -l -p ${instpacklist}'
    fi
    status=$?
        
    if [ ${status} -eq 0 ]; then
      fixmenus
      mfs="$(which mkfontscale)"
      mfd="$(which mkfontdir)"
      for fontdir in "/usr/X11R6/lib/X11/fonts/TTF" "/usr/share/fonts/default/TTF"
      do
        cd "${fontdir}"
        [ "${mfs}" !=  "" ] && "${mfs}" .
        [ "${mfd}" !=  "" ] && "${mfd}" .	
      done
    fi
    kill ${dlgwait} 2>/dev/null
        
    if [ ${status} -eq 0 ]; then
      Xdialog --title " Установка PFS " --msgbox " Все пакеты успешно установлены! \n" 6 0
    else
      export ERRORINSTALL_DIALOG="<window title=\" Ошибка! \" resizable=\"false\" icon-name=\"gtk-stop\">
      <vbox>
       <vbox border-width=\"12\"><hbox>
        <pixmap icon_size=\"3\"><input file stock=\"gtk-stop\"></input></pixmap>
        <text><label>\"  При установке пакета произошла ошибка! \"</label></text>
       </hbox></vbox>
       <hbox homogeneous=\"true\"><button ok></button></hbox>
      </vbox>
      </window>"
      gtkdialog --program=ERRORINSTALL_DIALOG --center & 
    fi
  else
    Xdialog --title " Установка PFS " --msgbox " Пакеты не выбраны. \n"  6 0
  fi  
  exit ${status}
  
else

  # Установка пакета (если используется ядро старее чем 2.6.38.x):
  Xdialog --title " PFS " --yesno " Установить пакет? \n" 6 0
  if [ $? -eq 0 ]; then
    gtkdialog --program=WAIT_DIALOG --center &
    dlgwait=$!
    
    pfsinstall "${pack}"
    status=$? 
    
    if [ ${status} -eq 0 ]; then
      fixmenus
      mfs="$(which mkfontscale)"
      mfd="$(which mkfontdir)"
      for fontdir in "/usr/X11R6/lib/X11/fonts/TTF" "/usr/share/fonts/default/TTF"
      do
        cd "${fontdir}"
        [ "${mfs}" !=  "" ] && "${mfs}" .
        [ "${mfd}" !=  "" ] && "${mfd}" .	
      done
    fi
    kill ${dlgwait} 2>/dev/null
    
    if [ ${status} -eq 0 ]; then
      Xdialog --title " Установка PFS " --msgbox " Пакет успешно установлен! \n" 6 0
    else
      export ERRORINSTALL_DIALOG="<window title=\" Ошибка! \" resizable=\"false\" icon-name=\"gtk-stop\">
      <vbox>
       <vbox border-width=\"12\"><hbox>
        <pixmap icon_size=\"3\"><input file stock=\"gtk-stop\"></input></pixmap>
        <text><label>\"  При установке пакета произошла ошибка! \"</label></text>
       </hbox></vbox>
       <hbox homogeneous=\"true\"><button ok></button></hbox>
      </vbox>
      </window>"
      gtkdialog --program=ERRORINSTALL_DIALOG --center & 
    fi 
    exit ${status}
  fi

fi
exit
