#!/bin/sh
#
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL.  You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation.  Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation.  All Rights
# Reserved.
#

## $Id: mozilla.in,v 1.3.4.9 2004/10/26 09:26:11 bryner%brianryner.com Exp $
## 
## Usage:
##
## $ mozilla [args]
##
## This script is meant to run the mozilla-bin binary from either 
## mozilla/xpfe/bootstrap or mozilla/dist/bin.
##
## The script will setup all the environment voodoo needed to make
## the mozilla-bin binary to work.
##

#
# MOZ_PIS, "Mozilla Plugable Init Scripts"
# MOZ_PIS_ is the name space used
# These variables and there meaning are specified in
# mozilla/xpfe/bootstrap/init.d/README
moz_pis_startstop_scripts()
{
    MOZ_PIS_API=2
    MOZ_PIS_MOZBINDIR="${dist_bin}"
    MOZ_PIS_SESSION_PID="$$"
    MOZ_PIS_USER_DIR="${MOZ_USER_DIR}"
    export MOZ_PIS_API MOZ_PIS_MOZBINDIR MOZ_PIS_SESSION_PID MOZ_PIS_USER_DIR

    case "${1}" in
	"start")
	    for curr_pis in "${MOZ_PIS_MOZBINDIR}/init.d"/S* \
			    "${HOME}/${MOZ_PIS_USER_DIR}/init.d"/S*; do
		if [ -x "${curr_pis}" ]; then
		    case "${curr_pis}" in
			*.sh)
			    . "${curr_pis}"
			    ;;
			*)
			    ${curr_pis} "start"
			    ;;
		    esac
		fi
	    done
	    ;;
	"stop")
	    for curr_pis in "${MOZ_PIS_MOZBINDIR}/init.d"/K* \
			    "${HOME}/${MOZ_PIS_USER_DIR}/init.d"/K*; do
		if [ -x "${curr_pis}" ]; then
		    case "${curr_pis}" in
			*.sh)
			    . "${curr_pis}"
			    ;;
			*)
			    ${curr_pis} "stop"
			    ;;
		    esac
		fi
	    done
	    ;;
	*)
	    echo "$0: Internal error in moz_pis_startstop_scripts." 1>&2
	    exit 1
	    ;;
    esac
}

# uncomment for debugging
#set -x

#
# variables
#
#location="new-tab"
#MOZILLA_UILOCALE="en-US"
#MOZILLA_UIREGION="US"

#
# working definitions
#
MOZ_USER_DIR=".mozilla/firefox"
moz_libdir="/usr/X11R6/lib/firefox"
MRE_HOME="/usr/X11R6/lib/mre/mre-1.0.3"

debugging=		# set the debugging level
use_openFile="yes"	# use openFile() for file/dir
here=`pwd`

if [ ! -d "${MRE_HOME}" ]; then
    # use moz_libdir as MRE_HOME
    MRE_HOME="${moz_libdir}"
fi
export	MRE_HOME

# Use run-mozilla.sh in the current dir if it exists
# If not, then start resolving symlinks until we find run-mozilla.sh
found=0
progname="$0"
curdir=`dirname "$progname"`
progbase=`basename "$progname"`
run_moz="$curdir/run-mozilla.sh"
if [ -x "$run_moz" ]; then
    dist_bin="$curdir"
    found=1
else
    while [ -h "${progname}" ]; do
	bn=`basename "${progname}"`
	cd `dirname "${progname}"`
	progname=`ls -l "${bn}" | sed -e 's/^.* -> //'`
	if [ ! -x "$progname" ]; then
	    break
	fi
    	curdir=`dirname "${progname}"`
    	run_moz="${curdir}/run-mozilla.sh"
    	if [ -x "${run_moz}" ]; then
	    cd "$curdir"
	    dist_bin=`pwd`
	    run_moz="${dist_bin}/run-mozilla.sh"
	    found=1
	    break
	fi
    done
    cd "${here}"
fi
if [ $found = 0 ]; then
    # Check default compile-time libdir
    if [ -x "${moz_libdir}/run-mozilla.sh" ]; then
	dist_bin="$moz_libdir"
	run_moz="${dist_bin}/run-mozilla.sh"
    else
	echo "$0: Cannot find mozilla runtime directory. Exiting." 1>&2
	exit 1
    fi
fi

MOZILLA_BIN="${progbase}-bin"
if [ "$OSTYPE" = "beos" ]; then
    mimeset -F "$MOZILLA_BIN"
fi

# test for binary apps in ${dist_bin}
if [ -x "${dist_bin}/${MOZILLA_BIN}" ]; then
    MOZILLA_BIN="${dist_bin}/${progbase}-bin"
else
    echo "$0: Cannot find mozilla binary executable. Exiting." 1>&2
    exit 1
fi
if [ -x "${dist_bin}/mozilla-xremote-client" ]; then
    MOZ_CLIENT_PROGRAM="${dist_bin}/mozilla-xremote-client -a ${progbase}"
else
    MOZ_CLIENT_PROGRAM="${MOZILLA_BIN} -remote -a ${progbase}"
fi

# guest a default remote command
_remote_cmd="xfeDoCommand(openBrowser)"

# parse options
script_args=	# null
moreargs=	# null
target=		# null
ALREADY_RUNNING="test"
if [ -x /etc/lang.sh ]; then
	. /etc/lang.sh
	uilocale=`echo $LANG | cut -d. -f 1 | sed 's/_/-/g'`
