#!/bin/bash
shopt -s globstar
shopt -s extglob

# This script requires GNU parallel, dcraw, exiftool, and jpeg-recompress
# Usage:
#   $ cd path/to/photos
#   $ jpeg-archive
# Compressed JPEGs are now in ./Comp/*

if [[ $1 == '--help' ]]; then
    echo 'JPEG-Archive - Compress RAW and JPEG images in the current folder'
    echo 'Usage: jpeg-archive [options]'
    echo ''
    echo 'Possible compression options:'
    echo "`jpeg-recompress --help | tail -n+6`"
    exit 255
fi

if [[ $1 == '--version' ]]; then
    jpeg-recompress --version
    exit 255
fi

set -e

# Common parallel arguments
PARALLEL_ARGS=(
    '--profile /usr/share/jpeg-archive/parallel.config'
    --no-notice
)

# Cleanup old files
rm -rf Comp
rm -rf /tmp/comp

echo 'Converting RAW files...'
parallel ${PARALLEL_ARGS[@]} "mkdir -p /tmp/comp/RELDIR; dcraw -w -q 3 -c RELPATH | jpeg-recompress ${@:--q high} --ppm - /tmp/comp/RELDIR/BASENAME.jpg" ::: **/*.+(cr2|nef|dng)

echo 'Copying EXIF data...'
parallel ${PARALLEL_ARGS[@]} 'exiftool -overwrite_original -TagsFromFile RELPATH -all:all /tmp/comp/RELDIR/BASENAME.jpg' ::: **/*.+(cr2|nef|dng)

echo 'Recompressing JPEG files'
parallel ${PARALLEL_ARGS[@]} "mkdir -p /tmp/comp/RELDIR; jpeg-recompress ${@:--q high} RELPATH /tmp/comp/RELPATH" ::: **/*.jpg

mv /tmp/comp Comp

echo 'Done! Compressed files are in the Comp folder.'
