#!/bin/sh
# excute fixmenus if locale is changed
# 07jul09 Masaki Shinomiya <shino@pos.to>
# 13sep09 AppInfo
# 19sep09 mozilla_on_locale, PuppyPin
# 06oct09 mozilla home page, jwmrc-tray
# v431JP Trash/template, modified jwmrc-tray
# 03jan10 splash, aboid multiple run, kill pup_event_frontend_d and freememapplet
# 11feb10 restart pup_event_frontend_d with correct locale
# 20feb10 copy instead of links beacause sfs may be mount or remove
# 20feb10 fixed was starting rox with LANG=C, do not sleep around restarting pup_event_frontend_d
# 22feb10 scim gtk.immodules
# 26feb10 translate menu templates
# 2mar10 remove restarting freememapplet
# 10mar10 menu and tray translation
# 13jul10 PuppyPin, menu and tray translation
# 22aug10 gtkdialog-splash
# 29aug10 gettext'ed puppy-desktop, icewm, restart pup_event_frontend_d, gtkdialog3 instead of gtkdialog-splash
# 2sep10 icewm with non-UTF-8 locales
# 31dec10: sync after modifying, kill ROX-Filer and restart, fix restart jwm

# avoid multiple run
PSRESULT=$(ps)
[ $(echo "$PSRESULT"|grep "sh[ ][ ]*$0" | wc -l) -gt 1 ] && exit
MYNAME=$(basename $0)

CURRENTWM="`cat /etc/windowmanager`"
OLDLOCALE=""
F="$HOME/.${CURRENTWM}/${CURRENTWM}_locale"
[ -f "$F" ] && OLDLOCALE=$(cat "$F" 2>/dev/null)
# myLOCALE=$LANG # is enough as for puppies but in general...
for myLOCALE in C $(echo $LANGUAGE|cut -d':' -f1) $LC_ALL $LANG;do :;done
# always perform when called with other name
[ "$MYNAME" = "fixmenus_on_locale" ] && [ "$myLOCALE" = "$OLDLOCALE" ] && exit

export LANG=$myLOCALE
export TEXTDOMAIN=puppy-desktop
export TEXTDOMAINDIR=/usr/share/locale
export OUTPUT_CHARSET=UTF-8

title=$MYNAME
text=$(gettext "Refreshing desktop. Please wait...")
fontsize="x-large" # small, medium, large, x-large

LANG=C
myLANGS=
# search langs
myLOCALE1=$(echo $myLOCALE|cut -d'.' -f1)		# ex.	ja_JP
myLOCALE2=$(echo $myLOCALE|cut -d'_' -f1)	# ex.	ja
myLANGS="$myLOCALE $myLOCALE1 $myLOCALE2 C en"

# logging
LOGFILE=/tmp/$MYNAME.log
date > $LOGFILE
exec 2>$LOGFILE
log() {
	echo "$(date +'%T.%N') $@" >> $LOGFILE
}
log "$0 starts."
log "PIDX=$(pidof X)"
log "DISPLAY=$DISPLAY"
FREEMEM=$(pidof freememapplet)
XPID=0
if [ "$DISPLAY" != "" ];then
#  if which gtkdialog-splash &>/dev/null ; then
#	  LANG=$myLOCALE gtkdialog-splash -fontsize "large" -icon "gtk-refresh" --placement center -bg yellow -text "$m_02" &
#  else
#	  LANG=$myLOCALE gxmessage -center -wrap -bg yellow -buttons '' -nofocus "$m_02" &
#  fi
  export MAIN_DIALOG="<text><label>$m_02</label></text>"
  DIALOG=""
  for P in gtkdialog3 gtkdialog2; do
	  which $P &>/dev/null && DIALOG=$P && break
  done
  if [ "$DIALOG" = "gtkdialog3" ]; then
    MAIN_DIALOG="<window title=\"${title}\" icon-name=\"gtk-refresh\">
    <text use-markup=\"true\"><label>\"<span size='${fontsize}'>${text}</span>\"</label></text>
</window>"
	$DIALOG -c &
    XPID=$!
  elif [ "$DIALOG" = "gtkdialog2" ]; then
     $DIALOG -p MAIN_DIALOG &
     XPID=$!
  fi
  if [ "$FREEMEM" != "" ] ;then
    killall freememapplet
  fi
  #killall pup_event_frontend_d
  PSRESULT=$(ps)
  ALINE=$(echo "$PSRESULT" | grep '/bin/ash.*/sbin/pup_event_frontend_d')
  PID=$(echo $ALINE|cut -d ' ' -f1)
  [ "$PID" != "" ] && kill $PID
  echo "ICONWIPE" > /tmp/pup_event_icon_change_flag
  /sbin/clean_desk_icons 
fi

if [ -x /usr/bin/scim ] && echo $myLOCALE| grep -qi '.utf'; then
log "scim..."
  F="/etc/gtk-2.0/gtk.immodules"
  if ! grep -q "^.scim.*/usr/share/locale.*$myLOCALE2" $F; then
    grep -v 'scim' $F > /tmp/gtk.immodules
    echo '"/usr/lib/gtk-2.0/immodules/im-scim.so"'>> /tmp/gtk.immodules
    echo '"scim" "SCIM Input Method" "scim" "/usr/share/locale" "ja:ko:zh:en:'$myLOCALE2'"' >> /tmp/gtk.immodules
    [ -s /tmp/gtk.immodules ] && mv /tmp/gtk.immodules $F
  fi
fi

#log "PuppyBrowser..."
FROOT=$HOME/.PuppyBrowser/mozilla/prefs.js
for E in $myLANGS; do
  [ -f ${FROOT}.$E ] && break
done
#[ -f ${FROOT}.$E ] && ln -sf ${FROOT}.$E ${FROOT}
[ -f ${FROOT}.$E ] && rm -f ${FROOT} && cp ${FROOT}.$E ${FROOT} && log "PuppyBrowser..."

#log "mozilla..."
which mozilla_on_locale >/dev/null && echo -n "$myLOCALE" > /tmp/mozilla_new_locale
MOZILLAHOME=/usr/share/doc/home.htm
H=""
for D in $myLANGS; do
  F="/usr/share/doc/help/$D/home.htm"
	[ -s "$F" ] && H="$F" && break
done
if [ "$H" = "" ]; then
  for E in $myLANGS; do
    F=/usr/share/doc/home_$E.htm
	[ -s "$F" ] && H="$F" && break
  done
fi
[ -s "$H" ] && rm -f "$MOZILLAHOME" && cp "$H" "$MOZILLAHOME" && log "mozilla home..."

#log "apps..."
#APPSDIR="/usr/local/apps"
#for A in $(ls -1 "$APPSDIR" 2>/dev/null) "Trash/template"
#do
#  TARGET="$APPSDIR/$A/AppInfo.xml"
#  TRANS="$TARGET.nls"
#  if [ -s "$TARGET" -a -s "$TRANS" ]; then
#    TMPFILE="/tmp/$(basename $0)_${A}_AppInfo.xml"
#    rm -f "$TMPFILE"
#    (
#     while read ALINE; do
#      KEYWORD=""
#      if echo "$ALINE"| grep -q '^[^!]*<Item[ ][ ]*label=';then 
#        KEYWORD=$(echo "$ALINE"| sed -e 's/^.*option=/option=/' -e 's/["]/\\\"/g')
#      elif echo "$ALINE"| grep -q '^[^!]*<Summary>';then
#        KEYWORD='<Summary>'
#      fi
#      if [ "$KEYWORD" != ""  ]; then
#      log "${A} KEYWORD=$KEYWORD"
#       SLINE=$(grep "$KEYWORD" "$TRANS"| head -n 1| sed -e 's/["]/\\\"/g')
#       [ "$SLINE" != "" ] && LANG=$myLOCALE eval echo \"$SLINE\" || echo "$ALINE"
#      else
#        echo "$ALINE"
#      fi
#     done
#    ) < "$TARGET" > "$TMPFILE"
#  [ -s "$TMPFILE" ] && rm -f "$TARGET" && mv -f "$TMPFILE" "$TARGET"
#  rm -f "$TMPFILE"
#  fi
#done

log "PuppyPin..."
TARGET="$HOME/Choices/ROX-Filer/PuppyPin"
TRANS="$TARGET.nls"
if [ -s "$TARGET" -a -s "$TRANS" ]; then
  TMPFILE="/tmp/$(basename $0)_PuppyPin"
  rm -f "$TMPFILE"
  (
   while read ALINE;do
    KEYWORD=$(echo $ALINE|grep -F '<icon '| grep -Fv '$HOME/.pup_event/drive'|sed -e 's/<[^<>]*>//g'| tr -d ' ')
    if [ "$KEYWORD" != "" ]; then
      SLINE=$(grep -F "$KEYWORD" "$TRANS"| head -n 1)
      if [ "$SLINE" != "" ]; then
        HEAD=$(echo "$ALINE"| sed -e 's/label=.*$//')
        TAIL=$(echo "$SLINE"| sed -e 's/^.*label=/label=/'| sed -e 's/["]/\\\"/g')
        echo -n "$HEAD"
        export LANG=$myLOCALE 
        eval echo \"$TAIL\"
      else
        echo "$ALINE"
      fi
    else
      echo "$ALINE"
    fi
   done
  ) < "$TARGET" > "$TMPFILE"
  [ -s "$TMPFILE" ] && rm -f "$TRAY" && mv -f "$TMPFILE" "$TARGET"
  rm -f "$TMPFILE"
fi

#export LANG=$myLOCALE 
log "menu templates..."
D="/etc/xdg/templates"
S="/etc/xdg/templates.locale"
#for ONETPL in $(ls -1 $D| grep -v 'README'); do
case "$CURRENTWM" in
jwm)
#jwm menu
 ONETPL="_root_.jwmrc"
 TARGET="$D/$ONETPL"
 TRANS="$S/$ONETPL.nls"
 if [ -s "$TARGET" -a -s"$TRANS" ]; then
  log $ONETPL
  TMPFILE="/tmp/$(basename $0)$ONETPL"
  rm -f "$TMPFILE"
 (
    while read ALINE;do
      KEYWORD=""
      if echo $ALINE| grep -q '^[^!]*<Program[ ]*label='; then
        KEYWORD=$(echo $ALINE|sed -e 's/^[^>]*>[ ]*//' -e 's/[ ]*<[^<]*$//')
		case "$KEYWORD" in
		*defaulthtmlviewer*|*defaultbrowser*)
			KEYWORD2=$(echo $KEYWORD| sed -e 's/^.*default//'| tr -s ' '| cut -d' ' -f2)
			[ "$KEYWORD2" != "" ] && KEYWORD="$KEYWORD2"
			;;
		exec*)
			KEYWORD=$(basename "$(echo $KEYWORD| tr -s ' '| cut -d' ' -f2)")
			;;
		esac
      elif echo $ALINE| grep -q '^[^!]*<Menu[ ]*label='; then
        KEYWORD=$(echo $ALINE|sed -e 's/^.*icon=.//' -e 's/\".*$//')
        KEYWORD="<Menu.*$KEYWORD"
      elif echo $ALINE| grep -q '^[^!]*<Restart[ ]*label='; then
        KEYWORD="<Restart"
      fi
      KEYWORD=$(echo "$KEYWORD"| tr -d ' ')
      if [ "$KEYWORD"  != "" ]; then
        log "KEYWORD='$KEYWORD'"
        SLINE=$(grep "$KEYWORD" "$TRANS"| head -n 1| sed -e 's/["]/\\\"/g')
        #log "$SLINE"
		[ "$SLINE" != "" ] && LANG=$myLOCALE eval echo \"$SLINE\" || echo "$ALINE"
      else
        echo "$ALINE"
      fi
    done
  ) < "$TARGET" > "$TMPFILE"
  [ -s "$TMPFILE" ] && rm -f "$TARGET" && mv -f "$TMPFILE" "$TARGET"
  rm -f "$TMPFILE"
 fi
 TARGET="$HOME/.jwmrc-tray"
 TRANS="$TARGET.nls"
 if [ -s "$TARGET" -a -s "$TRANS" ]; then
  log "jwm tray..."
  TMPFILE="/tmp/$(basename $0)_jwmrc-tray"
   rm -f "$TMPFILE"
   (
    while read ALINE;do
      KEYWORD=""
      if echo "$ALINE"| grep -q '^[^!]*<TrayButton';then 
        KEYWORD=$(echo "$ALINE"| sed -e 's,^[^/]*>,,' -e 's,<.*$,,')
      fi
      if [ "$KEYWORD" != ""  ]; then
       SLINE=$(grep "$KEYWORD" "$TRANS"| head -n 1| sed -e 's/["]/\\\"/g')
       [ "$SLINE" != "" ] && LANG=$myLOCALE eval echo \"$SLINE\" || echo "$ALINE"
      else
        echo "$ALINE"
      fi
    done
  ) < "$TARGET" > "$TMPFILE"
  [ -s "$TMPFILE" ] && rm -f "$TRAY" && mv -f "$TMPFILE" "$TARGET"
  rm -f "$TMPFILE"
 fi
 echo -n $myLOCALE > "$HOME/.jwm/jwm_locale"
 ;;
icewm)
#icewm menu
 OUTPUT_CHARSET=
 D=/etc/xdg/templates
 S=/etc/xdg/templates.locale
 ONETPL="_root_.icewm_menu"
 #TARGET="$D/$ONETPL"
 TRANS=""
 for TARGET in "$D/$ONETPL" "$HOME/.icewm/toolbar";do
 [ "$TRANS" = "" ] && TRANS="$S/$ONETPL.nls" || TRANS="$TARGET.nls"
 if [ -s "$TARGET" -a -s "$TRANS" ]; then
  log "$TARGET"
  TMPFILE="/tmp/$(basename $0)_$(basename "$TARGET")"
  #rm -f "$TMPFILE"
 (
    while read ALINE;do
      KEYWORD=""
      if echo $ALINE| grep -qE '^[^#]*(menu|prog|restart)'; then
		  K=$(echo $ALINE| tr -d '{'|rev)
          KEYWORD=$(echo $K|cut -d' ' -f1|rev)
          # prog "Rxvt Black Terminal" xterm rxvt -rv +sb -sl 999
          echo "$KEYWORD" | grep -qx '[0-9][0-9]*' && KEYWORD=$(echo $K|cut -d' ' -f3|rev)
      fi
      if [ "$KEYWORD"  != "" ]; then
        log "KEYWORD='$KEYWORD'"
        SLINE=$(grep "$KEYWORD" "$TRANS"| head -n 1| sed -e 's/["]/\\\"/g')
		[ "$SLINE" != "" ] && LANG=$myLOCALE eval echo \"$SLINE\" || echo "$ALINE"
      else
        echo "$ALINE"
      fi
    done
  ) < "$TARGET" > "$TMPFILE"
  [ -s "$TMPFILE" ] && rm -f "$TARGET" && mv -f "$TMPFILE" "$TARGET"
  rm -f "$TMPFILE"
 fi
 done
 echo -n $myLOCALE > "$HOME/.icewm/icewm_locale"
 ;;
esac
#done

log "fixmenus..."
export LANG=$myLOCALE
fixmenus
/sbin/clean_desk_icons
sync	# 31dec10

# 31dec10: kill ROX-Filer and restart
PIDS=$(pidof ROX-Filer)
if [ "$PIDS" != "" ]; then
  for PID in $PIDS; do
    kill $PID
  done
  rox -p "$HOME/Choices/ROX-Filer/PuppyPin"
fi
#echo -n $myLOCALE > "$HOME/.jwm/jwm_locale"
pidof jwm &>/dev/null && jwm -restart && log "JWM restarted."

if ! pidof pup_event_frontend_d &>/dev/null ;then
  #sleep 2
  pup_event_frontend_d &
  #sleep 4
fi
#if [ "$FREEMEM" != "" ] ;then
#  pidof freememapplet &>/dev/null || freememapplet &
#fi
#sleep 2
[ $XPID -ne 0 ] && kill $XPID