#!/bin/bash
#                                            von Mirko Dlle <mid@ct.heise.de>
#                                            Dies ist freie Software nach GPL.
#
# bls: Listet den Inhalt eines Verzeichnisses im Handy-Speichers auf.
#      Erwartet als Parameter die Bluetooth-Adresse des Gerts und das
#      Verzeichnis. Verzeichnisse tragen stets einen / am Ende des Namens.
#      Parameter -f zeigt nur Dateien an, -d nur Verzeichnisse, -r zeigt
#      rekursiv alle Dateien unterhalb des angegebenen Verzeichnisses mit
#      ihrem kompletten Pfad an.

function ListBDir
{

  obexftp -b ${baddr} -l "${1}" 2>/dev/null | while read; do
    if [ -z "${REPLY/<folder name=*}" ]; then
      Name=${REPLY#*<folder name=\"}
      Name=${Name%\"*}
      if [ -n "${Recursive}" ]; then
        ListBDir "${1%/}/${Name}"
      elif [ -n "${Directories}" ]; then
        echo "${Name}"
      elif [ -n "${Files}" ]; then
        :
      else
        echo "${Name}/"
      fi
    elif [ -z "${REPLY/<file name=*}" ]; then
      Name=${REPLY#*<file name=\"}
      Name=${Name%\" size=*}
      Size=${REPLY#*<file name=* size=\"}
      Size=${Size%\"*}
      if [ -n "${Recursive}" ]; then
        echo "${1%/}/${Name}"
      elif [ -n "${Directories}" ]; then
        :
      else
        echo "${Name}"
      fi
    fi
  done
}

case "${1}" in
  -r)
    Recursive=1
    shift
    ;;
  -d)
    Directories=1
    shift
    ;;
  -f)
    Files=1
    shift
    ;;
esac

if [ -n "${1/??:??:??:??:??:??}" ]; then
  echo "Aufruf:"
  echo "  $0 [Parameter] [Bluetooth-Adresse] [Verzeichnis]"
  exit 1
fi

baddr=${1}
shift

IFS=$'\n'

for d in "${@}"; do
  ListBDir ${d}
done
