#!/bin/sh
set -eu
mkdir -p static/preview static/thumbnail
resize() {
local photo=$1 size=$2 output=$3
if ! test -f $output; then
# FIXME: convert complains about not understanding XML
echo $output >&2
convert $photo -auto-orient -thumbnail $size $output 2>/dev/null ||:
fi
}
preview() {
local photo=$1
local preview=preview/${photo##*/}
resize $photo 25% static/$preview
echo $preview
}
thumbnail() {
local photo=$1
local thumbnail=thumbnail/${photo##*/}
resize $photo 5% static/$thumbnail
echo $thumbnail
}
encode() {
sed '
s/&/\&/g
s/\</g
s/"/\"/g
' "$@"
}
page_title() {
date -j -f '%F' $1 '+%B %e, %Y'
}
page_head() {
local date=$1
local title=$(page_title $date)
cat <<-EOF
${title}
${title}
EOF
}
photo_info() {
local photo=$1
ExposureTime=
FNumber=
FocalLength=
PhotographicSensitivity=
eval $(
identify -format '%[EXIF:*]' $photo 2>/dev/null |
grep -E 'ExposureTime|FNumber|FocalLength|PhotographicSensitivity' |
sed 's/^exif://'
)
}
photo_id() {
local photo=$1
photo=${photo##*/}
photo=${photo%%.*}
echo $photo
}
page_photo() {
local photo=$1 preview=$2 description=$3
if ! test -f $description; then
description=/dev/null
fi
photo_info $photo
cat <<-EOF
EOF
}
index_head() {
cat <<-EOF
Photos
EOF
}
index_page() {
local date=$1 root=${2:-}
cat <<-EOF
EOF
}
index_photo() {
local date=$1 photo=$2 thumbnail=$3 root=${4:-}
cat <<-EOF
EOF
}
Root=https://photo.causal.agency
atom_head() {
local updated=$(date -u '+%FT%TZ')
cat <<-EOF
Photos
junejune@causal.agency
${Root}/
${updated}
EOF
}
atom_entry_head() {
local date=$1
local updated=$(
date -ju -f '%s' $(stat -f '%m' static/${date}/index.html) '+%FT%TZ'
)
cat <<-EOF
$(page_title $date)
${Root}/${date}/
${updated}
EOF
}
atom_entry_tail() {
cat <<-EOF
EOF
}
atom_tail() {
cat <<-EOF
EOF
}
set --
for date in 20*; do
mkdir -p static/${date}
page=static/${date}/index.html
if ! test -f $page; then
echo $page >&2
page_head $date >$page
for photo in ${date}/*.JPG; do
preview=$(preview $photo)
if ! test -f static/${photo}; then
ln $photo static/${photo}
fi
page_photo $photo $preview ${photo%.JPG}.txt >>$page
done
fi
set -- $date "$@"
done
echo static/index.html >&2
index_head >static/index.html
echo static/feed.atom >&2
atom_head >static/feed.atom
for date; do
index_page $date >>static/index.html
atom_entry_head $date >>static/feed.atom
index_page $date $Root | encode >>static/feed.atom
for photo in ${date}/*.JPG; do
thumbnail=$(thumbnail $photo)
index_photo $date $photo $thumbnail >>static/index.html
index_photo $date $photo $thumbnail $Root | encode >>static/feed.atom
done
atom_entry_tail >>static/feed.atom
done
atom_tail >>static/feed.atom