#!/bin/sh

# download_cam.sh
# 2019-10-26
# by Gernot Walzl

# download_cam.desktop
#
# [Desktop Entry]
# Name=download_cam
# Comment=Gets all photos from a camera
# Exec=download_cam
# Icon=camera-photo
# Terminal=true
# Type=Application
# Categories=Graphics;Photography;

DESTDIR=${DESTDIR:-$HOME/Pictures}
GPHOTO2=${GPHOTO2:-/usr/bin/gphoto2}

get_camname () {
  LANG=C $GPHOTO2 --summary 2> /dev/null \
    | sed -n '/Model:/ s/Model: // p'
}

wait_for_camera () {
  CAMNAME="$(get_camname)"
  if [ -z "$CAMNAME" ]; then
    for CNT in $(seq 9 -1 0); do
      echo -en "\rWaiting for camera ... $CNT"
      sleep 1
      CAMNAME="$(get_camname)"
    done
    echo ""
  fi
  if [ -z "$CAMNAME" ]; then
    echo "No camera detected."
    sleep 1
  else
    echo "Model: $CAMNAME"
  fi
}

download () {
  local CAMNAME="$1"
  if [ -z "$CAMNAME" ]; then
    return 1
  fi
  local CAMDIR=$(echo "$CAMNAME" | sed 's/ /_/g')
  local CURRDIR=$(pwd)
  echo ""
  echo "Downloading all files from $CAMNAME to ${DESTDIR}/${CAMDIR}:"
  mkdir -p "${DESTDIR}/${CAMDIR}"
  cd "${DESTDIR}/${CAMDIR}"
  $GPHOTO2 --get-all-files --force-overwrite
  cd "$CURRDIR"
}

order_by_date () {
  local CAMNAME="$1"
  if [ -z "$CAMNAME" ]; then
    return 1
  fi
  local CAMDIR=$(echo "$CAMNAME" | sed 's/ /_/g')
  local CURRDIR=$(pwd)
  echo ""
  echo "Ordering files by date:"
  if [ -d "${DESTDIR}/${CAMDIR}" ]; then
    cd "${DESTDIR}/${CAMDIR}"
  else
    return 1
  fi
  ls . | while read FILE; do
    if [ -f "$FILE" ]; then
      DATE=$(stat -c %y "$FILE" | cut -d' ' -f1)
      mkdir -p "$DATE"
      mv -v "$FILE" "$DATE"
    fi
  done
  cd "$CURRDIR"
}

wait_for_camera
if [ ! -z "$CAMNAME" ]; then
  download "$CAMNAME"
  order_by_date "$CAMNAME"
fi