#!/bin/sh
#
# Wrapper script for openoffice
#
# (C) Peter 'Nidd' Novodvorsky, 2001,2002
# (C) Martin 'empty' Quinson, 2002.
#     Modifications by Chris Halls

# This program is free software; you can redistribute it and/or modify         
# it under the terms of the GNU General Public License as published by         
# the Free Software Foundation; either version 2 of the License, or            
# (at your option) any later version.                                          
#                                                                             
# This program is distributed in the hope that it will be useful,              
# but WITHOUT ANY WARRANTY; without even the implied warranty of               
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU             
# General Public License for more details.                                     
#                                                                             
# You should have received a copy of the GNU General Public License            
# along with this program; if not, write to the Free Software                  
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA      

# this string should be exactly as in ~/.sversionrc
OOVERSION="OpenOffice.org <pv>"

##
## Source system configuration file
##
[ -r /etc/openoffice/openoffice.conf ] && . /etc/openoffice/openoffice.conf

##
## where does OO live for this user ?
##
OOHOME=""
if [ -e ~/.sversionrc ] && grep -q "$OOVERSION" ~/.sversionrc ; then
  # already installed for this user (warning, .sversionrc is DOS encoded)
  OOHOME=`grep "^$OOVERSION=" ~/.sversionrc| \
          sed "s|^$OOVERSION=file://||"  | \
	  xargs echo`
  if [ ! -e $OOHOME ] ; then
    echo "I'm confused because I can't find OpenOffice's user files."
    echo "Your ~/.sversionrc file tells they should be under $OOHOME,"
    echo "but they are not. Please fix the situation manually."
    echo "You may want to edit ~/.sversionrc to indicate where is OO"
    echo "installed, or remove it if you did remove your installation"
    echo "directory manually (you bad one)."
    exit 1
  fi
fi

##
## Unset SESSION_MANAGER if gnome-session is the session manager
## See http://www.openoffice.org/issues/show_bug.cgi?id=4494
##
SMPID=`echo $SESSION_MANAGER | sed --quiet "s,local.*/,,p"`
if [ -n "$SMPID" ] && [ -L /proc/"$SMPID"/exe ]; then
  SESMGR="`readlink -f /proc/$SMPID/exe`"
  if [ "$SESMGR" = "/usr/bin/gnome-session" ]; then
      echo "Gnome session manager detected - session management disabled"
      unset SESSION_MANAGER
  fi
fi

##
## install OO for this user if needed
##
if [ -z "$OOHOME" ] ; then
  if [ -e /etc/openoffice/autoresponse.conf ] && \
    grep -q DESTINATIONPATH /etc/openoffice/autoresponse.conf ; then
    # first install
    OOHOME=`grep DESTINATIONPATH /etc/openoffice/autoresponse.conf | \
           sed -e 's/DESTINATIONPATH=//' -e "s|<home>|$HOME|"`

    if [ -d "$OOHOME" ]; then
      echo "openoffice.org:  You have no entry for $OOVERSION in ~/.sversionrc, "
      echo "yet the directory $OOHOME exists." 
      echo "Please remove $OOHOME and try again."
      exit 1
    fi
    echo "running openoffice.org setup..."
    if ! /opt/OpenOffice.org<pv>/program/setup -R:/etc/openoffice/autoresponse.conf >& /dev/null; then
      echo "setup failed.. abort"
      exit 1
    fi
    echo "Setup complete. Running openoffice.org..."
 else
    echo "openoffice.org: Damnit! I can't find OpenOffice's user files. Did you break"
    echo "the /etc/openoffice/autoresponse.conf file manually ?"
    echo "This file should contain DESTINATIONPATH"
    exit 1
  fi
fi

##
## If no file is specified on the command line, which application to start?  
## The wrapper can be called from several links in /usr/bin
##
if [ $# = 0 ]; then
  case `basename $0` in
    oocalc) set -- private:factory/scalc;;
    oodraw) set -- private:factory/sdraw;;
    ooimpress) set -- private:factory/simpress;;
    oomath) set -- private:factory/smath;;
    oowriter) set -- private:factory/swriter;;
  esac
fi

##
##
## Change the config files to conform to current locale used
##

# Fix some variable to make the paths shorter in the rest
LINGFILE="$OOHOME/user/config/registry/instance/org/openoffice/Office/Linguistic.xml"
SETUPFILE="$OOHOME/user/config/registry/instance/org/openoffice/Setup.xml"


