#!/bin/bash
# Skrypt syncdropbox synchronizujący zbiór plików lub wskazany katalog
# z systemem Dropbox. Jego działanie polega na kopiowaniu zadanego
# folderu lub zestawu plików do folderu synchronizacyjnego ~/Dropbox,
# a następnie uruchamianiu w razie potrzeby aplikacji Dropbox.app.

name="syncdropbox"
dropbox="$HOME/Dropbox"
sourcedir=""
targetdir="sync"    # Docelowy folder w systemie Dropbox.

# Sprawdzenie podanych argumentów.

if [ $# -eq 0 ] ; then
  echo "Użycie: $0 [-d folder-źródłowy] {plik, plik, plik}" >&2 ; exit 1
fi 

if [ "$1" = "-d" ] ; then
  sourcedir="$2"
  shift; shift
fi

# Sprawdzenie poprawności argumentów.

if [ ! -z "$sourcedir" -a $# -ne 0 ] ; then
  echo "$name: nie można synchronizować jednocześnie katalogu i plików." >&2 ; exit 1
fi

if [ ! -z "$sourcedir" ] ; then
  if [ ! -d "$sourcedir" ] ; then
    echo "$name: określ nazwę katalogu źródłowego za pomocą argumentu -d." >&2 ; exit 1
  fi
fi

#######################
##### Główna część kodu
#######################

if [ ! -z "$sourcedir" ] ; then
 if [ -f "$dropbox/$sourcedir" -o -d "$dropbox/$sourcedir" ] ; then
    echo "$name: podany katalog źródłowy $sourcedir już istnieje" \
         " w katalogu docelowym $dropbox." >&2 ; exit 1
  fi

  echo "Kopiowanie zawartości katalogu $sourcedir do $dropbox..."
  # Argument -a powoduje rekurencyjne kopiowanie plików
  # z zachowaniem informacji o ich właścicielu itp.
  cp -a "$sourcedir" $dropbox
else
  # Katalog źródłowy nie jest określony, zatem zostały podane pojedyncze pliki.
  if [ ! -d "$dropbox/$targetdir" ] ; then
    mkdir "$dropbox/$targetdir"
    if [ $? -ne 0 ] ; then
      echo "$name: podczas wykonywania polecenia mkdir $dropbox/$targetdir " \
           "wystąpił błąd." >&2 ; exit 1
    fi
  fi
    
  # Gotowe! Kopiujemy podane pliki.
  cp -p -v $@ "$dropbox/$targetdir"
fi

# Teraz ewentualnie uruchamiamy aplikację Dropbox.app,
# aby ostatecznie zsynchronizować pliki.
exec startdropbox -s
