#!/bin/bash

Info () {
title="Info"
author="Peter Starfinger"
mail="E-Mail: info@die-starfingers.de"
year="2020"
app="$(basename $0)"
msgid="The Starbuntu application
<i>\$app</i>
was written by"
info="$(gettext "$msgid" | (export PATH `envsubst --variables "$msgid"`; envsubst "$msgid"))"

yad --center --fixed --title="$title" --window-icon="/usr/share/icons/gnome/48x48/status/info.png" --image="/usr/share/icons/gnome/48x48/status/info.png" --borders=20 --text="$info"$'\n'$'\n'"$author"$'\n'"$mail"$'\n'$'\n'"$year"$'\n' --text-align=center --selectable-labels --button="OK" &
wunwa "$title" > /dev/null; xdotool key Home key Down
}

OpenTrash () {
cd $HOME/.config/rox.sourceforge.net/SendTo
list=($(find . -type d -name ".[a-z]*"))
restore="[Desktop Entry]
Exec=trash -r
Icon=$HOME/.icons/restore-from-trash.png"
purge="[Desktop Entry]
Exec=trash -p
Icon=$HOME/.icons/restore-from-trash.png"
restore_item=$"_ Restore From Trash"
moveto_item=$"_ To Trash"
purge_item=$"Empty Trash Bin"
echo "$restore" > $restore_item
echo "$purge" > $purge_item
mv $moveto_item ".$moveto_item"
for d in ${list[@]}; do echo "$restore" > $d/$restore_item; echo "$purge" > $d/$purge_item; mv $d/$moveto_item "$d/.$moveto_item"; done
xseticon -id `wunwa "Trash/files"` /usr/share/icons/gnome/48x48/status/edittrash.png && title=$"Trash Bin" && title="Starbuntu $title" && xdotool key Control+h sleep 0.3 search --name "Trash/files" set_window --name "$title" &
ROX-Filer -n $HOME/.local/share/Trash/files
rm $restore_item
rm $purge_item
mv ".$moveto_item" $moveto_item
for d in ${list[@]}; do rm $d/$restore_item; rm $d/$purge_item; mv "$d/.$moveto_item" $d/$moveto_item; done
}

MoveToTrash () {
for p in ${params[@]}; do
    file_path="$p"
    if [ -e "$file_path" ]; then
	file_name=$(basename "$file_path")
	info_file="$HOME/.local/share/Trash/info/""$file_name"".trashinfo"
	echo [Trash Info] > "$info_file"
	file_path="${file_path//\ /\%20}"
	echo Path="$file_path" >> "$info_file"
	echo DeletionDate=$(date +%FT%T) >> "$info_file"
	mv "$p" $HOME/.local/share/Trash/files
    else
	text=$"&#10;    '$file_path'&#10;    doesn't exist!&#10;&#10;"
	yad --center --title="Move To Trash" --window-icon="edittrash" --image="dialog-warning" --borders=20 --fixed --text="$text" --selectable-labels --button="Info":"$0 info" --button="OK":0 &
wunwa "Move To Trash" > /dev/null; xdotool key Home key Down
    fi
done
for ((k=0; k<${#params[@]}; k++)); do params[$k]="$HOME/.local/share/Trash/files/$(basename ${params[$k]})"; done
xclip -i <<< ${params[@]}
}

RestoreFromTrash () {
cd $HOME/.local/share/Trash
restored=""
restored_home=""
not_found=""

until [ -z "$1" ]; do
    file_name=$(basename "$1")
    if [[ ! -f "./files/$file_name" ]] && [[ ! -d "./files/$file_name" ]]; then
	not_found="$not_found    '$file_name',"'\n'
    else
	info_file="./info/""$file_name"".trashinfo"
	info_text="$(cat "$info_file")"
	restore_path="${info_text#*Path=}"
	restore_path="${restore_path%$'\n'*}"
	restore_path="${restore_path//\%20/\ }"
	if [ -f "$restore_path" ] || [ -d "$restore_path" ]; then restore_path="$restore_path~"; fi
	mv "./files/$file_name" "$restore_path"
	err=$?
	if [ $err -gt 0 ]; then	
	    restored_home="$restored_home    '$restore_path',"'\n'
	    new_restore_path="$HOME/$file_name"
	    if [ -f "$new_restore_path" ] || [ -d "$new_restore_path" ]; then new_restore_path="$new_restore_path~"; fi
	    mv "./files/$file_name" "$new_restore_path"
	    rm "$info_file"
	else
	    restored="$restored    '$restore_path',"'\n'
	    rm "$info_file"
	fi
    fi
    shift
done

if [ -n "$not_found" ]; then
    not_found="${not_found::-3}"'\n'
    text=$"&#10;$not_found    cannot be found in the trash bin!&#10;&#10;"
    yad --center --title="Restore From Trash" --window-icon="edittrash" --image="edittrash" --borders=20 --fixed --text="$text" --selectable-labels --button="Info":"$0 info" --button="OK":0 &
    wunwa "Restore From Trash" > /dev/null; xdotool key Home key Down
fi

if [ -n "$restored_home" ]; then
    restored_home="${restored_home::-3}"'\n'
    text=$"    Restoration of&#10;$restored_home    at its original place impossible,&#10;    object instead moved to the home directory!&#10;"
    yad --center --title="Restore From Trash" --window-icon="edittrash" --image="edittrash" --borders=20 --fixed --text="$text" --selectable-labels --button="Info":"$0 info" --button="OK":0 &
    wunwa "Restore From Trash" > /dev/null; xdotool key Home key Down
fi

if [ -n "$restored" ]; then
    restored="${restored::-3}"'\n'
    text=$"    Restoration of&#10;$restored    with success!&#10;"
    yad --center --title="Restore From Trash" --window-icon="edittrash" --image="edittrash" --borders=20 --fixed --text="$text" --selectable-labels --button="Info":"$0 info" --button="OK":0 &
    wunwa "Restore From Trash" > /dev/null; xdotool key Home key Down
fi
}

PurgeTrash () {
text1=$"&#10;    Empty trash bin definitely?&#10;"
text2=$"&#10;    The trash bin could not be emptied completely!&#10;"
button=$"No"
yad --center --title="Purge Trash" --window-icon="edittrash" --image="edittrash" --borders=20 --text="$text1" --button="Info":"$0 info" --button="$button":1 --button="OK":0
if [ $? -eq 0 ]; then
    rm -r $HOME/.local/share/Trash/files/*
    if  [ $? -gt 0 ] && [ -n "$(ls $HOME/.local/share/Trash/files)" ]; then
	yad --center --title="Purge Trash" --window-icon="edittrash" --image="edittrash" --borders=20 --fixed --text="$text2" --button="Info":"$0 info" --button="OK":0
    fi
    rm -r $HOME/.local/share/Trash/info/*
fi
}

fct="$1"
[ "$fct" = "info" ] && Info && exit 0

parameters="$@"
parameters=$(quote-files-in-string $parameters)
parameters=$(echo ${parameters/$1/})
IFS=$'\n'
params=(); k=0
until [ -z "${parameters// /}" ]; do
    param=$(echo "$parameters" | sed -E 's~(\"[^\"]*\").*~\1~; s~^ *~~')
    parameters=$(echo ${parameters/$param/})
    param="${param//\"/}"
    [ "$param" = "$(basename "$param")" ] && param="$(pwd)/$param"
    params[$k]="$param"
    ((k++))
done

case "$fct" in
    -o|--open ) OpenTrash ;;
    -m|--move-to ) MoveToTrash ${params[@]} ;;
    -r|--restore-from ) RestoreFromTrash ${params[@]} ;;
    -p|--purge ) PurgeTrash ;;
    * ) call=$"Call"
	button=$"Help"
	lang_dir=$"C"
	text="    $call:"$'\n'$'\n'"    <i>trash</i> -o | --open"$'\n'"    <i>trash</i> -m | --move-to &lt;file(s)&gt;"$'\n'"    <i>trash</i> -r | --restore-from &lt;file(s)&gt;"$'\n'"    <i>trash</i> -p | --purge"'\n'
	yad --center --title="trash" --window-icon="edittrash" --image=gtk-dialog-warning --borders=20 --fixed --text="$text" --button=$button:"yelp /usr/share/help/$lang_dir/Starbuntu/starbuntu-apps-details.page#trash" --button="Info":"$0 info" --button="OK":0; exit 1 ;;
esac
    
exit 0