fi
while [ $# -gt 0 ]
do
    if [ -n "${target}" ]; then
	# well, this can't be the target if not last
	moreargs="${moreargs} \"${target}\""
	target=	# null
    fi
    case "$1" in
	# preserve [pP] for profile
	--pure | -pure)
	    MOZILLA_BIN="${MOZILLA_BIN}.pure"
	    shift
	    ;;
	-g | --debug)
	    script_args="${script_args} -g"
	    debugging=1
	    shift
	    ;;
	-d | --debugger)
	    if [ -n "$2" ]; then
		script_args="${script_args} -d $2"
		shift 2
	    else
		"$0: ERROR, $1 needs an argument. Exiting" 1>&2
		exit 1
	    fi
	    ;;
	-[Uu][Ii][Ll]ocale)
	    if [ -n "$2" ]; then
		uilocale="$2"
		shift 2
	    else
		echo "$0: ERROR, $1 needs an argument. Exiting" 1>&2
		exit 1
	    fi
	    ;;
	-[Uu][Ii][Rr]egion)
	    if [ -n "$2" ]; then
		uiregion="$2"
		shift 2
	    else
		echo "$0: ERROR, $1 needs an argument. Exiting" 1>&2
		exit 1
	    fi
	    ;;
	-browser)
	    # browser is default for firefox
	    shift
	    ;;
	-turbo | -nosplash | -quiet)
	    # use remote even with this
	    moreargs="${moreargs} $1"
	    shift
	    ;;
	-*)
	    # don't use remote with options
	    ALREADY_RUNNING=	# null
	    moreargs="${moreargs} $1"
	    shift
	    ;;
	*)
	    target="$1"
	    shift
	    ;;
    esac
done

# test for a running copy of firefox
# seems this is not needed
#if [-n "${ALREADY_RUNNING}" ]; then
#    if [ -n "${DISPLAY}" ]; then
#	if [ -n "${debugging}" ]; then
#	    echo "${run_moz} ${MOZ_CLIENT_PROGRAM} ping()"
#	    ${run_moz} ${MOZ_CLIENT_PROGRAM} 'ping()' && ALREADY_RUNNING="yes"
#	else
#	    ${run_moz} ${MOZ_CLIENT_PROGRAM} 'ping()' >/dev/null 2>&1 &&
#		ALREADY_RUNNING="yes"
#	fi
#    elif [ -n "${debugging}" ]; then
#	echo "$0: WARN, no DISPLAY environment" 1>&2
#    fi
#fi

# process target
if [ -n "${target}" ]; then
    moreargs="${moreargs} \"${target}\""
    if [ -n "${ALREADY_RUNNING}" ]; then
	if [ `expr "${target}" : '.*:.*'` -eq 0 ]; then
	    if [ `expr "${target}" : '/.*'` -eq 0 ]; then
		target="${here}/${target}"
	    fi
	    if [ -r "${target}" -o -d "${target}" ]; then
		[ -n "${use_openFile}" ] || target="file://${target}"
	    else
		echo "$0: WARN, target: ${target} not an URI/file/dir" 1>&2
		ALREADY_RUNNING=	# null
	    fi
	else
	    # an former URI, don't use openFile
	    use_openFile=	# null
	fi
    fi
fi

# try remote protocol if running
if [ -n "${ALREADY_RUNNING}" ]; then
    if [ -n "${target}" ]; then
	if [ -n "${use_openFile}" ]; then
	    _remote_cmd="openFile(${target})"
	elif [ -n "${location}" ]; then
	    _remote_cmd="openURL(${target},${location})"
	else
	    _remote_cmd="openURL(${target})"
	fi
    fi
    # FIXME problems with freedesktop StartupNotify
    if [ -n "${debugging}" ]; then
	echo "${run_moz} ${script_args} ${MOZ_CLIENT_PROGRAM} ${_remote_cmd}"
	${run_moz} ${script_args} ${MOZ_CLIENT_PROGRAM} ${_remote_cmd} &&
       	    exit 0
    else
	${run_moz} ${script_args} ${MOZ_CLIENT_PROGRAM} ${_remote_cmd} \
	    >/dev/null 2>&1 && exit 0
    fi
fi

# fallback to direct invocation

# UILocale, UIRegion
if [ -z "${uilocale}" -a -n "${MOZILLA_UILOCALE}" ]; then
    uilocale="${MOZILLA_UILOCALE}"
fi
if [ -z "${uiregion}" -a -n "${MOZILLA_UIREGION}" ]; then
    uiregion="${MOZILLA_UIREGION}"
fi
if [ -n "${uiregion}" -a -z "${uilocale}" ]; then
    uilocale="en-US"
fi
if [ -n "${uilocale}" ]; then
    if [ -n "${uiregion}" ]; then
	moreargs="-UIRegion ${uiregion} ${moreargs}"
    fi
    moreargs="-UILocale ${uilocale} ${moreargs}"
fi

# real invocation
eval "set -- ${moreargs}"

## Start addon scripts
moz_pis_startstop_scripts "start"

if [ -n "${debugging}" ]; then
    echo "${run_moz} ${script_args} ${MOZILLA_BIN} $@"
fi
${run_moz} ${script_args} ${MOZILLA_BIN} "$@"
exitcode=$?

## Stop addon scripts
moz_pis_startstop_scripts "stop"

exit $exitcode
# EOF.
