#!/bin/bash                                                                                                        5.7.2011 petteriIII

function AsetaPaate {  #kbdrate -r 40 80 # -> X environment: xset r rate 240 60 # paketti wmctrl ?
setterm -reset  # poistaa vanhat epävarmat asetukset echo ${LINES} # ei skriptissä toimi  
RivienLuku=$(($(tput lines)-5)) # montako riviä on siinä näytössä on missä tämä skripti toimii. 5 on otsikon+yläpalkin viemä tila
RivinPituus=$(tput cols)        # montako merkkiä on rivillä.
apu=$(gconftool -g /apps/gnome-terminal/profiles/Default/default_size_columns)
gconftool -s /apps/gnome-terminal/profiles/Default/use_custom_default_size --type bool true
gconftool -s /apps/gnome-terminal/profiles/Default/default_size_columns --type integer 240 # Merkkien suurin mahdollinen määrä näyttörivillä
[[ ! "$apu" = 240 ]] && echo 'pääte vaatii skriptin käynnistämistä uudelleen' && sleep 2 && exit
gconftool -s /apps/gnome-terminal/profiles/Default/default_size_rows --type integer 60     # Näyttörivien suurin mahdollinen määrä
gconftool -s /apps/gnome-terminal/profiles/Default/use_theme_colors --type bool false
gconftool -s /apps/gnome-terminal/profiles/Default/scrollback_unlimited --type bool true
gconftool -s /apps/gnome-terminal/profiles/Default/default_show_menubar --type bool true   # tulee voimaan vasta toisella ajokerralla
gconftool -s /apps/gedit-2/preferences/editor/line_numbers/display_line_numbers --type bool true
valintalukko=1 # valinta on mahdollista suorittaa kun Valintalukko on jotain muuta kuin tyhjää
}

function MuutaValittuPunaiseksi {
Xkoordinaatti=$(((ValitunNumero-1-$(((ValitunNumero-1)/RivienLuku)))/RivienLuku)); Ykoordinaatti=$((ValitunNumero- $((RivienLuku*Xkoordinaatti-1))+3));tput cup $((Ykoordinaatti-Xkoordinaatti-2)) $((Xkoordinaatti*SarakkeenPituus)); tput setf 4; tput smul; echo "${Valittavat[ValitunNumero-1])}"; tput rmul
}

function MuutaValittuVihreaksi {
  Xkoordinaatti=$(((ValitunNumero-1- $(((ValitunNumero-1)/RivienLuku)))/RivienLuku)); Ykoordinaatti=$((ValitunNumero- $((RivienLuku*Xkoordinaatti-1))+3));tput cup $((Ykoordinaatti-Xkoordinaatti-2)) $((Xkoordinaatti*SarakkeenPituus)); tput setf 3; echo "${Valittavat[ValitunNumero-1])}" 
}

