#!/bin/sh
#---------------------------------------------
#   xdg-email
#
#   Utility script to open the users favorite email program, using the
#       RFC 2368 mailto: URI spec
#
#   Refer to the usage() function below for usage.
#
#   Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org>
#   Copyright 2009-2010, Rex Dieter <rdieter@fedoraproject.org>
#   Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
#   Copyright 2006, Jeremy White <jwhite@codeweavers.com>
#
#   LICENSE:
#
#---------------------------------------------

manualpage()
{
cat << _MANUALPAGE
_MANUALPAGE
}

usage()
{
cat << _USAGE
_USAGE
}

#@xdg-utils-common@

run_thunderbird()
{
    local THUNDERBIRD MAILTO NEWMAILTO TO CC BCC SUBJECT BODY ATTACH
    THUNDERBIRD="$1"
    MAILTO=$(echo "$2" | sed 's/^mailto://')
    echo "$MAILTO" | grep -qs "^?"
    if [ "$?" = "0" ] ; then
        MAILTO=$(echo "$MAILTO" | sed 's/^?//')
    else
        MAILTO=$(echo "$MAILTO" | sed 's/^/to=/' | sed 's/?/\&/')
    fi

    MAILTO=$(echo "$MAILTO" | sed 's/&/\n/g')
    TO=$(echo "$MAILTO" | grep '^to=' | sed 's/^to=//' | awk '{ printf "%s,",$0 }')
    CC=$(echo "$MAILTO" | grep '^cc=' | sed 's/^cc=//' | awk '{ printf "%s,",$0 }')
    BCC=$(echo "$MAILTO" | grep '^bcc=' | sed 's/^bcc=//' | awk '{ printf "%s,",$0 }')
    SUBJECT=$(echo "$MAILTO" | grep '^subject=' | tail -n 1)
    BODY=$(echo "$MAILTO" | grep '^body=' | tail -n 1)
    ATTACH=$(echo "$MAILTO" | sed 's/^attach=/\n\nfile:\/\//g' | awk '/^file:/ { printf "%s,",$0 }' | sed 's/,$//')

    if [ -z "$TO" ] ; then
        NEWMAILTO=
    else
        NEWMAILTO="to='$TO'"
    fi
    if [ -n "$CC" ] ; then
        NEWMAILTO="${NEWMAILTO},cc='$CC'"
    fi
    if [ -n "$BCC" ] ; then
        NEWMAILTO="${NEWMAILTO},bcc='$BCC'"
    fi
    if [ -n "$SUBJECT" ] ; then
        NEWMAILTO="${NEWMAILTO},$SUBJECT"
    fi
    if [ -n "$BODY" ] ; then
        NEWMAILTO="${NEWMAILTO},$BODY"
    fi

    if [ -n "$ATTACH" ] ; then
        NEWMAILTO="${NEWMAILTO},attachment='${ATTACH}'"
    fi

    NEWMAILTO=$(echo "$NEWMAILTO" | sed 's/^,//')
    DEBUG 1 "Running $THUNDERBIRD -compose \"$NEWMAILTO\""
    "$THUNDERBIRD" -compose "$NEWMAILTO"
    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
}

open_kde()
{
    local client kde_email_profile_name
    kde_email_profile_name=`kreadconfig --file emaildefaults --group Defaults --key Profile`
    client=`kreadconfig --file emaildefaults --group PROFILE_"$kde_email_profile_name" --key EmailClient | cut -d ' ' -f 1`
    echo $client | grep thunderbird > /dev/null 2>&1
    if [ $? -eq 0 ] ; then
        run_thunderbird "$client" "$1"
    fi

    if [ -f /etc/SuSE-release ] ; then
        # Workaround for SUSE 10.0
        [ -z "$client" ] && client="kmail"
        if ! which "$client" > /dev/null 2> /dev/null; then
            DEBUG 3 "KDE has $client configured as email client which isn't installed"
            if which gnome-open > /dev/null 2> /dev/null && which evolution > /dev/null 2> /dev/null; then
               DEBUG 3 "Try gnome-open instead"
               open_gnome "$1"
            fi
        fi
    fi
    DEBUG 1 "Running kmailservice \"$1\""
    if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
        KMAILSERVICE=`kde4-config --locate kmailservice --path exe 2>/dev/null`
        $KMAILSERVICE "$1"
    else
        KMAILSERVICE=`which kmailservice 2>/dev/null`
        # KDE3 uses locale's encoding when decoding the URI, so set it to UTF-8
        LC_ALL=C.UTF-8 $KMAILSERVICE "$1"
    fi

    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
}

open_gnome3()
{
    local client
    local desktop
    desktop=`xdg-mime query default "x-scheme-handler/mailto"`
    client=`desktop_file_to_binary "$browser"`
    echo $client | grep thunderbird > /dev/null 2>&1
    if [ $? -eq 0 ] ; then
        run_thunderbird "$client" "$1"
    fi

    if gvfs-open --help 2>/dev/null 1>&2; then
        DEBUG 1 "Running gvfs-open \"$1\""
        gvfs-open "$1"
    else
        DEBUG 1 "Running gnome-open \"$1\""
        gnome-open "$1"
    fi

    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
}

