# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

################################################################################
#!/bin/bash
#
# script to be used by konqueror servicemenu to restore files from
# ~snapshot-files backed up by Tivoli Storage Manager
#
# conceived, written and performed  by Andreas Bleischwitz
# and Stefan Koehler
# Copyright (C) 2007 Stefan Koehler, email: stefan@GONICUS.de
#
################################################################################

# set snapshot directory
SNAPSHOT=${HOME}/Netzlaufwerke/HOME/~snapshot
USERNAME=$1
FILENAME=$2

# get username and current filename, get all files with same name
function tsm_listfiles {
FILENAME=$2
 
  find $SNAPSHOT -type f -name "${FILENAME}*" | grep -v "trashinfo" | cut -f 2 -d " " 2>/dev/null
}

echo (tsm_listfiles)
exit 0

# show filenames including last change, prepare to feed them into kdialog
function kde_select_files {
  FILES=$@
  MSG=""
  for FILE in $FILES; do
    FILE_DATE=$(date -r $FILE +"%x")
    FILE_TIME=$(date -r $FILE +"%X")
    FILE_SHORT=$(basename $FILE)
    FILE_COMPLETE="\"${FILE_SHORT} vom ${FILE_DATE}, ${FILE_TIME} Uhr\""
    MSG="${MSG}${FILE} ${FILE_COMPLETE} off " 
  done

  eval $(echo /usr/bin/kdialog --separate-output --title Dateiwiederherstellung --checklist \"Bitte wählen Sie eine oder mehrere Dateien aus!\" $MSG)
}

# restore selected files, append timestamp to filename
function restore_files {
  RESTPATH=$1
  shift
  FILES=$@
  
  if [ -z $FILES ]; then
          /usr/bin/kdialog --title "Achtung!" --warningyesno "Die wiederherzustellende Datei kann nicht gefunden werden!"
  fi

  for FILE in $FILES; do
    FILE_DATETIME=$(date -r $FILE +"%x_%Hh%Mm%Ss")
    FILE_SHORT=$(basename $FILE | perl -p -e 's/\..*?$//')
    FILE_EXT=$(echo $FILE | perl -p -e 's/.*(\..*?)$/$1/')

    RESTFILE="${RESTPATH}/${FILE_SHORT}_${FILE_DATETIME}${FILE_EXT}"
    COPY=1
    if [ -f $RESTFILE ]; then
      /usr/bin/kdialog --title "Achtung!" --warningyesno "Die wiederherzustellende Datei $RESTFILE ist schon vorhanden! Trotzdem kopieren?"
      test $? -eq 1 && COPY=0
    fi
    test $COPY -eq 1 && cp $FILE $RESTFILE
  done
}


################################################################################
# MAIN part
################################################################################

for DATEI in $@; do
  PFAD=$(dirname $DATEI)
  FILE_SHORT=$(basename $DATEI)

  # user confirmation to restore files
  /usr/bin/kdialog --title "Dateiwiederherstellung" --yesno "Möchten Sie eine ältere Version der Datei $FILE_SHORT wiederherstellen?" || exit 0

  FILES=$(tsm_listfiles $USER $(basename $DATEI))
    if [ -z "$FILES" ]; then
    /usr/bin/kdialog --title "Dateiwiederherstellung" --error "Keine ältere Version der Datei $RESTFILE vorhanden!"
    exit 1
    fi

  RES=$(kde_select_files $FILES)
  if [ -n "$RES" ]; then
    restore_files $PFAD $RES && /usr/bin/kdialog --title "Dateiwiederherstellung" --msgbox "Wiederherstellung erfolgreich!"
  elif [ -z "$RES" ]; then
    /usr/bin/kdialog --title "Fehler!" --error "Keine Datei ausgewählt!"
  else
    /usr/bin/kdialog --title "Fehler!" --error "Wiederherstellen fehlgeschlagen. Bitte kontaktieren Sie Ihren Administrator."
  fi
done
