#!/bin/bash
#
#Beschreibung: lädt eine übergebene Datei auf den Webspace 
#Version 0.6 Versioninfo siehe Ende der Datei
#benötigt: curlftpfs, xsel, ~/.netrc
#
#Aufruf: wwwabload.sh Datei [Benutzername Passwort]
#
#Hinweise und Fehler an tuxator@tuxator.de 
#
#Status: ok
###################################################################
#
#Variablen
currentifs=${IFS}   #aktuellen IFS sichern
IFS=$'\n'
retval=0
host="Webhost" #Webspace Upload
Down="Downloadverzeichnis für Link" #Host Download
username=${2}                       #Benutzername
password=${3}                       #Passwort
ftpdir="/public"                    #Zielverzeichnis
mntdir="${HOME}/webspace"           #Mountverzeichnis
upload_file=${1}                    #Datei zum Upload
link="<https://www.${Down}${ftpdir}/$(basename "${upload_file}")>"  #Link
icon="/usr/share/icons/Tango/32x32/status/dialog-information.png"   #Icon für Info
showtm="5000"                       #Anzeigezeit in ms
#
#Prüfung auf Voraussetzungen
#erforderliche Programme vorhanden?
for cmd in /usr/bin/curlftpfs /usr/bin/xsel
do
    if [[ ! -e ${cmd} ]]; then
        retval=1
        break
    fi
done
#Dateiname übergeben?
if [[ ! -f ${1} ]]; then
    retval=2
fi
#Benutzername und Passwort vorhanden?
if [[ ! ${2} ]]; then
    if [[ ! -f ~/.netrc ]]; then
        retval=3
    else
        username=$(awk "/${host}/ { getline; print \$2; }" ${HOME}/.netrc)
        password=$(awk "/${host}/ { getline; getline; print \$2; }" ${HOME}/.netrc)
    fi
else
    if [[ ! ${3} ]]; then
        retval=3
    fi
fi
#Mountpoint vorhanden
if [[ ! -d ${mntdir} ]]; then
    retval=4
fi
###################################################################
if (( retval == 0 )); then
    #Prüfe auf Leerzeichen im Dateinamen
    path=$(dirname "${upload_file}")
    oldfile=$(basename "${upload_file}")
    spaces=$(echo "${oldfile}" | awk '{print gsub("[ \t]",""); exit}')
    if [[ ${spaces} -gt 0 ]]; then
        #Leerzeichen im Dateinamen entfernen
        path=$(dirname "${1}")
        newfile="${oldfile// /_}"
        cp "${path}"/"${oldfile}" /tmp/"${newfile}"
        upload_file=/tmp/${newfile}
        link="<www.${Down}${ftpdir}/${newfile}>)"	#Link
    fi
    #schreibe ursprünglichen IFS zurück
    IFS=${currentifs}
    # Webspace mounten
    args="${username}@${host}:${ftpdir}"
    if echo "${password}" | sshfs -o password_stdin "${args}" "${mntdir}"; then
        # Dateien auf Webspace übertragen
        cp -n "${upload_file}" "${mntdir}"
        # Webspace unmounten
        while mountpoint -q "${mntdir}"; do
            fusermount -u "${mntdir}" 2> /dev/null
        done
        # Link in Zwischenablage kopieren (xsel)
        echo "${link}" | xsel -ib
        # Meldung ausgeben
        notify-send  -i ${icon} -t ${showtm} "${0}" "\n${1} wurde auf ${host} hoch geladen\n"
    fi
    if [[ $(dirname "${upload_file}") = "/tmp" ]]; then
        #bereinige tmp-Verzeichnis
        rm "${upload_file}"
    fi
fi
###################################################################
#Fehlerbehandlung
case ${retval} in
    1)
    echo "${0}: Ausführung nicht möglich. ${cmd} nicht gefunden"
    ;;
    2)
    echo "${0}: Ausführung nicht möglich. Keine Datei übergeben."
    ;;
    3)
    echo "${0}: Ausführung nicht möglich. Benutzername oder Passwort fehlen."
    echo "Tragen Sie Host, Benutzername und Passwort in die Datei ~/.netrc ein oder"
    echo "übergeben Sie Benutzernamen und Passwort auf der Befehlszeile"
    echo "${0} Datei [Benutzername Passwort]" 
    ;;
    4)
    echo "${0}: Ausführung nicht möglich. Mountpunkt ${mntdir} nicht vorhanden."
    echo "Benutzen Sie mkdir ${mntdir} um ihn zu erstellen."
    ;;
esac
##########################################################################
if (( retval > 0 )); then
    notify-send  -i ${icon} -t ${showtm} "${0}" "Ausführung nicht möglich. Fehlercode ${retval}"
fi
exit ${retval}
##########################################################################
#Versionsinfo:                                                           #
#0.2                                                                     #
#Prüfung auf Mountpoint integriert                                       #
#0.3                                                                     #
#Umstellung auf sshfs                                                    #
#0.4                                                                     #
#Leerzeichen in Dateinamen werden durch Unterstriche ersetzt             #
#0.5                                                                     #
#Fehlermeldung per notify-send hinzugefügt                               #
#0.6                                                                     #
#Fehler bei Variablenzuweisung per awk behoben                           #
##########################################################################
