#!/bin/bash

show-help()
{
    echo
    echo "Optionen:"
    echo "  -h              Hilfe"
    echo "  -v              Viele Infos, was gerade geschieht"
    echo "  -d Verzeichnis  Verzeichnis, wo die Emails sind"
    echo "                  (Voreinstellung ist aktuelles Verzeichnis)"
    echo "  -p Präfix       Präfix"
    echo "                  (Voreinstellung ist kein Präfix)"
    echo "  -t Ziel         Zielverzeichnis"
    echo "                  (Voreinstellung ist ein frisches neues in /tmp)"
    echo
}

show-error()
{
    echo Fehler: "$@"
}

DIR=
PRE=
TARGET=

while getopts d:p:hvt: OPT; do
    case "$OPT" in
        v)  V=1;;
        h)  show-help; exit 0;;
        d)  DIR="$OPTARG";;
        p)  PRE="$OPTARG"-;;
        t)  TARGET="$OPTARG";;
        \?) show-error Unbekannte Option;
            show-error 'Benutze "-h" für Hilfe';
            exit 1;;
    esac
done

my-echo()
{
    if [ "$V" = 1 ]; then
        echo "$@"
    fi
}

if ! which mhstore &>/dev/null; then
    show-error 'Erstmal muß das Paket "nmh" installiert werden.'
    echo 'Zum Beispiel so: "zypper in nmh"'
    exit 1
fi

if [ -n "$DIR" ]; then
    if [ -d "$DIR" ]; then
        if cd "$DIR"; then
            my-echo
            my-echo Hallo Hans, nun bin ich in "$DIR".
            my-echo
            my-echo Dann kann es losgehen:
        else
            show-error Konnte leider nicht nach "$DIR" wechseln.
            exit 1
        fi
    else
        show-error "$DIR" ist gar kein Verzeichnis.
        exit 1
    fi
fi

if [ -n "$TARGET" ]; then
    if ! [ -d "$TARGET" ]; then
        show-error "$TARGET" ist gar kein Verzeichnis.
        exit 1
    fi
else
    TARGET=`mktemp -d`
fi

export MH=`mktemp`
MHDIR=`mktemp -d`
echo "Path: $MHDIR" >$MH

cleanup()
{
    rm -rf $MH $MHDIR
}

get-image()
{
    mhstore -file "$1" -part 2 2>&1 | sed -r \
        's/^storing message.* part 2 as file (.*)$/\1/'
}

get-date()
{
    date -d "`sed -rn 's/^Date: (.*)$/\1/p' "$1"`" +%Y-%m-%d--%H%M
}

SUC=0

for f in *; do
    my-echo
###	if file "$f" | grep -q "mail text"; then (dieser Test geht nicht mehr...)
    my-echo Die Datei "$f" sieht wie eine Email aus, also auspacken.
    img=`get-image "$f"`
    if file "$img" | grep -q "JPEG image data"; then
        my-echo Das Bild "$img" wurde aus der Email extrahiert.
    else
        show-error "Die Datei '$img' ist leider kein JPEG-Bild..."
        continue
    fi
    date=`get-date "$f"`
    if [ -n "$date" ]; then
        my-echo Das Datum ist: "$date"
    else
        show-error Es wurde kein Datum gefunden...
        continue
    fi
    r="$PRE$date.jpg"
    if mv "$img" "$TARGET/$r"; then
        my-echo Nun gibt es ein neues Bild: "$TARGET/$r".
        SUC=1
    else
        show-error "Ich konnte $img nicht nach $TARGET/$r verschieben..."
    fi
done

my-echo
if [ $SUC = 1 ]; then
    my-echo "So das war's! Ich hoffe, daß keine Fehler aufgetreten sind!"
    echo "Alle Fotos sind nun in $TARGET"
else
    show-error Es wurden leider keine Fotos extrahiert...
fi
my-echo

cleanup

exit 0
