#!/usr/local/bin/bash
#
# Get converted images back from DxO directory, shared with Oly.
# This currently doesn't check that they belong here.
#
# $Id: fromdxo,v 1.47 2024/11/20 04:32:52 grog Exp grog $
# Number of concurrent processes
# Usage:
#
# $0 [-E] [-f] [-y]
#    -E: Copy EXIF
#    -f: Copy even if destination file exists
#    -a: Don't update author
#    -s: Set GPS system name
#    -g: Set GPS geotags
#
if [ "$BY" = "" ]; then		# could be an environment variable
  BY=5
fi
if [ "$1" = "-a" ]; then        # don't update author tags
    shift
    NEEDAUTHOR=
else
    NEEDAUTHOR=yes		# default
fi
if [ "$1" = "-f" ]; then        # force replace
  FORCE=1
  shift
else
  FORCE=0
fi
if [ "$1" = "-n" ]; then        # force replace
  ECHO=echo
  shift
fi
if [ "$1" = "-s" ]; then        # specify GPS system
    shift
    SYSTEM=$1
    shift
else
    SYSTEM=hirse
fi
if [ "$1" = "-g" ]; then        # GPS tag
    GPSLOG=orig/$SYSTEM.gpslog
    if [ "$GPSDIR" = "" ]; then
	GPSDIR=http://$SYSTEM.lemis.com:1234/storage/sdcard0/Android/data/com.mendhak.gpslogger/files/
    fi
    if [ ! -f $GPSLOG ]; then	# no GPS log, try to get it
      LOGFILE=`pwd`
      LOGFILE=$GPSDIR/`basename $LOGFILE.gpx` # conveniently the same name as this directory
# echo > /dev/tty      fetch $LOGFILE -o $GPSLOG
      fetch $LOGFILE -o $GPSLOG
      if [ $? -ne 0 ]; then
	  echo > /dev/tty Can\'t fetch GPS log $LOGFILE
          exit 1
      fi
  fi
  shift
fi
ME=`whoami`
if [ "$OLY" = "" ]; then
  if [ "$ME" = "grog" ]; then
    OLY=/Photos/2-grog;
    ME="Greg Lehey"
  elif [ "$ME" = "yvonne" ]; then
       OLY=/Photos/3-yvonne;
  ME="Yvonne Lehey"
  else
    OLY=/Photos/00-`whoami`
  fi
fi
IMAGECOUNT=0
# All converted files, which end in _DxO.jpg
for JPG in `ls $OLY/*DxO*jpg`; do
  COMMANDS=
  BASENAME=`basename ${JPG/_DxO*/}`
  DST=orig/`basename $JPG`
#    echo XXX $BASENAME $JPG $DST
  if [ $FORCE -eq 1 -o ! -f $DST ]; then
    IMAGECOUNT=`expr $IMAGECOUNT + 1`
# echo > /dev/tty images: $IMAGECOUNT
    if [ -f $DST ]; then	# save an old copy
      mkdir -p orig/old
      $ECHO mv $DST orig/old
    fi
    # XXX generalize this
