#!/bin/sh

set -e

umask 022

echo -n "Updating mozilla-firefox chrome registry..."

if [ "$1" = "-v" ]; then
    VERBOSE=1
    echo
fi

unset MOZILLA_FIVE_HOME || :
MOZILLA_FIVE_HOME=/usr/lib/mozilla-firefox
export MOZILLA_FIVE_HOME

# PATH
PATH=/usr/lib/mozilla-firefox:$PATH
export PATH

# added /usr/lib : don't load your local library
LD_LIBRARY_PATH=/usr/lib/mozilla-firefox${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
export LD_LIBRARY_PATH

# fake home to capture .firefox
HOME=`mktemp -d /tmp/mozilla-firefox-pkg.XXXXXX`
export HOME

/sbin/ldconfig

VARDIR=/var/lib/mozilla-firefox
LIBDIR=/usr/lib/mozilla-firefox
EXTDIR=${VARDIR}/extensions.d

# cleaning VARDIR
rm -fr ${VARDIR}/chrome ${VARDIR}/components ${VARDIR}/extensions/*

# cleaning LIBDIR
rm -rf ${LIBDIR}/chrome/overlayinfo
rm -f  ${LIBDIR}/chrome/*.rdf
rm -f  ${LIBDIR}/components/*.dat
rm -f  ${LIBDIR}/components.ini
rm -f  ${LIBDIR}/defaults.ini

# create VARDIR
install -d ${VARDIR}/chrome/overlayinfo
install -d ${VARDIR}/components

# create symlinks to LIBDIR
ln -sf ${VARDIR}/chrome/overlayinfo ${LIBDIR}/chrome/overlayinfo
ln -sf ${VARDIR}/extensions/installed-extensions.txt \
    ${LIBDIR}/extensions

# purge installed-extensions-processed.txt
rm -f ${LIBDIR}/extensions/installed-extensions-processed.txt

# reinitialize Extensions.rdf
rm -f ${LIBDIR}/extensions/Extensions.rdf
cat <<EOF > ${LIBDIR}/extensions/Extensions.rdf
<?xml version="1.0"?>

<RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#"
     xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

  <Seq about="urn:mozilla:extension:root"/>
  <Seq about="urn:mozilla:theme:root"/>

</RDF>
EOF

# gen installed-extensions.txt
TMPFILE=`tempfile`
for f in `echo ${EXTDIR}/* | sort`; do
    while read line; do
    	EXTUID=`echo ${line} | cut -f 2 -d ,`
        EXTUIDDIR=${LIBDIR}/extensions/${EXTUID}
        if [ -e ${EXTUIDDIR} ]; then
	    if [ -e ${EXTUIDDIR}/install.rdf ]; then
	        if grep ${EXTUID} ${EXTUIDDIR}/install.rdf 2>&1 > /dev/null; then
	            echo $line >> ${TMPFILE}
	        elif [ "${VERBOSE}" ]; then
		    echo "W: ${f}: ${EXTUIDDIR}/install.rdf doesn't contain the UID." >& 2
		fi
	    elif [ "${VERBOSE}" ]; then
	        echo "W: ${f}: ${EXTUIDDIR}/install.rdf doesn't exist." >&2
	    fi
	elif [ "${VERBOSE}" ]; then
	    echo "W: ${f}: ${EXTUIDDIR} doesn't exist." >&2
	fi
    done < $f
done

mv ${TMPFILE} ${VARDIR}/extensions/installed-extensions.txt
chmod 0644 ${VARDIR}/extensions/installed-extensions.txt

if [ "$VERBOSE" ]; then
    for f in `find ${LIBDIR}/extensions/ -name '{*}' -maxdepth 1`; do
        if ! grep `basename $f` ${VARDIR}/extensions/installed-extensions.txt 2>&1 > /dev/null; then
	    echo "W: `basename $f` not in ${VARDIR}/extensions/installed-extensions.txt" >&2
	fi
    done
fi

# gen
firefox-bin -register >/dev/null 2>&1 || echo "E: Registration process existed with status: $?" >&2

if [ -e ${LIBDIR}/extensions/installed-extensions.txt ]; then
    echo "E: ${LIBDIR}/extensions/installed-extensions.txt still present. Registration might have gone wrong." >&2
fi

# move and link
for file in ${LIBDIR}/components/*.dat; do
  if [ -f "${file}" ]; then
    mv ${file} ${VARDIR}/components/
    ln -fs ${VARDIR}/components/`basename "${file}"` ${LIBDIR}/components/
  fi
done

for file in ${LIBDIR}/chrome/*.rdf; do
  if [ -f "${file}" ]; then
    mv ${file} ${VARDIR}/chrome/
    ln -fs ${VARDIR}/chrome/`basename "${file}"` ${LIBDIR}/chrome/
  fi
done

mv ${LIBDIR}/defaults.ini ${VARDIR}/
ln -fs ${VARDIR}/defaults.ini ${LIBDIR}/

mv ${LIBDIR}/components.ini ${VARDIR}/
ln -fs ${VARDIR}/components.ini ${LIBDIR}/

mv ${LIBDIR}/extensions/Extensions.rdf ${VARDIR}/extensions/
ln -fs ${VARDIR}/extensions/Extensions.rdf ${LIBDIR}/extensions/

rm -fr ${HOME}

# done
echo done.
