#!/bin/bash
# www.xeron.cc
# Version 6! Now uses source to read variables from settings file instead of
# grepping it out. Also, redid file finding and also fixed indention up a bit.

#========== VARIABLES =================
# Use $HOME or absolute path instead of ~. Seperate paths with spaces.
BG_PATH="$HOME/media/pictures/backgrounds"
EXTS="jpg png bmp gif jpeg"
SCRIPT_PATH="$HOME/misc/scripts/bg"
SETTINGS_FILE="$HOME/.bgconf"
# These are settings for the BG_COMMAND. Set them appropriately.

## bsetbg commands
#BG_COMMAND="bsetbg"
#CENTER="-center"
#TILE="-tile"
#FULL="-full"

## display from image magick commands
#BG_COMMAND="display -window root"
#CENTER="-backdrop"
#TILE=""
#FULL="-geometry 1600x1200"

# GNOME 2 Commands
BG_COMMAND="gconftool-2 -s /desktop/gnome/background/picture_options -t string '' -s /desktop/gnome/background/picture_options -t string"
CENTER="centered -s /desktop/gnome/background/picture_filename -t string"
TILE="wallpaper -s /desktop/gnome/background/picture_filename -t string"
FULL="stretched -s /desktop/gnome/background/picture_filename -t string"
#========== END VARIABLES =============

if [ ! -f "$SETTINGS_FILE" ]; then
  echo -e "mode=\"center\"\nbg=\"\"" > $SETTINGS_FILE
fi

source $SETTINGS_FILE

case $1 in
menu)
  echo "<openbox_pipe_menu>"
  for EXT in $EXTS; do
    find $BG_PATH -iname \*.$EXT|sed s:"&":"&amp;":g|while read ITEM; do
      # Tilde Hack, replace with unlikely string.
      TITEM=`echo "$ITEM"|sed s:\~:NmTiLD3mN:g`
      echo "  <item label=\"`basename "$ITEM"`\">"
      echo "    <action name=\"execute\"><execute>$SCRIPT_PATH apply \"$TITEM\"</execute></action>"
      echo "  </item>"
    done
  done
  echo "  <separator />"
  echo "  <item label=\"center\">"
  echo "    <action name=\"execute\"><execute>$SCRIPT_PATH mode center</execute></action>"
  echo "  </item>"
  echo "  <item label=\"tile\">"
  echo "    <action name=\"execute\"><execute>$SCRIPT_PATH mode tile</execute></action>"
  echo "  </item>"
  echo "  <item label=\"full\">"
  echo "    <action name=\"execute\"><execute>$SCRIPT_PATH mode full</execute></action>"
  echo "  </item>"
  echo "</openbox_pipe_menu>"
;;
apply)
  # decode tilde string and make & work with sed.
  bgvar=`echo "$2"|sed -e s:NmTiLD3mN:\~:g`
  sed -i s:^bg=\".*\"$:bg=\""${bgvar/&/\\&}"\": $SETTINGS_FILE
  $0 load
;;
load)
  case $mode in
  tile) nmode="$TILE" ;;
  full) nmode="$FULL" ;;
  *) nmode="$CENTER" ;;
  esac

  $BG_COMMAND $nmode "$bg"
;;
mode)
  case $2 in
  tile) nmode="tile" ;;
  full) nmode="full" ;;
  *) nmode="center" ;;
  esac

  sed -i s:^mode=\"$mode\"$:mode=\"$nmode\": $SETTINGS_FILE
  $0 load
;;
*)
  echo "Usage: `basename $0` command [parameter]"
  echo "  menu				display openbox menu"
  echo "  load				load saved settings"
  echo "  apply [file]			applies background"
  echo "  mode {center|tile|full}	background position"
;;
esac