#    echo > /dev/tty XXX Looking for $OLY/$BASENAME.ORF.dop
    if [ -e "$OLY/$BASENAME.ORF.dop" ]; then
      $ECHO cp -p $OLY/$BASENAME.ORF.dop orig
    fi
    if [ -e "$OLY/$BASENAME.JPG.dop" ]; then
      $ECHO cp -p $OLY/$BASENAME.JPG.dop orig
    fi
    if [ -e "$OLY/$BASENAME.jpg.dop" ]; then
      $ECHO cp -p $OLY/$BASENAME.jpg.dop orig
    fi
    if [ "$NEEDAUTHOR" != "" ]; then
	# Decide who the author was
	AUTHOR=
	AUTHORS=orig/Authors
	if [ -e $AUTHORS ]; then
	    AUTHOR=`grep $BASENAME $GPSLOG | sed 's:$BASENAME *::'` # extract author for this image
	fi
	if [ "$AUTHOR" = "" ]; then # none specified
	    AUTHOR=$ME
	fi
    fi
    for format in ORF NEF CR2; do
      RAW=orig/$BASENAME.$format
      if [ -f $RAW ]; then
	break
      fi
    done

    if [ "$NEEDAUTHOR" != "" ]; then
	if [ -e $RAW ]; then
	  if [ "${BASENAME:0:1}" = "X" ]; then
	    #      COMMANDS="$COMMANDS exiftool -overwrite_original_in_place -model="OM-1MarkII" $DST;"
	    # XXX try this
	    COMMANDS="$COMMANDS exiftool all= $RAW; exiftool -overwrite_original_in_place -TagsFromFile $RAW '-all>all' $JPG"

	    echo > /dev/tty XXX $COMMANDS
	  else
	    COMMANDS="$COMMANDS exiftool -o $DST -TagsFromFile $RAW '-all>all' -title=$BASENAME -artist=\"$AUTHOR\" -author=\"$AUTHOR\" -copyright=\"$AUTHOR\" -Orientation= $JPG; "
	    echo > /dev/tty XXX $COMMANDS
	  fi
	else
	    COMMANDS="$COMMANDS exiftool -o $DST -title=$BASENAME -artist=\"$AUTHOR\" -author=\"$AUTHOR\" -copyright=\"$AUTHOR\" -Orientation= $JPG;"
	fi
    else			# no author stuff
	if [ -e $RAW ]; then
	    COMMANDS="exiftool -o $DST -TagsFromFile $RAW '-all>all' -title=$BASENAME -Orientation= $JPG; "
	else
	    COMMANDS="$COMMANDS exiftool -o $DST -title=$BASENAME -Orientation= $JPG;"
	fi
    fi
    if [ "$GPSLOG" != "" ]; then
	# GPS tag the image
	COMMANDS="$COMMANDS exiftool -geotag=$GPSLOG $DST;"
	REMOVES="$REMOVES ${DST}_original"
#	echo > /dev/tty XXX "$REMOVES ${DST}_original"
#	echo >/dev/tty removes: "$REMOVES"  # XXX
    fi
    # set modification timestamp
    COMMANDS="$COMMANDS exiftime $DST"
    echo $COMMANDS
    rm -f $EMBED
  echo > /dev/tty Processed $IMAGECOUNT images
  if [ $IMAGECOUNT -eq 0 ]; then
    echo > /dev/tty [31m[5mWarning: no images retrieved[47m[25m
  fi
  fi
# For debugging:
# done; exit
done | by $BY
# TIFF files.  XXX Here be dragons.
for TIF in `ls $OLY/*DxO*.tif`; do
    COMMANDS=
# XXX    TIF=${i/_DxO/}
    BASENAME=`basename $TIF _DxO.tif`
    for format in ORF NEF; do
	RAW=${TIF/tif/$format}
	if [ -f $RAW ]; then
	    break
	fi
    done
    DST=orig/`basename $TIF`
    if [ $FORCE -eq 1 -o ! -f $DST ]; then
    IMAGECOUNT=`expr $IMAGECOUNT + 1`
# Don't copy EXIF for the moment.  It takes forever.
#    if [ "$COPYEXIF" = "yes" ]; then
#      COMMANDS="if [ -e $RAW ]; then
#         exiftool -overwrite_original_in_place -TagsFromFile $RAW '-all>all' -title=$BASENAME -author=\"$AUTHOR\" -Orientation= $i; fi"
#         exiftool -overwrite_original_in_place -title=$BASENAME -author=\"$AUTHOR\" $i; fi
#    fi
    if [ -e "$OLY/$BASENAME.ORF.dop" ]; then
      ln $OLY/$BASENAME.ORF.dop orig 2>/dev/null
    fi
    # Note the trailing (second) f.
    DST=orig/`basename $TIF`f
#    echo $DST > /dev/tty
#      echo > /dev/tty $TIF $DST
    if [ $FORCE -eq 1 -o ! -e $DST ]; then
      if [ "$COMMANDS" != "" ]; then
 	COMMANDS="$COMMANDS; rm -f $DST; ln $TIF $DST; exiftime $DST"
      else
	COMMANDS="rm -f $DST; ln $TIF $DST; exiftime $DST"
      fi
#      echo > /dev/tty $TIF $DST $COMMANDS
    fi
  fi
  echo > /dev/tty Retrieved $IMAGECOUNT images, last $TIF to $DST
  echo $COMMANDS
done | by $BY
# if [ $IMAGECOUNT -eq 0 ]; then
#   echo [31m[5mWarning: no images retrieved[47m[25m
# fi
rm -f DxO
  echo > /dev/tty removing $REMOVES
if [ "$REMOVES" != "" ]; then
  rm $REMOVES
fi
dir=`pwd`
