#!/bin/sh
# download_cam.sh
# 2024-05-09
# 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}
read_camname () {
LANG=C $GPHOTO2 --summary 2> /dev/null \
| sed -n '/Model:/ s/Model: // p' \
| sed 's#[/ ]#_#g'
}
wait_for_camera () {
local CNT=0
while [ -z "$(read_camname)" ]; do
/bin/echo -ne "\rWaiting for camera ... $CNT"
sleep 1
CNT=$(($CNT + 1))
done
/bin/echo ''
}
download () {
local DESTCAMDIR="$1"
if [ -z "$DESTCAMDIR" ]; then
return 1
fi
mkdir -p "$DESTCAMDIR"
(
cd "$DESTCAMDIR" || return 1
$GPHOTO2 --get-all-files --force-overwrite
)
}
group_by_mdate () {
local DIR="$1"
if [ ! -d "$DIR" ]; then
return 1
fi
find "$DIR" -mindepth 1 -maxdepth 1 -type f \
| while read FILE; do
DATE=$(stat -c %y "$FILE" | cut -d' ' -f1)
mkdir -p "$DIR/$DATE"
mv -v "$FILE" "$DIR/$DATE"
done
}
group_by_exifdate () {
local DIR="$1"
if [ ! -d "$DIR" ]; then
return 1
fi
find "$DIR" -mindepth 1 -maxdepth 1 -type f -iname '*.jpg' \
| while read JPGFILE; do
DATE=$(exiv2 -g Exif.Image.DateTime -Pv "$JPGFILE" | cut -d' ' -f1 | sed 's/:/-/g')
mkdir -p "$DIR/$DATE"
mv -v "$JPGFILE" "$DIR/$DATE"
done
}
case "$1" in
'camname')
read_camname
;;
'download')
download "$2"
;;
'group')
group_by_mdate "$2"
;;
'groupexif')
group_by_exifdate "$2"
;;
*)
wait_for_camera
CAMNAME=$(read_camname)
if [ -n "$CAMNAME" ]; then
download "$DESTDIR/$CAMNAME"
group_by_mdate "$DESTDIR/$CAMNAME"
fi
;;
esac