#!/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
DATADIR=${VARDIR}/chrome.d
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/installed-chrome.txt
rm -f  ${LIBDIR}/chrome/*.rdf
rm -f  ${LIBDIR}/components/*.dat

# purge ${LIBDIR}/defaults/profile/extensions/installed-extensions.txt symlink
# we used to create
if [ -e ${LIBDIR}/defaults/profile/extensions/installed-extensions.txt ] || [ -L ${LIBDIR}/defaults/profile/extensions/installed-extensions.txt ]; then
  rm -f ${LIBDIR}/defaults/profile/extensions/installed-extensions.txt
fi

# 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}/chrome/installed-chrome.txt ${LIBDIR}/chrome/
ln -sf ${VARDIR}/extensions/installed-extensions.txt \
    ${LIBDIR}/extensions

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

# purge Extensions.rdf
rm -f ${LIBDIR}/extensions/Extensions.rdf

# Handle extensions {uid} directories (for compatibility purpose with
# previously packaged extensions):
# remove those that are symlinks pointing to nowhere
# and remove those that are directory and are in defaults/profile/extensions
for f in `find ${LIBDIR}/extensions/ -name '{*}' -maxdepth 1`; do
    if [ -L $f ] && [ ! -e $f ]; then
        rm -f $f
    elif [ ! -L $f ] && [ -d $f ] && [ -d ${LIBDIR}/defaults/profile/extensions/`basename $f` ]; then
        rm -rf $f
    fi
done
# create symlinks that are not already there
for f in `find ${LIBDIR}/defaults/profile/extensions/ -name '{*}' -maxdepth 1`; do
    [ "${VERBOSE}" ] && echo "W: ${f} should be in ${LIBDIR}/extensions/" >&2
    if [ ! -e ${LIBDIR}/extensions/`basename $f` ]; then
        ln -s $f ${LIBDIR}/extensions
    fi
done

# gen installed-chrome.txt
TMPFILE=`tempfile`
for f in `echo ${DATADIR}/* | sort`; do
    cat $f >> ${TMPFILE}
done

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

# 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
mv ${LIBDIR}/components/*.dat ${VARDIR}/components/ || true
ln -fs ${VARDIR}/components/*.dat ${LIBDIR}/components/ 

mv ${LIBDIR}/chrome/*.rdf ${VARDIR}/chrome/ || true
ln -fs ${VARDIR}/chrome/*.rdf ${LIBDIR}/chrome/

rm -fr $HOME

# done
echo done.
