diff options
Diffstat (limited to 'shell/source/unix/misc')
-rwxr-xr-x | shell/source/unix/misc/senddoc.sh | 439 | ||||
-rw-r--r-- | shell/source/unix/misc/uri-encode.c | 44 |
2 files changed, 483 insertions, 0 deletions
diff --git a/shell/source/unix/misc/senddoc.sh b/shell/source/unix/misc/senddoc.sh new file mode 100755 index 0000000000..f70251ecf3 --- /dev/null +++ b/shell/source/unix/misc/senddoc.sh @@ -0,0 +1,439 @@ +#!/bin/sh +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +URI_ENCODE=$(dirname "$0")/uri-encode +FOPTS="" +sd_platform=$(uname -s) + +# linux file utility needs -L option to resolve symlinks +if [ "$sd_platform" = "Linux" ] ; then + FOPTS="-L" +fi + +# do not confuse the system mail clients with OOo and Java libraries +unset LD_LIBRARY_PATH + +# tries to locate the executable specified +# as first parameter in the user's path. +which() { + if [ ! -z "$1" ]; then + for i in $(echo "$PATH" | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'); do + if [ -x "$i/$1" -a ! -d "$i/$1" ]; then + echo "$i/$1" + break; + fi + done + fi +} + +# checks for the original mozilla start script(s) +# and restrict the "-remote" semantics to those. +run_mozilla() { + # find mozilla script in PATH if necessary + if [ "$(basename "$1")" = "$1" ]; then + moz=$(which "$1") + else + moz=$1 + fi + + if file $FOPTS "$moz" | grep "script" > /dev/null && grep "[NM]PL" "$moz" > /dev/null; then + "$moz" -remote 'ping()' 2>/dev/null >/dev/null + if [ $? -eq 2 ]; then + "$1" -compose "$2" & + else + "$1" -remote "xfeDoCommand(composeMessage,$2)" & + fi + else + "$1" -compose "$2" & + fi +} + +if [ "$1" = "--mailclient" ]; then + shift + MAILER=$1 + shift +fi + +# autodetect mail client from executable name +case $(basename "$MAILER" | sed 's/-.*$//') in + + iceape | mozilla | netscape | seamonkey | icedove | thunderbird | betterbird) + + while [ "$1" != "" ]; do + case $1 in + --to) + TO=${TO:-}${TO:+,}$2 + shift + ;; + --cc) + CC=${CC:-}${CC:+,}$2 + shift + ;; + --bcc) + BCC=${BCC:-}${BCC:+,}$2 + shift + ;; + --subject) + SUBJECT=$2 + shift + ;; + --body) + BODY=$2 + shift + ;; + --attach) + ATTACH=${ATTACH:-}${ATTACH:+,}$(echo "file://$2" | "${URI_ENCODE}") + shift + ;; + *) + ;; + esac + shift; + done + + if [ "$TO" != "" ]; then + COMMAND=${COMMAND:-}${COMMAND:+,}to=\'${TO}\' + fi + if [ "$CC" != "" ]; then + COMMAND=${COMMAND:-}${COMMAND:+,}cc=\'${CC}\' + fi + if [ "$BCC" != "" ]; then + COMMAND=${COMMAND:-}${COMMAND:+,}bcc=\'${BCC}\' + fi + if [ "$SUBJECT" != "" ]; then + COMMAND=${COMMAND:-}${COMMAND:+,}subject=\'${SUBJECT}\' + fi + if [ "$BODY" != "" ]; then + COMMAND=${COMMAND:-}${COMMAND:+,}body=\'${BODY}\' + fi + if [ "$ATTACH" != "" ]; then + COMMAND=${COMMAND:-}${COMMAND:+,}attachment=\'${ATTACH}\' + fi + + run_mozilla "$MAILER" "$COMMAND" + ;; + + kmail) + + while [ "$1" != "" ]; do + case $1 in + --to) + TO="${TO:-}${TO:+,}$2" + shift + ;; + --cc) + CC="${CC:-}${CC:+,}$2" + shift + ;; + --bcc) + BCC="${BCC:-}${BCC:+,}$2" + shift + ;; + --subject) + SUBJECT="$2" + shift + ;; + --body) + BODY="$2" + shift + ;; + --from) + FROM="$2" + shift + ;; + --attach) + ATTACH="${ATTACH:-}${ATTACH:+ }--attach "$(echo "file://$2" | "${URI_ENCODE}") + shift + ;; + *) + ;; + esac + shift; + done + + ${MAILER} --composer \ + ${CC:+--cc} ${CC:+"${CC}"} \ + ${BCC:+--bcc} ${BCC:+"${BCC}"} \ + ${SUBJECT:+--subject} ${SUBJECT:+"${SUBJECT}"} \ + ${BODY:+--body} ${BODY:+"${BODY}"} \ + ${FROM:+--header} ${FROM:+"From: ${FROM}"} \ + ${ATTACH:+${ATTACH}} \ + ${TO:+"${TO}"} + ;; + + mutt) + + while [ "$1" != "" ]; do + case $1 in + --from) + FROM="$2" + shift + ;; + --to) + TO="${TO:-}${TO:+,}$2" + shift + ;; + --cc) + CC="${CC:-}${CC:+,}$2" + shift + ;; + --bcc) + BCC="${BCC:-}${BCC:+,}$2" + shift + ;; + --subject) + SUBJECT="$2" + shift + ;; + --body) + TEMPLATE="$(basename "$0").mutt.XXXXXXXX" + BODY=$(mktemp -q -t "${TEMPLATE}") + echo "$2" > "$BODY" + shift + ;; + --attach) + ATTACH="$2" + shift + ;; + *) + ;; + esac + shift; + done + + x-terminal-emulator -e ${MAILER} \ + ${FROM:+-e} ${FROM:+"set from=\"${FROM}\""} \ + ${CC:+-c} ${CC:+"${CC}"} \ + ${BCC:+-b} ${BCC:+"${BCC}"} \ + ${SUBJECT:+-s} ${SUBJECT:+"${SUBJECT}"} \ + ${BODY:+-i} ${BODY:+"${BODY}"} \ + ${ATTACH:+-a} ${ATTACH:+"${ATTACH}"} \ + ${TO:+"${TO}"} & + rm -f "$BODY" + ;; + + evolution | gnome | xdg) # NB. shortened from the dash on + + while [ "$1" != "" ]; do + case $1 in + --to) + if [ "${TO}" != "" ]; then + MAILTO="${MAILTO:-}${MAILTO:+&}to=$2" + else + TO="$2" + fi + shift + ;; + --cc) + MAILTO="${MAILTO:-}${MAILTO:+&}cc="$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --bcc) + MAILTO="${MAILTO:-}${MAILTO:+&}bcc="$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --subject) + MAILTO="${MAILTO:-}${MAILTO:+&}subject"=$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --body) + MAILTO="${MAILTO:-}${MAILTO:+&}body="$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --attach) + MAILTO="${MAILTO:-}${MAILTO:+&}attach="$(echo "file://$2" | "${URI_ENCODE}") + shift + ;; + *) + ;; + esac + shift; + done + + MAILTO="mailto:${TO}?${MAILTO}" + ${MAILER} "${MAILTO}" & + ;; + + groupwise) + + while [ "$1" != "" ]; do + case $1 in + --to) + if [ "${TO}" != "" ]; then + MAILTO="${MAILTO:-}${MAILTO:+&}to=$2" + else + TO="$2" + fi + shift + ;; + --cc) + MAILTO="${MAILTO:-}${MAILTO:+&}cc="$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --bcc) + MAILTO="${MAILTO:-}${MAILTO:+&}bcc="$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --subject) + MAILTO="${MAILTO:-}${MAILTO:+&}subject"=$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --body) + MAILTO="${MAILTO:-}${MAILTO:+&}body="$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --attach) + MAILTO="${MAILTO:-}${MAILTO:+&}attachment="$(echo "file://$2" | "${URI_ENCODE}") + shift + ;; + *) + ;; + esac + shift; + done + + MAILTO="mailto:${TO}?${MAILTO}" + ${MAILER} "${MAILTO}" & + ;; + + dtmail) + + while [ "$1" != "" ]; do + case $1 in + --to) + TO=${TO:-}${TO:+,}$2 + shift + ;; + --attach) + ATTACH="$2" + shift + ;; + *) + ;; + esac + shift; + done + + ${MAILER} ${TO:+-T} ${TO:-} ${ATTACH:+-a} ${ATTACH:+"${ATTACH}"} + ;; + + sylpheed | claws) + + while [ "$1" != "" ]; do + case $1 in + --to) + TO=${TO:-}${TO:+,}$2 + shift + ;; + --attach) + ATTACH=${ATTACH:-}${ATTACH:+,}$(echo "file://$2" | "${URI_ENCODE}") + shift + ;; + *) + ;; + esac + shift; + done + + ${MAILER} ${TO:+--compose} ${TO:-} ${ATTACH:+--attach} ${ATTACH:-} + ;; + + Mail | Thunderbird | Betterbird | *.app ) + + while [ "$1" != "" ]; do + case $1 in + --attach) + #i95688# fix filenames containing accented chars, whatever alien + ATTACH="${ATTACH:-}${ATTACH:+ }"$(echo "file://$2" | "${URI_ENCODE}") + shift + ;; + *) + ;; + esac + shift; + done + /usr/bin/open -a "${MAILER}" ${ATTACH} + ;; + + *) + + # LO is configured to use something we do not recognize, or is not configured. + # Try to be smart, and send the mail anyway, if we have the + # possibility to do so. + + if [ -x /usr/bin/xdg-email ] ; then + MAILER=/usr/bin/xdg-email + elif [ -n "$DESKTOP_LAUNCH" ]; then + # http://lists.freedesktop.org/pipermail/xdg/2004-August/002873.html + MAILER=${DESKTOP_LAUNCH} + elif [ -n "$KDE_FULL_SESSION" -a -x /usr/bin/kde-open ] ; then + MAILER=/usr/bin/kde-open + elif [ -x /usr/bin/xdg-open ] ; then + MAILER=/usr/bin/xdg-open + elif command -v xdg-open >/dev/null 2>&1 ; then + MAILER=$(command -v xdg-open) + else + echo "Unsupported mail client: $(basename $MAILER | sed 's/-.*^//')" + exit 2 + fi + + while [ "$1" != "" ]; do + case $1 in + --to) + if [ "${TO}" != "" ]; then + MAILTO="${MAILTO:-}${MAILTO:+&}to=$2" + else + TO="$2" + fi + shift + ;; + --cc) + MAILTO="${MAILTO:-}${MAILTO:+&}cc="$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --bcc) + MAILTO="${MAILTO:-}${MAILTO:+&}bcc="$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --subject) + MAILTO="${MAILTO:-}${MAILTO:+&}subject"=$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --body) + MAILTO="${MAILTO:-}${MAILTO:+&}body="$(echo "$2" | "${URI_ENCODE}") + shift + ;; + --attach) + if [ "$MAILER" = "/usr/bin/xdg-email" ]; then + MAILTO="${MAILTO:-}${MAILTO:+&}attach="$(echo "file://$2" | "${URI_ENCODE}") + else + MAILTO="${MAILTO:-}${MAILTO:+&}attachment="$(echo "file://$2" | "${URI_ENCODE}") + fi + shift + ;; + *) + ;; + esac + shift; + done + + MAILTO="mailto:${TO}?${MAILTO}" + ${MAILER} "${MAILTO}" & + ;; +esac diff --git a/shell/source/unix/misc/uri-encode.c b/shell/source/unix/misc/uri-encode.c new file mode 100644 index 0000000000..f7bca6ff6a --- /dev/null +++ b/shell/source/unix/misc/uri-encode.c @@ -0,0 +1,44 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int main(void) { + for (;;) { + int c; + errno = 0; + c = getchar(); + if (c == EOF) { + exit(errno == 0 ? EXIT_SUCCESS : EXIT_FAILURE); + } else if (isalnum(c) || strchr("!$'()*+,-.:=@_~/\n", c) != NULL) { + /* valid RFC 2396 pchar characters + '/' + newline */ + if (putchar(c) == EOF) { + exit(EXIT_FAILURE); + } + } else if (printf("%%%02X", (unsigned char) (char) c) < 0) { + exit(EXIT_FAILURE); + } + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |