summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-06-05 22:44:11 +0300
committerPaul Buetow <paul@buetow.org>2026-06-05 22:44:11 +0300
commit071bac8bd9c2f78aae1d185545cc141428d98a70 (patch)
tree8da7be668e88f8c21ee1914ae65584b08bb0a57e /src
parent5ab5307714784b766b8e66821dbf498eaadf097c (diff)
Accumulate view redirect manifest during render
Diffstat (limited to 'src')
-rwxr-xr-xsrc/photoalbum.sh66
1 files changed, 32 insertions, 34 deletions
diff --git a/src/photoalbum.sh b/src/photoalbum.sh
index 865fc45..a54616f 100755
--- a/src/photoalbum.sh
+++ b/src/photoalbum.sh
@@ -1152,20 +1152,6 @@ maybe_shuffle() {
fi
}
-last_view_number() {
- local -r page="$1"; shift
- local -r html_dir="$1"; shift
-
- find "$DIST_DIR/$html_dir" \
- -maxdepth 1 \
- -regextype posix-egrep \
- -regex ".*/${page}-[0-9]+\\.html" \
- -printf '%f\n' \
- | sed -n "s/^${page}-\\([0-9][0-9]*\\)\\.html$/\\1/p" \
- | sort -n \
- | tail -n 1
-}
-
album_photo_files() {
local -r photos_dir="$1"; shift
@@ -1466,36 +1452,40 @@ render_photo_view_and_details() {
"$photo"
}
+record_rendered_view_page() {
+ # shellcheck disable=SC2178
+ local -n view_pages_ref="$1"; shift
+ # shellcheck disable=SC2178
+ local -n last_views_ref="$1"; shift
+ local -r page="$1"; shift
+ local -r preview="$1"; shift
+
+ if [ -z "${last_views_ref[$page]+set}" ]; then
+ view_pages_ref+=("$page")
+ fi
+ last_views_ref["$page"]="$preview"
+}
+
render_view_redirects() {
local -r html_dir="$1"; shift
- local -i max_page=0
- local -a prefixes=()
+ # shellcheck disable=SC2178
+ local -n view_pages_ref="$1"; shift
+ # shellcheck disable=SC2178
+ local -n last_views_ref="$1"; shift
local lastview
+ local max_page
local nextredirect
local page
local prevredirect
- local prefix
-
- mapfile -t prefixes < <(
- find "$DIST_DIR/$html_dir" \
- -maxdepth 1 \
- -regextype posix-egrep \
- -regex '.*/[0-9]+-[0-9]+\.html' \
- -printf '%f\n' \
- | cut -d'-' -f1 \
- | sort -n -u
- )
- if (( ${#prefixes[@]} == 0 )); then
+ if (( ${#view_pages_ref[@]} == 0 )); then
return
fi
- max_page=${prefixes[$(( ${#prefixes[@]} - 1 ))]}
-
- for prefix in "${prefixes[@]}"; do
- page="$prefix"
- lastview=$(last_view_number "$page" "$html_dir")
+ max_page=${view_pages_ref[$(( ${#view_pages_ref[@]} - 1 ))]}
+ for page in "${view_pages_ref[@]}"; do
+ lastview=${last_views_ref[$page]}
prevredirect="${page}-0"
nextredirect="${page}-$(( lastview + 1 ))"
@@ -1671,6 +1661,12 @@ render_album_pages() {
# Passed by name to queue_album_view_render_job.
# shellcheck disable=SC2034
local -a render_job_pids=()
+ # Passed by name to record_rendered_view_page and render_view_redirects.
+ # shellcheck disable=SC2034
+ local -A rendered_last_views=()
+ # Passed by name to record_rendered_view_page and render_view_redirects.
+ # shellcheck disable=SC2034
+ local -a rendered_view_pages=()
name=$(album_page_name "$num")
@@ -1712,13 +1708,15 @@ render_album_pages() {
"$photo" \
render_job_pids \
render_failed
+ record_rendered_view_page rendered_view_pages rendered_last_views \
+ "$num" "$i"
done < <(album_photo_files "$photos_dir")
finish_preview_page "$name" "$html_dir" "$backhref" "$tarball_name"
if ! wait_for_album_view_render_jobs render_job_pids render_failed; then
return 1
fi
- render_view_redirects "$html_dir"
+ render_view_redirects "$html_dir" rendered_view_pages rendered_last_views
render_album_index "$photos_dir" "$html_dir" "$blurs_dir" "$backhref"
}