# Search the right locale
OLDLOCALE=""
if [ -e $LINGFILE ] ; then
  OLDLOCALE=`grep 'DefaultLocale cfg' $LINGFILE|sed 's/<[^>]*>//g'|sed 's/[[:blank:]]//g'`
fi 
if [ -z $OLDLOCALE ]; then  OLDLOCALE="en-US";  fi
if [ "x$OLDLOCALE" = "xC" ]; then  OLDLOCALE="en-US";  fi

LOCALE=$LC_ALL
if [ -z $LOCALE ] ; then LOCALE="$LC_MESSAGES"; fi
if [ -z $LOCALE ] ; then LOCALE="$LANG"; fi
if [ -z $LOCALE ] ; then LOCALE="en-US"; fi
if [ "x$LOCALE" = "xC" ] ; then LOCALE="en-US"; fi

if [ $LOCALE != $OLDLOCALE ] ; then 

  # Change instdb.ins
  cp $OOHOME/instdb.ins $OOHOME/instdb.ins.$OLDLOCALE
  sed "s/>$OLDLOCALE</>$LOCALE</" $OOHOME/instdb.ins.$OLDLOCALE > $OOHOME/instdb.ins
  
  # Create Linguistic.xml if don't exists
  if [ ! -e $LINGFILE.$OLDLOCALE ] ; then
    # get a default one, and change en-US to OLDLOCALE inside. I guess this is a noop, but I'm not sure
    sed "s/>en-US</>$OLDLOCALE</" \
      < /opt/OpenOffice.org<pv>/share/config/registry/instance/org/openoffice/Office/Linguistic.xml \
      > $LINGFILE.$OLDLOCALE
  fi
  
  # change Linguistic.xml
  sed "s/>$OLDLOCALE</>$LOCALE</" $LINGFILE.$OLDLOCALE > $LINGFILE

  # Change Setup.xml
  if grep -q '<ooLocale cfg:type' $SETUPFILE ; then 
    cp $SETUPFILE $SETUPFILE.$OLDLOCALE
    sed "s/>$OLDLOCALE</>$LOCALE</" $SETUPFILE.$OLDLOCALE > $SETUPFILE
  else # ooLocale entry does not exists in Setup.xml
    cp $SETUPFILE $SETUPFILE.tmp
     
    cat $SETUPFILE.tmp | \
      perl -e "while (<>) { /<Office>/ && print \"<L10N>\n<ooLocale cfg:type=\\\"string\\\">$LOCALE</ooLocale>\n</L10N>\n\";print \$_;}" > \
      $SETUPFILE 
    # this perl command is to add a <L10N> section if it does not exists.
    # On my machine, it produce the following patch:
    
    # <Setup state="modified" cfg:package="org.openoffice" xmlns="http://openoffice.org/2000/registry/components/Setup" xmlns:cfg="http://openoffice.org/2000/registry/instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
    #+ <L10N>
    #+  <ooLocale cfg:type="string">fr_FR@euro</ooLocale>
    #+ </L10N>
    #  <Office>
   
    rm $SETUPFILE.tmp
  fi # change Setup.xml
  
fi # LOCALE != OLDLOCALE

## Previous dead installation?
[ -d $HOME/.openoffice/user ] && echo "Warning: you have a user settings directory from 1.0.0 in ~/.openoffice/user - this is no longer used"

##
## That's it. Launch the beast (with the given args)
##
export LD_PRELOAD=/usr/lib/libfreetype.so
case `basename $0` in
  oosetup) exec "$OOHOME/setup" ;;
  oopadmin) exec "$OOHOME/spadmin" ;;
  *) exec "$OOHOME/soffice" "$@" ;;
esac
	  
## Changelog
# 07/10 challs
#   * use 1.0.1 directory and improve error checking
# 07/02 challs
#   * use readlink in /proc/PID/exe to get
#     real session manager name
# 06/12 challs
#   * merge into main package
#   * change $@ to "$@"
#   * source configuration file: 
#       /etc/openoffice/openoffice.conf
# 06/12 mquinson
#   * strace only when DEBUG is set to yes
#   * readd the $@ to pass the args to soffice
# 06/06 mquinson
#   * Make sure the OLDLOCALE is never empty
#   * handle the case where the locale is C
