#!/bin/sh

# Folgende Zeile setzt die Ausgabe auf einen Standard-Umlaute sollten daher auch on Screen richtig ausgegeben werden.
LANG=C


#Kleines Skript zum uploaden von mehreren cutlists
#This Software comes with *a*b*s*o*l*u*t*e*l*y* no warrenty :-)

#FUNKTIONEN

defVariables(){
#Definiere einige Variablen:
#Teste auf Konfiguration
if [ -f ~/.listuploader.rc -a -r ~/.listuploader.rc ]; then
  echo "Toll, listuploader.sh ist konfiguriert."
  CUTLISTSERVER=`sed -n '1p' ~/.listuploader.rc`
  MOVECLTODIREC=`sed -n '2p' ~/.listuploader.rc`
  BENUTZERID=`sed -n '3p' ~/.listuploader.rc`
  HISTORY=`sed -n '4p' ~/.listuploader.rc`
  TIMEDOUT=`sed -n '5p' ~/.listuploader.rc`
#  echo "POINTCHECK"
else
  echo "Keine Konfiguration gefunden."
  echo "Zum Konfigurieren bitte $0 -k ausführen"
  CUTLISTSERVER="http://www.cutlist.at"
  echo "Verwendeter Uploadserver: $CUTLISTSERVER"
  MOVECLTODIREC="`pwd`/uploadedCL"
  HISTORY=~/.listuploader.history
  echo "Es ist keine Benutzer-ID verfügbar."
  BENUTZERID=""
  TIMEDOUT=60
  
#  echo $CUTLISTSERVER $MOVECLTODIREC $HISTORY $BENUTZERID #DEBUGLINE

fi

if [ -z $UPLOADDIRECTORY ]; then
  UPLOADDIRECTORY=`pwd`
else
  if [ ! -d $UPLOADDIRECTORY ]; then
    UPLOADDIRECTORY=`pwd`/$UPLOADDIRECTORY
    if [ ! -d $UPLOADDIRECTORY ]; then
      echo "Das Verzeichniss "$UPLOADDIRECTORY " existiert nicht."
      echo "Bitte versuchen Sie den Pfad relativ zu ihrer jetzigen Position anzugeben."
      exit 1
    fi
  fi
fi

}

konfigurieren(){
  defVariables
  echo "Bitte persönliche URL für cutlist.at eingeben."
  echo "Momentan verwendet: $CUTLISTSERVER"
  echo "Wenn Sie diese URL ändern möchten, geben sie nun eine neue ein, anderfalls bestätigen sie mit ENTER"

  read theCUTLISTSERVER
  if [ ! -z $theCUTLISTSERVER ]; then
    echo $theCUTLISTSERVER  > ~/.listuploader.rc
  else
    echo $CUTLISTSERVER  > ~/.listuploader.rc
  fi

  echo "In welches Verzeichniss sollen die cutlists nach dem Upload verschoben werden?"
  echo "Momentan verwendet: $MOVECLTODIREC"
  echo "Wenn Sie das Verzeichniss ändern wollen, geben sie ein neues ein, anderfalls bestätigen sie mit ENTER"

  read theMOVECLTODIREC
  if [ ! -z $theMOVECLTODIREC ]; then
    eval MOVECLTODIREC=${theMOVECLTODIREC}
  fi
  while [ ! -d $MOVECLTODIREC ]; do
#    echo $MOVECLTODIREC
    echo "Das Verzeichnis $MOVECLTODIREC existiert nicht. Soll es erstellt werden? [J/n]"
    read 
    if [[ "$REPLY" == "n" ]]; then 
      echo "Bitte geben Sie ein gültiges Verzeichnis an."
      read theMOVECLTODIREC
      if [ ! -z $theMOVECLTODIREC ]; then
        eval MOVECLTODIREC=${theMOVECLTODIREC}
      fi
    else mkdir -p $MOVECLTODIREC; #echo 'PUNKT'
    fi
  done
#  echo "Checkpoint"
#  echo $MOVECLTODIREC
  echo $MOVECLTODIREC >> ~/.listuploader.rc
  
  if [ -z $BENUTZERID ]; then
    echo "Erzeuge Benutzer-ID"
    uptime | sha1sum | tr "[:lower:]" "[:upper:]" | cut -b 1-20 >> ~/.listuploader.rc #so erzeugt auch cutlist.sh die benutzer-id
    echo -n "Beutzer-ID erfolgreich gespeichert: "; sed -n '3p' ~/.listuploader.rc
  else
    echo $BENUTZERID >> ~/.listuploader.rc
  fi

  if [ -z $HISTORY ]; then HISTORY=~/.listuploader.history; fi
  echo "Der Verlauf wird momentan in $HISTORY gespeichert."
  echo "Wenn Sie diese Datei ändern möchten, geben sie enen neuen ein, anderfalls bestätigen sie mit ENTER"
  read theHISTORY
  if [ ! -z $theHISTORY ]; then
    eval   HISTORY=${theHISTORY}
  fi

  if [ ! -f $HISTORY -o ! -r $HISTORY ]; then
    echo "Die Datei $HISTORY existiert nicht. Sie wird jetzt erstellt."
    echo "CUTLIST-ID   BENUTZER-ID        CUTLISTENNAME  " >> $HISTORY
  fi


  echo $HISTORY >> ~/.listuploader.rc

  if [ ! -f $HISTORY -o ! -r $HISTORY ]; then
    echo "CUTLIST-ID   BENUTZER-ID        CUTLISTENNAME  " >> $HISTORY
    echo "Verlauf angelegt."
  fi

  echo "Momentan verwendeter Timeout: $TIMEDOUT sek."
  echo "Wenn sie den TIMEOUT ändern möchten, geben Sie einen neuen Wert (in Sekunden) ein, anderfalls bestätigen sie mit ENTER"
  read theTIMEDOUT
  if [ ! -z $theTIMEDOUT ]; then
    TIMEDOUT=$theTIMEDOUT 
  fi

  echo $TIMEDOUT >> ~/.listuploader.rc

  echo "Persönliche Daten wurden in ~/.listuploader.rc gespeichert."
  exit 0
}
#Ende von konfigurieren

konfigtesten(){
  #existiert $CUTLISTSERVER?
  if [ ! -d $MOVECLTODIREC ]; then
    echo "Das Verzeichnis $MOVECLTODIREC existiert nicht. Soll es erstellt werden? [J/n]"
    read
    if [ $REPLY == n ]; then echo "Bitte geben Sie ein gültiges Verzeichnis an."; exit 1
                    else mkdir -p $MOVECLTODIREC
    fi
  fi
  if [ -f $HISTORY -a -w $HISTORY -a -s $HISTORY ]; then
    echo "Aha, nicht das erste mal hier ;-)"
  else
    echo "CUTLIST-ID   BENUTZER-ID        CUTLISTENNAME  " >> $HISTORY
  fi
}

cutliststesten(){
  #Auf Cutlists prüfen
  thisdirectory=`ls $UPLOADDIRECTORY/*cutlist 2>/dev/null`
  if [[ -z $thisdirectory ]]; then 
    echo 'In diesem Verzeichnis befinden sich keine Cutlists.'
    exit 1
  fi 
}

hochladen(){
  echo "Das Hochladen kann mit Enter abgebrochen werden."
  if [ "$TIME" == "ja" ]; then
    for laufzahl in `ls -rt $UPLOADDIRECTORY/*cutlist`; do
      echo    $laufzahl
      CUTLISTID=`curl --connect-timeout $TIMEDOUT -s -F userfile[]=@$laufzahl -F MAX_FILE_SIZE=10000000 -F confirm=true -F type=blank -F userid=$BENUTZERID -F version=1 "$CUTLISTSERVER/index.php?upload=2" | cut -s -d "=" -f 2`
      if [ ! -z $CUTLISTID ]; then
        echo "Cutlist-ID" $CUTLISTID
        mv $laufzahl $MOVECLTODIREC
        echo "$CUTLISTID     $BENUTZERID   $laufzahl" >> $HISTORY
      else
        echo "FEHLER: Timeout"
      fi
      read -s -t 1; if [ $? == 0 ]; then break; fi 
    done
  else
    for laufzahl in `ls $UPLOADDIRECTORY/*cutlist`; do 
      echo    $laufzahl
      CUTLISTID=`curl --connect-timeout $TIMEDOUT -s -F userfile[]=@$laufzahl -F MAX_FILE_SIZE=10000000 -F confirm=true -F type=blank -F userid=$BENUTZERID -F version=1 "$CUTLISTSERVER/index.php?upload=2" | cut -s -d "=" -f 2`
      if [ ! -z $CUTLISTID ]; then
        echo "Cutlist-ID" $CUTLISTID
        mv $laufzahl $MOVECLTODIREC
        echo "$CUTLISTID     $BENUTZERID   $laufzahl" >> $HISTORY
      else
        echo "FEHLER: Timeout"
      fi
      read -s -t 1; if [ $? == 0 ]; then break; fi
    done
  fi
  
  echo 'FERTIG :-)'
#  exit 0
}