open_gnome()
{
    local client
    client=`gconftool-2 --get /desktop/gnome/url-handlers/mailto/command | cut -d ' ' -f 1` || ""
    echo $client | grep thunderbird > /dev/null 2>&1
    if [ $? -eq 0 ] ; then
        run_thunderbird "$client" "$1"
    fi

    if gvfs-open --help 2>/dev/null 1>&2; then
        DEBUG 1 "Running gvfs-open \"$1\""
        gvfs-open "$1"
    else
        DEBUG 1 "Running gnome-open \"$1\""
        gnome-open "$1"
    fi

    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
}


open_xfce()
{
    DEBUG 1 "Running exo-open \"$1\""
    exo-open "$1"

    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
}

open_generic()
{
    IFS=":"
    for browser in $BROWSER; do
        if [ x"$browser" != x"" ]; then

            browser_with_arg=`printf "$browser" "$1" 2>/dev/null`
            if [ $? -ne 0 ]; then browser_with_arg=$browser;
            fi

            if [ x"$browser_with_arg" = x"$browser" ]; then "$browser" "$1";
            else $browser_with_arg;
            fi

            if [ $? -eq 0 ]; then exit_success;
            fi
        fi
    done

    exit_failure_operation_impossible "no method available for opening '$1'"
}

url_encode()
{
result=$(echo "$1" | $utf8 | awk '
    BEGIN {
        for ( i=1; i<=255; ++i ) ord [ sprintf ("%c", i) "" ] = i + 0
        e = ""
        linenr = 1
    }
    {
        if ( linenr++ != 1 ) {
            e = e "%0D%0A"
        }
        for ( i=1; i<=length ($0); ++i ) {
            c = substr ($0, i, 1)
            if ( ord [c] > 127 ) {
                e = e "%" sprintf("%02X", ord [c])
            } else if ( c ~ /[@a-zA-Z0-9.-\\\/]/ ) {
                e = e c
            } else {
                e = e "%" sprintf("%02X", ord [c])
            }
        }
    }
    END {
        print e
    }
')
}

options=
mailto=
utf8="iconv -t utf8"
while [ $# -gt 0 ] ; do
    parm="$1"
    shift

    case "$parm" in
      --utf8)
        utf8="cat"
        ;;

      --to)
        if [ -z "$1" ] ; then
            exit_failure_syntax "email address argument missing for --to"
        fi
        url_encode "$1"
        options="${options}to=${result}&"
        shift
        ;;

      --cc)
        if [ -z "$1" ] ; then
             exit_failure_syntax "email address argument missing for --cc"
        fi
        url_encode "$1"
        options="${options}cc=${result}&"
        shift
        ;;

      --bcc)
        if [ -z "$1" ] ; then
            exit_failure_syntax "email address argument missing for --bcc"
        fi
        url_encode "$1"
        options="${options}bcc=${result}&"
        shift
        ;;

      --subject)
        if [ -z "$1" ] ; then
            exit_failure_syntax "text argument missing for --subject option"
        fi
        url_encode "$1"
        options="${options}subject=${result}&"
        shift
        ;;

      --body)
        if [ -z "$1" ] ; then
            exit_failure_syntax "text argument missing for --body option"
        fi
        url_encode "$1"
        options="${options}body=${result}&"
        shift
        ;;

      --attach)
        if [ -z "$1" ] ; then
            exit_failure_syntax "file argument missing for --attach option"
        fi
        check_input_file "$1"
        file=`readlink -f "$1"` # Normalize path
        if [ -z "$file" -o ! -f "$file" ] ; then
            exit_failure_file_missing "file '$1' does not exist"
        fi

        url_encode "$file"
        options="${options}attach=${result}&"
        shift
        ;;

      -*)
        exit_failure_syntax "unexpected option '$parm'"
        ;;

      mailto:*)
        mailto="$parm"
        ;;

      *@*)
        url_encode "$parm"
        if [ -z "${mailto}" ] ; then
            mailto="mailto:"${result}"?"
        else
            options="${options}to=${result}&"
        fi
        ;;

      *)
        exit_failure_syntax "unexpected argument '$parm'"
        ;;
    esac
done

if [ -z "${mailto}" ] ; then
    # TO address is optional
    mailto="mailto:?"
fi

case $mailto in
      *\?)
        mailto="${mailto}${options}"
        ;;

      *\?*)
        mailto="${mailto}&${options}"
        ;;

      *)
        mailto="${mailto}?${options}"
        ;;
esac

# Strip trailing ? and &
mailto=`echo "${mailto}"| sed 's/[?&]$//'`

# Shouldn't happen
[ x"${mailto}" != x"" ] || exit_failure_syntax

if which @NAME@-hook.sh > /dev/null 2> /dev/null; then
    @NAME@-hook.sh "${mailto}"
    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
fi

detectDE

if [ x"$DE" = x"" ]; then
    DE=generic
fi

# if BROWSER variable is not set, check some well known browsers instead
if [ x"$BROWSER" = x"" ]; then
    BROWSER=links2:elinks:links:lynx:w3m
    if [ -n "$DISPLAY" ]; then
        BROWSER=x-www-browser:firefox:seamonkey:mozilla:epiphany:konqueror:chromium-browser:google-chrome:$BROWSER
    fi
fi

case "$DE" in
    kde)
    open_kde "${mailto}"
    ;;

    gnome)
    open_gnome "${mailto}"
    ;;

    gnome3)
    open_gnome3 "${mailto}"
    ;;

    xfce)
    open_xfce "${mailto}"
    ;;

    generic|lxde)
    open_generic "${mailto}"
    ;;

    *)
    exit_failure_operation_impossible "no method available for opening '${mailto}'"
    ;;
esac