function TulostaValittavat {
clear
[[ $valintalukko = 1 ]] && echo -n 'Valinta enterillä   ' || echo -n 'paina nuoliylös-alas' 
echo -e '   '$Otsikko2'\n'$Otsikko1'\n'
ValittavienLuku=${#Valittavat[@]}
SarakkeidenLuku=$((ValittavienLuku/RivienLuku+1)) # $ poistettu
SarakkeenPituus=$((RivinPituus/SarakkeidenLuku))
tput setf 3 # ; tput rev
for (( Sarake=0; Sarake<=SarakkeidenLuku; Sarake++ )) 
do
  for (( Rivi=0; Rivi<=RivienLuku; Rivi++ ))
  do
    tput cup $((Rivi+3)) $((Sarake*SarakkeenPituus)) 
    echo "${Valittavat[$(($((Sarake*RivienLuku+Sarake))+Rivi))]}" #$RivienLuku 
  done
done
}

function MuutaValittuNuolinappaimilla { 
MuutaValittuPunaiseksi 
read -sn1 key
# stty -echo
[[ -z $key ]] && valintatehty=$valintalukko && valintalukko=0 && return || valintalukko=1 # [[ -z $key ]] && Tapahtuma='enter' && valintatehty=$valintalukko && return # enter 
[[ ! ${key#*[PQRSHF23§]} ]] && Tapahtuma=${avain[$key]} && valintatehty=${valintasallittu[$key]} # f1,f2,f3,f4,home,end,insert,delete tai §
[[ ! ${key#*[ABCD]} ]] && MuutaValittuVihreaksi && tput cup 0,0 && echo -n 'Valinta enterillä   ' && ${avain[$key]} # nuolinäppäimet
}

function MuutaValittua () {
ValitunNumero=$(($ValitunNumero+$1)) 
[[ $ValitunNumero -lt 1 ]] && ValitunNumero=1
[[ $ValitunNumero -gt ${#Valittavat[*]} ]] && ValitunNumero=${#Valittavat[*]-1}
} 

function muodosta_kielletytavaimet {
  kielletytavaimet=''
  [[ ! $(echo $avaimet | grep 'f1') ]] && kielletytavaimet=$kielletytavaimet' f1' 
  [[ ! $(echo $avaimet | grep 'f2') ]] && kielletytavaimet=$kielletytavaimet' f2'
  [[ ! $(echo $avaimet | grep 'f3') ]] && kielletytavaimet=$kielletytavaimet' f3'
  [[ ! $(echo $avaimet | grep 'f4') ]] && kielletytavaimet=$kielletytavaimet' f4'
  [[ ! $(echo $avaimet | grep 'home') ]] && kielletytavaimet=$kielletytavaimet' home'
  [[ ! $(echo $avaimet | grep 'end') ]] && kielletytavaimet=$kielletytavaimet' end'
  [[ ! $(echo $avaimet | grep 'insert') ]] && kielletytavaimet=$kielletytavaimet' insert'
  [[ ! $(echo $avaimet | grep 'delete') ]] && kielletytavaimet=$kielletytavaimet' delete'
  [[ ! $(echo $avaimet | grep '§') ]] && kielletytavaimet=$kielletytavaimet' §'
}
 
function ValitseValittavistaYksi () { 
declare -A valintasallittu avain
muodosta_kielletytavaimet
avain['A']='MuutaValittua -1'  
avain['B']='MuutaValittua 1' 
avain['C']='MuutaValittua '$((RivienLuku+1))
avain['D']='MuutaValittua -'$((RivienLuku+1)) 
[[ $(echo $kielletytavaimet | grep f1) ]] && valintasallittu['P']=0 || valintasallittu['P']=1 && avain['P']='f1' 
[[ $(echo $kielletytavaimet | grep f2) ]] && valintasallittu['Q']=0 || valintasallittu['Q']=1 && avain['Q']='f2' 
[[ $(echo $kielletytavaimet | grep f3) ]] && valintasallittu['R']=0 || valintasallittu['R']=1 && avain['R']='f3' 
[[ $(echo $kielletytavaimet | grep f4) ]] && valintasallittu['S']=0 || valintasallittu['S']=1 && avain['S']='f4' 
[[ $(echo $kielletytavaimet | grep home) ]] && valintasallittu['H']=0 || valintasallittu['H']=1 && avain['H']='home' 
[[ $(echo $kielletytavaimet | grep end) ]] && valintasallittu['F']=0 || valintasallittu['F']=1  && avain['F']='end' 
[[ $(echo $kielletytavaimet | grep insert) ]] && valintasallittu['2']=0 || valintasallittu['2']=1 && avain['2']='insert'  
[[ $(echo $kielletytavaimet | grep delete) ]] && valintasallittu['3']=0 || valintasallittu['3']=1 && avain['3']='delete' 
[[ $(echo $kielletytavaimet | grep §) ]] && valintasallittu['§']=0  || valintasallittu['§']=1 && avain['§']='§'

local Otsikko1 Otsikko2 key valintatehty=0 Xkoordinaatti Ykoordinaatti   
[[ ! $ValitunNumero || $ValitunNumero -lt 1 || $ValitunNumero -gt ${#Valittavat[@]} ]] && ValitunNumero=1
setterm -cursor off  
Otsikko1="$1"; [[ ! "$Otsikko1" ]] && Otsikko1='Ohjelma: '$0' pyytää valitsemaan näistä'; Otsikko1=${Otsikko1:0:156}
Otsikko2="$2" 
crc=$(echo $Otsikko1 | cksum | awk {'print $1'}) # sha1sum ->160bittinen
TulostaValittavat
valintatehty=0
stty -echo
Tapahtuma='' # koelisäys
while [ $valintatehty -lt 1 ] ; do MuutaValittuNuolinappaimilla; done
[[ "$Tapahtuma" ]] && valintalukko=1  # [[ ! "$Tapahtuma" = "enter" ]] && valintalukko=1 # eval $3
tput setf 0; setterm -cursor on; stty echo
ValitunTeksti=${Valittavat[ValitunNumero-1]}
[[ ! ${ValittavanArvo[ValitunNumero-1]} ]] && ValitunArvo='ei määritelty' || ValitunArvo=${ValittavanArvo[ValitunNumero-1]}
clear # koe, tuleeko sotkuja?
}  

function TeeNimistaKelvollisia {
for Roskis_inforivi in $(ls --group-directories-first --sort=time ~/.local/share/Trash/info)
do
  sed -i 's/%C3%B6/ö/g' ~/.local/share/Trash/info/$Roskis_inforivi
  sed -i 's/%C3%A4/ä/g' ~/.local/share/Trash/info/$Roskis_inforivi
  sed -i 's/%C3%96/Ö/g' ~/.local/share/Trash/info/$Roskis_inforivi
  sed -i 's/%C3%84/Ä/g' ~/.local/share/Trash/info/$Roskis_inforivi
  # sed -i 's/ /_/g' ~/.local/share/Trash/info/$Roskis_inforivi
  echo 'ohjelma lopetetaan, sillä muunnetun tiedoston voi poistaa vasta kun skripti ajetaan uudestaan.'
done
}                                                                                 

function PalautaRoskakorista {
ValittavienRivi=0
avaimet='Valittua muutetaan nuoli-näppäimillä.  f1=tee nimistä kelvollisia (siis kun ä:t ja ö:t ovat lukukelvottomia)'
unset Valittavat
for Roskis_inforivi in $(ls --group-directories-first --sort=time ~/.local/share/Trash/info)
do
  while read rivi
  do
    [[ $(echo $rivi | grep DeletionDate) ]] && apu1=${rivi:13:25}
    [[ $(echo $rivi | grep Path) ]] && apu2=${rivi:5} 
  done  < ~/.local/share/Trash/info/$Roskis_inforivi
  Valittavat[$ValittavienRivi]=$apu1' '$apu2
  [[ ${Valittavat[$ValittavienRivi]} ]] && let ValittavienRivi++
  [[ $(echo $ValittavienRivi | grep 40) ]] && break
done 
[[ $ValittavienRivi = 0 ]] && echo 'roskakori on tyhjä, lopetan' && exit
ValitseValittavistaYksi "Listaus on aikajärjestyksessä, viimeiseksi poistettu ylimpänä. Minkä tiedoston haluat palauttaa?" "$avaimet"
 [[ "$Tapahtuma" = "f1" ]] && TeeNimistaKelvollisia && exit
echo ~/.local/share/Trash/files/${ValitunTeksti##*/}'    '$(echo $ValitunTeksti | awk '{print $2}')
cp -R ~/.local/share/Trash/files/${ValitunTeksti##*/} $(echo $ValitunTeksti | awk '{print $2}')
[[ -f ~/.local/share/Trash/files/${ValitunTeksti##*/} ]] && rm  ~/.local/share/Trash/files/${ValitunTeksti##*/} ||  {
rm -R ~/.local/share/Trash/files/${ValitunTeksti##*/}/* 
rmdir  ~/.local/share/Trash/files/${ValitunTeksti##*/} 
}
rm   ~/.local/share/Trash/info/${ValitunTeksti##*/}.trashinfo
}

# PääOhjelma:
AsetaPaate
PalautaRoskakorista


