#!/bin/bash
#                                           von Mirko Dlle <mid@ct.heise.de>
#                                           Dies ist freie Software nach GPL.
#
# bluexchange: Synchronisiert Adressbuch & Co. am Beispiel eines Sony 
#              Ericsson Z800, bertrgt neue Fotos auf die Festplatte und 
#              fllt den Vorrat an MP3-Dateien wieder auf.
#              Die Bluetooth-Adresse des Handys wird in der Umgebungs-
#              variablen BDADDR erwartet, die beim Aufruf durch bluevent
#              automatisch gesetzt ist.
IFS=$'\n'
#
# Anzupassende Variablen:

# Name der OpenSync-Gruppe des Handys
MSYNCGROUP=z800

# Foto-Verzeichnis des Handys und lokal
MPHOTODIR="Memory Stick/DCIM"
LPHOTODIR=${HOME}/z800/bilder

# Maximale Anzahl der MP3-Dateien
MAXFILES=3
# MP3-Verzeichnis des Handys und lokal
MMP3DIR="Memory Stick/MP3"
LMP3DIR=${HOME}/mp3
# Name der Transferliste, in der die Dateinamen der
# bereits bertragenen MP3-Dateien gespeichert werden
TRANSFERS=${HOME}/z800/mp3transfers

# Ab hier sind normalerweise keine Anpassungen mehr ntig.
#

if [ -z "${BDADDR}" ]; then
  echo "Bluetooth-MAC-Address fehlt (Environment, Variable BDADDR)"
fi

# Adressbuch, Terminplaner und Notizen synchronisieren
msynctool --sync ${MSYNCGROUP}

#
#### Neue Fotos auf Festplatte speichern
#
cd ${LPHOTODIR}
for f in $(bls -r ${BDADDR} ${MPHOTODIR} ); do
  if [ ! -e "${f##*/}" ]; then
    # Foto bertragen, ohne es auf dem Handy zu lschen
    obexftp -b ${BDADDR} -g ${f}
  fi
done
cd -

#
#### Musikdateien auffllen
#
IFS=""
# Dateiliste des Handy-Speichers
MMP3LIST=$(bls ${BDADDR} ${MMP3DIR})
# Liste bisher bertragener Dateien einlesen
if [ -r ${TRANSFERS} ]; then
  read -d "" TRANSFERLIST < ${TRANSFERS}
fi
IFS=$'\n'

# Musikdateien zhlen
set -- ${MMP3LIST}
if [ "${#@}" -lt "${MAXFILES}" ]; then
  i=$[${MAXFILES}-${#@}]
  for m in $(ls -1tr ${LMP3DIR}); do
    # Es sind maximal MAXFILES MP3-Dateien erlaubt
    if [ "${i}" -lt "1" ]; then
      break
    fi

    # Prfen, ob die Datei bereits frher bertragen wurde
    # oder noch im Handy-Speicher ist
    if [ "${TRANSFERLIST/*${m}*/ }" != " " -a \
         "${MMP3LIST/*${m}*/ }" != " " ]; then
      STATUS=$(obexftp -b ${BDADDR} -c ${MMP3DIR} -p ${LMP3DIR}/${m} 2>&1)
      if [ "$?" = "0" -a -n "${STATUS/*failed*}" ]; then
        # bertragung erfolgreich, Datei merken und zhlen
	echo ${m} >> ${TRANSFERS}
	i=$[$i-1]
      else
        break
      fi
    fi
  done
fi
