#!/bin/sh

usage()
{
    echo "This script regerenates the system OOo UNO package cache"
    echo
    echo "Usage: ${0##*/} [--help] ooo_home broken_extension..."
    echo
    echo "Options:"
    echo
    echo "	--help 		 this help"
    echo "	ooo_home	 path where OOo is installed, e.g. /usr/lib/ooo3"
    echo "	broken_extension list of broken extensions, e.g. LanguageTool-0.9.3.oxt"
}

if test "$1" = "--help" -o $# -lt 1 ; then
    usage
    exit 0;
fi

OOO_HOME="$1"
shift;
OOO_BROKEN_EXTENSIONS="$*"

OOO_UNO_CACHE="$OOO_HOME/share/uno_packages/cache"

# nothing to do if the cache does not exist (fresh installation or so)
test -d "$OOO_UNO_CACHE" || exit 0;

# check for broken extensions
found=
for extension in $OOO_UNO_CACHE/uno_packages/*/* ; do
    extension_name=`basename $extension`
    if echo "$OOO_BROKEN_EXTENSIONS" | grep -q "$extension_name" ; then
	echo "Need to regenerate the uno cache because of the broken extension $extension_name."
	found=1
	break
    fi
done

if test -n "$found" ; then
    # saving sources of the registered extensions
    temp_cache=`mktemp -d $OOO_UNO_CACHE.XXXXXX`
    for extension in $OOO_UNO_CACHE/uno_packages/*/* ; do
	extension_name=`basename $extension`
	echo "Saving $extension_name..."
	if test -f $extension ; then
	    cp $extension $temp_cache
	elif test -d $extension && cd $extension ; then
	    zip -q -r $temp_cache/$extension_name *
	    cd - >/dev/null 2>&1
	fi
    done

    echo "Removing the cache"
    rm -rf $OOO_UNO_CACHE/*

    # registering the good extensions once again
    for extension in $temp_cache/* ; do
	extension_name=`basename $extension`
	if echo "$OOO_BROKEN_EXTENSIONS" | grep -q "$extension_name" ; then
	    echo "Skipping unusable $extension_name..."
	    continue;
	fi
	if test ! -f $extension ; then
	    echo "Error: is not a file: $extension"
	    continue;
	fi
	echo "Registering $extension_name..."
	unopkg add --shared --force $extension || true
    done
    rm -rf $temp_cache
fi