loeschen(){
  defVariables
  if [[ -z $BENUTZERID ]]; then echo "Leider gibt es keine Benutzer-ID. Hier gibt es nichts mehr zu tun."; exit 1; fi
  if [[ -z $1 ]]; then echo "Keine CUTLIST-ID angegeben. Hier gibt es nichts mehr zu tun."; exit 1; fi
  listname=`curl -s "http://cutlist.at/getfile.php?id=$1" | grep "ApplyToFile" | cut -s -d '=' -f 2`
  echo "CHECKPOINT Möchten Sie die Cutlist zu "
  echo " Möchten Sie die Cutlist zu  $listname"
    if [[ -z $listname ]]; then echo " ... Hoppala, $1 existiert nicht."; exit 1; fi
  echo "... wirklich löschen? [J/n]"
  read
  if [ $? == n ]; then exit 0
                  else curl "$CUTLISTSERVER/delete_cutlist.php?cutlistid=$1&userid=$BENUTZERID"
                  grep -v "$1" $HISTORY > $HISTORY.mod
                  mv $HISTORY.mod $HISTORY
  echo "Cutlist gelöscht."
  fi
  exit 0
}

verlaufzeigen(){
  defVariables
#  echo "CHECKPOINT"
  if [ -f $HISTORY -a -w $HISTORY -a -s $HISTORY ]; then
    cat $HISTORY
    exit 0
  else
    echo "Kein Verlauf vorhanden."
    exit 1
  fi
}


showconfig(){
  defVariables
  echo "Verwendeter Server   : "$CUTLISTSERVER
  echo "Verwendetes Archiv   : "$MOVECLTODIREC
  echo "Verwendete BenutzerID: "$BENUTZERID
  echo "Verwendeter Verlauf  : "$HISTORY
  echo "Verwendeter Timeout  : "$TIMEDOUT
  exit 0
}

help(){
cat<<EOF
Listuploader.sh lädt alle im Verzeichniss befindlichen Cutlisten zu cutlist.at.
Verwendung:
$0 [opt]

Optionen:
  -k        Konfigurieren. Persönliche URL eintragen, MoveTo-Verzeichniss eintragen,
            Benutzer-ID erzeugen.
  -z        Nicht nach Alphabet, sondern nach Alter (älteste zuerst) hochladen.
  -l <ID>   Löschen. Löscht die Cutlist mit der <ID>
  -d <dir>  Lade Cutlists aus diesem Verzeichnis.
  -v        Zeigt den Verlauf.
  -h        Diese Hilfe zeigen und beenden.


EOF
exit 0
}

#Auswertung der Optionen und Start des Scripts



#Optionen auswerten
while [ ! -z $1 ]; do
  case $1 in
    -k       ) konfigurieren;;
    -l       ) loeschen $2; shift;;
    -v       ) verlaufzeigen;;
    -z       ) TIME=ja;;
    -d       ) UPLOADDIRECTORY=$2; shift;;
    -s       ) showconfig;;
    -r       ) mv ~/.listuploader.rc~ ~/.listuploader.rc; echo "Letzte Konfiguration wiederhergestellt."; exit 0;;
    -h       ) help;;
    *        ) echo "Das ist mir ja noch nie passiert: $1"
  esac
  shift
done

#Und los gehts :))

defVariables
konfigtesten
cutliststesten
hochladen
cp ~/.listuploader.rc ~/.listuploader.rc~




echo "done"
exit 0

