#!/bin/sh
#========

echo ooo
echo XDG-2-IceWM menu converter v0.04 for SliTaz
date +%G%b%d%a.%P%H:%M:%S
uname -srm

# makes freedesktop apps visible to IceWM
#
# (1) builds folder of symlinks to xdg icons on /tmp
#     for persistence copy to /usr/share
#     & symlink from /tmp in .xinitrc
# (2) generates IceWM submenu & copies to .icewm
#     reference via line in .icewm/menu:
#     menufile xdg folder xiwmenu_xdg

# init the control directory
FIX=/tmp/xdgicewm
rm -rf ${FIX}
mkdir ${FIX} >/dev/null

# init the output menu file
mkdir ${FIX}/menu
ICE=${FIX}/menu/xiwmenu_xdg
rm -rf ${ICE}
touch ${ICE}
{
echo "#"
echo "# IceWM menuing generated by ${0##*/} (gpl)"
echo "# 2012 Screaming CuckooBroad Associates"
echo "#"
} >>${ICE}

# symlinks for categories
echo ; echo "symlinking icons (cats) ..."
for ICO in \
  applications-development \
  applications-games \
  applications-graphics \
  applications-internet \
  applications-multimedia \
  applications-office \
  applications-system \
  applications-accessories
do
  echo -n ${ICO}" "
  ln -sf /usr/share/icons/SliTaz/categories/22/${ICO}.png ${FIX}/${ICO}.png
done
echo

# symlinks to physical xdg icons
echo ; echo "symlinking icons (apps) ..."
cd /usr/share/applications
for ICO in $(cat * | grep "Icon=" | sed "s_Icon=__g" | sed "s_.png__g")
do
  echo -n ${ICO}" "
  for DIR in \
    /usr/share/icons/SliTaz/mimetypes/32 \
    /usr/share/icons/SliTaz/devices/22 \
    /usr/share/icons/SliTaz/apps/22 \
    /usr/share/icons/SliTaz/categories/22 \
    /usr/share/icons/SliTaz/devices/22 \
    /usr/share/icons/SliTaz/actions/22 \
    /usr/share/icons/SliTaz/places/32 \
    /usr/share/icons/hicolor/32x32/apps \
    /usr/share/pixmaps
  do
    if [ -f ${DIR}/${ICO}.png ]
    then
      ln -sf ${DIR}/${ICO}.png ${FIX}/${ICO}.png
    fi
  done
done
echo

# alias unresolved iconnames (mountbox & Xdefaults)
ln -sf /usr/share/icons/SliTaz/devices/22/multimedia-player-ipod-green.png ${FIX}/media-flash.png
ln -sf /usr/share/icewm/icons/app_16x16.xpm ${FIX}/preferences-system-session.png
# alias xpm icons (mhwaveedit)
ln -sf /usr/share/pixmaps/mhwaveedit.xpm ${FIX}/mhwaveedit.png

# menugen: loop thru freedesktop categories (order as per renaming below)
echo ; echo generating category menus ...
for CAT in Development Documentation Game Graphics Network AudioVideo Office Settings System Utility
do

# init each cat directory
  echo -n ${CAT}" "
  rm -rf ${FIX}/${CAT}
  mkdir ${FIX}/${CAT} >/dev/null
  cd /usr/share/applications

# find & copy relevant files
  for DTOP in $(ls -1 *.desktop)
  do
    if cat ${DTOP} | grep -q ${CAT}\;
    then
      cp ${DTOP} ${FIX}/${CAT}/      
    fi    
  done

# *.desktops missing semicolon after cat
  case "${CAT}" in
    "Graphics" ) cp viewnior.desktop ${FIX}/${CAT}/ ;;
    "System"   ) cp hardinfo.desktop ${FIX}/${CAT}/ ;;
             * ) ;;
  esac

# taz friendly menu renames
  cd ${FIX}/${CAT}
  REN=${CAT}
  [ "${CAT}" == "Game"       ] && REN=Games
  [ "${CAT}" == "Network"    ] && REN=Internet
  [ "${CAT}" == "AudioVideo" ] && REN=Multimedia
  [ "${CAT}" == "Settings"   ] && REN=Preferences

# from /usr/share/desktop-directories
  case "${CAT}" in
    "Development"   ) ICO=applications-development ;;
    "Documentation" ) ICO=text-x-generic           ;;
    "Game"          ) ICO=applications-games       ;;
    "Graphics"      ) ICO=applications-graphics    ;;
    "Network"       ) ICO=applications-internet    ;;
    "AudioVideo"    ) ICO=applications-multimedia  ;;
    "Office"        ) ICO=applications-office      ;;
    "Settings"      ) ICO=preferences-desktop      ;;
    "System"        ) ICO=applications-system      ;;
    "Utility"       ) ICO=applications-accessories ;;
                  * ) ICO=preferences-desktop      ;;
  esac

# init the submenu header
  echo menu "${REN}" ${FIX}/${ICO}.png { >>${ICE}

# clean up apps which wound up in 2 submenus
  [ "${CAT}" == "Utility" ] && rm -rf lxtask.desktop pcmanfm.desktop

# format menu entries from *.desktop files
  for DTP in $(ls -1 *.desktop)
  do

# prefilter: conflicting tags 
# remove double icon (lxrandr)
    {
      cat ${DTP} \
      | grep -iv "Icon=video-display" \
      | grep -iv "X-GNOME-WMName=" \
      | grep -iv "GenericName=" \
      | grep -iv "TryExec="
    } >/tmp/grepwork1

# search for these
    {
      cat /tmp/grepwork1 | grep -i "Name="
      cat /tmp/grepwork1 | grep -i "Icon="
      cat /tmp/grepwork1 | grep -i "Exec="
    } >/tmp/grepwork2

# format the menuline: prog "Name" Icon Exec [parms]
# remove freedesktop field codes %f %F %u %U:
# http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
# remove spurious .png in icon specs
# remove 2 linefeeds
    {
      cat /tmp/grepwork2 \
      | sed "s_.png__g" \
      | sed "s_%f__g" \
      | sed "s_%F__g" \
      | sed "s_%u__g" \
      | sed "s_%U__g" \
      | sed "s_Name=_prog \"_g" \
      | sed "s_Icon=_\" ${FIX}/_g" \
      | sed "s_Exec=_.png _g" \
      | sed "{N;s_\n__g;N;s_\n__g;}"
    } >>${ICE}
    rm -rf /tmp/grepwork*
  done
  echo } >>${ICE}
done
echo
cp -p ${ICE} ~/.icewm/

exit 0