From e6c32dd8d134b0f90a144fd415585c0b12ce0d74 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 11 Jun 2026 18:18:17 +0300 Subject: Rename photoalbum to shuriken --- src/lib/action.source.sh | 14 ++--- src/lib/album.source.sh | 12 ++-- src/lib/bootstrap.source.sh | 14 ++--- src/lib/config.source.sh | 40 ++++++------ src/lib/template.source.sh | 10 +-- src/photoalbum.default.conf | 46 -------------- src/photoalbum.sh | 146 -------------------------------------------- src/shuriken.default.conf | 46 ++++++++++++++ src/shuriken.sh | 146 ++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 237 insertions(+), 237 deletions(-) delete mode 100644 src/photoalbum.default.conf delete mode 100755 src/photoalbum.sh create mode 100644 src/shuriken.default.conf create mode 100755 src/shuriken.sh (limited to 'src') diff --git a/src/lib/action.source.sh b/src/lib/action.source.sh index 01dc245..193aa4b 100644 --- a/src/lib/action.source.sh +++ b/src/lib/action.source.sh @@ -2,16 +2,16 @@ run_simple_action() { case "$action" in --version) if [[ -n "$config_file" || "$has_config_overrides" = 'yes' \ - || "$PHOTOALBUM_FORCE_GENERATE" = yes ]]; then + || "$SHURIKEN_FORCE_GENERATE" = yes ]]; then usage exit 1 fi - printf 'This is Photoalbum Version %s\n' "$VERSION" + printf 'This is Shuriken Version %s\n' "$VERSION" ;; --init) if [[ -n "$config_file" || "$has_config_overrides" = 'yes' \ - || "$PHOTOALBUM_FORCE_GENERATE" = yes ]]; then + || "$SHURIKEN_FORCE_GENERATE" = yes ]]; then usage exit 1 fi @@ -33,8 +33,8 @@ load_configured_action() { apply_config_defaults apply_template_dir_default apply_cli_overrides - PHOTOALBUM_CONFIG_SOURCE="$rc_file" - export PHOTOALBUM_CONFIG_SOURCE + SHURIKEN_CONFIG_SOURCE="$rc_file" + export SHURIKEN_CONFIG_SOURCE } log_configured_action() { @@ -54,13 +54,13 @@ log_configured_action() { log_verbose "Effective splash page setting: ${SPLASH_PAGE:-yes}" log_verbose "Effective tarball setting: ${TARBALL_INCLUDE:-no}" log_verbose "Effective sync delete setting: ${SYNC_DELETE:-yes}" - log_verbose "Effective force generation setting: $PHOTOALBUM_FORCE_GENERATE" + log_verbose "Effective force generation setting: $SHURIKEN_FORCE_GENERATE" } run_configured_action() { local rc_file - if [[ "$PHOTOALBUM_FORCE_GENERATE" = yes && "$action" != --generate ]]; then + if [[ "$SHURIKEN_FORCE_GENERATE" = yes && "$action" != --generate ]]; then usage exit 1 fi diff --git a/src/lib/album.source.sh b/src/lib/album.source.sh index 704db34..29eff6b 100644 --- a/src/lib/album.source.sh +++ b/src/lib/album.source.sh @@ -145,7 +145,7 @@ cached_photo_identify_output() { local cached_signature='' local current_signature - cache_dir="$DIST_DIR/.photoalbum-cache/exif" + cache_dir="$DIST_DIR/.shuriken-cache/exif" cache_file="$cache_dir/$photo.txt" current_signature=$(photo_cache_signature "$photo" "$photo_path") @@ -834,7 +834,7 @@ count_tree_files() { write_generation_metadata() { local -r tarball_file="$1"; shift local -r generated_at=$(current_timestamp_iso) - local -r config_source="${PHOTOALBUM_CONFIG_SOURCE:-}" + local -r config_source="${SHURIKEN_CONFIG_SOURCE:-}" local -r template_name=$(basename "$TEMPLATE_DIR") local -r source_image_count=$(count_incoming_images) local -r generated_photo_count=$(count_files "$DIST_DIR/photos") @@ -844,7 +844,7 @@ write_generation_metadata() { { printf '{\n' printf ' "generator": {\n' - printf ' "name": "photoalbum",\n' + printf ' "name": "shuriken",\n' printf ' "version": %s\n' "$(_json_string "$VERSION")" printf ' },\n' printf ' "generated_at": %s,\n' "$(_json_string "$generated_at")" @@ -879,7 +879,7 @@ write_generation_metadata() { "$(_json_string "${ORIGINAL_BASEPATH:-}")" printf ' }\n' printf '}\n' - } > "$DIST_DIR/photoalbum.json" + } > "$DIST_DIR/shuriken.json" } prepare_generation_photo_assets() { @@ -976,7 +976,7 @@ dry_run() { fi printf 'Dry run: no files will be written.\n' - printf 'Config source: %s\n' "${PHOTOALBUM_CONFIG_SOURCE:-}" + printf 'Config source: %s\n' "${SHURIKEN_CONFIG_SOURCE:-}" printf 'Incoming directory: %s\n' "$INCOMING_DIR" printf 'Output directory: %s\n' "$DIST_DIR" printf 'Template directory: %s\n' "$TEMPLATE_DIR" @@ -1011,7 +1011,7 @@ dry_run() { "$DIST_DIR" "$html_index_count" fi printf ' %s/favicon.ico\n' "$DIST_DIR" - printf ' %s/photoalbum.json\n' "$DIST_DIR" + printf ' %s/shuriken.json\n' "$DIST_DIR" printf ' %s/photos/* (%s image files)\n' "$DIST_DIR" "$image_count" printf ' %s/thumbs/* (%s image files)\n' "$DIST_DIR" "$image_count" printf ' %s/blurs/* (%s image files)\n' "$DIST_DIR" "$image_count" diff --git a/src/lib/bootstrap.source.sh b/src/lib/bootstrap.source.sh index 3e514fc..244cd55 100644 --- a/src/lib/bootstrap.source.sh +++ b/src/lib/bootstrap.source.sh @@ -37,11 +37,11 @@ USAGE } output_is_quiet() { - [ "$PHOTOALBUM_OUTPUT_MODE" = quiet ] + [ "$SHURIKEN_OUTPUT_MODE" = quiet ] } output_is_verbose() { - [ "$PHOTOALBUM_OUTPUT_MODE" = verbose ] + [ "$SHURIKEN_OUTPUT_MODE" = verbose ] } log_info() { @@ -71,7 +71,7 @@ resolve_default_rc_file() { source_root=$(resolve_source_root) if [ -n "$source_root" ]; then - printf '%s\n' "$source_root/src/photoalbum.default.conf" + printf '%s\n' "$source_root/src/shuriken.default.conf" return fi @@ -82,10 +82,10 @@ resolve_source_root() { local script_dir local source_root - script_dir="$PHOTOALBUM_SOURCE_DIR" + script_dir="$SHURIKEN_SOURCE_DIR" source_root=$(cd "$script_dir/.." && pwd) - if [[ -f "$source_root/src/photoalbum.default.conf" \ + if [[ -f "$source_root/src/shuriken.default.conf" \ && -d "$source_root/share/templates/default" ]]; then printf '%s\n' "$source_root" fi @@ -149,7 +149,7 @@ apply_template_dir_default() { } init_config() { - local -r rc_file=photoalbum.conf + local -r rc_file=shuriken.conf local default_rc_file local rewritten_rc_file local source_root @@ -171,7 +171,7 @@ init_config() { source_root=$(resolve_source_root) if [[ -n "$source_root" \ - && "$default_rc_file" = "$source_root/src/photoalbum.default.conf" ]]; then + && "$default_rc_file" = "$source_root/src/shuriken.default.conf" ]]; then source_template_dir="$source_root/share/templates/default" rewritten_rc_file=$(mktemp "${rc_file}.XXXXXX") if ! awk -v template_dir="$source_template_dir" \ diff --git a/src/lib/config.source.sh b/src/lib/config.source.sh index 200bac5..35624b7 100644 --- a/src/lib/config.source.sh +++ b/src/lib/config.source.sh @@ -23,7 +23,7 @@ print_config() { resolve_tar_opts tar_opts resolve_sync_destinations sync_destinations - print_shell_assignment CONFIG_SOURCE "${PHOTOALBUM_CONFIG_SOURCE:-}" + print_shell_assignment CONFIG_SOURCE "${SHURIKEN_CONFIG_SOURCE:-}" print_shell_assignment INCOMING_DIR "$INCOMING_DIR" print_shell_assignment DIST_DIR "$DIST_DIR" print_shell_assignment TEMPLATE_DIR "$TEMPLATE_DIR" @@ -83,7 +83,7 @@ generation_staging_dir() { final_base=$(basename "$final_dist") staging_parent=$(existing_parent_dir "$final_dist") - mktemp -d "$staging_parent/.photoalbum.$final_base.staging.XXXXXX" + mktemp -d "$staging_parent/.shuriken.$final_base.staging.XXXXXX" } prepare_generation_staging_dir() { @@ -91,12 +91,12 @@ prepare_generation_staging_dir() { local -r staging_dir="$1"; shift local cache_dir - if [ "$PHOTOALBUM_FORCE_GENERATE" = yes ]; then + if [ "$SHURIKEN_FORCE_GENERATE" = yes ]; then log_verbose 'Force generation enabled; not reusing existing output cache' return fi - for cache_dir in photos thumbs blurs .photoalbum-cache; do + for cache_dir in photos thumbs blurs .shuriken-cache; do if [ -d "$final_dist/$cache_dir" ]; then if ! mkdir -p "$staging_dir/$cache_dir"; then return 1 @@ -109,9 +109,9 @@ prepare_generation_staging_dir() { } cleanup_generation_staging_dir() { - if [ -n "${PHOTOALBUM_ACTIVE_STAGING_DIR:-}" ]; then - rm -rf "$PHOTOALBUM_ACTIVE_STAGING_DIR" - PHOTOALBUM_ACTIVE_STAGING_DIR='' + if [ -n "${SHURIKEN_ACTIVE_STAGING_DIR:-}" ]; then + rm -rf "$SHURIKEN_ACTIVE_STAGING_DIR" + SHURIKEN_ACTIVE_STAGING_DIR='' fi } @@ -147,7 +147,7 @@ wait_for_process_exit() { } terminate_active_generation() { - local -r pid="${PHOTOALBUM_ACTIVE_GENERATION_PID:-}" + local -r pid="${SHURIKEN_ACTIVE_GENERATION_PID:-}" if [ -z "$pid" ]; then return @@ -158,7 +158,7 @@ terminate_active_generation() { terminate_process_tree KILL "$pid" fi wait "$pid" 2>/dev/null || true - PHOTOALBUM_ACTIVE_GENERATION_PID='' + SHURIKEN_ACTIVE_GENERATION_PID='' } handle_generation_staging_signal() { @@ -198,7 +198,7 @@ replace_dist_with_staging() { if [ -e "$final_dist" ]; then if ! backup_parent=$( - mktemp -d "$staging_parent/.photoalbum.$final_base.backup.XXXXXX" + mktemp -d "$staging_parent/.shuriken.$final_base.backup.XXXXXX" ); then return 1 fi @@ -244,7 +244,7 @@ generate_staged() { staging_dir=$(generation_staging_dir "$final_dist") log_verbose "Effective output directory: $final_dist" log_verbose "Generation staging directory: $staging_dir" - PHOTOALBUM_ACTIVE_STAGING_DIR="$staging_dir" + SHURIKEN_ACTIVE_STAGING_DIR="$staging_dir" trap cleanup_generation_staging_dir EXIT trap 'handle_generation_staging_signal 130' INT trap 'handle_generation_staging_signal 143' TERM @@ -260,14 +260,14 @@ generate_staged() { set +e ( set -e - PHOTOALBUM_FINAL_DIST_DIR="$final_dist" - export PHOTOALBUM_FINAL_DIST_DIR + SHURIKEN_FINAL_DIST_DIR="$final_dist" + export SHURIKEN_FINAL_DIST_DIR DIST_DIR="$staging_dir" generate ) & - PHOTOALBUM_ACTIVE_GENERATION_PID=$! - wait "$PHOTOALBUM_ACTIVE_GENERATION_PID" + SHURIKEN_ACTIVE_GENERATION_PID=$! + wait "$SHURIKEN_ACTIVE_GENERATION_PID" status=$? - PHOTOALBUM_ACTIVE_GENERATION_PID='' + SHURIKEN_ACTIVE_GENERATION_PID='' set -e if (( status != 0 )); then @@ -288,7 +288,7 @@ generate_staged() { return "$status" fi - PHOTOALBUM_ACTIVE_STAGING_DIR='' + SHURIKEN_ACTIVE_STAGING_DIR='' clear_generation_staging_traps } @@ -298,7 +298,7 @@ resolve_config_file() { if [ -n "$config_file" ]; then printf '%s\n' "$config_file" else - printf '%s\n' ./photoalbum.conf + printf '%s\n' ./shuriken.conf fi } @@ -306,7 +306,7 @@ missing_config() { local -r config_file="$1"; shift printf 'Error: Can not find config file %s\n' "$config_file" >&2 - printf 'Run photoalbum --init to create ./photoalbum.conf.\n' >&2 + printf 'Run shuriken --init to create ./shuriken.conf.\n' >&2 exit 1 } @@ -374,7 +374,7 @@ require_config_var() { local -r name="$1"; shift if [ -z "${!name+x}" ] || [ -z "${!name}" ]; then - config_error "$name must be set in photoalbum configuration" + config_error "$name must be set in shuriken configuration" fi } diff --git a/src/lib/template.source.sh b/src/lib/template.source.sh index 87f73b1..1824a3d 100644 --- a/src/lib/template.source.sh +++ b/src/lib/template.source.sh @@ -119,7 +119,7 @@ _json_bool() { _display_path() { local -r path="$1"; shift - local -r final_dist="${PHOTOALBUM_FINAL_DIST_DIR:-}" + local -r final_dist="${SHURIKEN_FINAL_DIST_DIR:-}" if [[ -n "$final_dist" && "$path" == "$DIST_DIR"* ]]; then printf '%s%s\n' "$final_dist" "${path#"$DIST_DIR"}" @@ -139,15 +139,15 @@ current_date_text() { current_date_text_to() { local -n output_ref="$1"; shift - if [ -z "$PHOTOALBUM_CURRENT_DATE_TEXT" ]; then + if [ -z "$SHURIKEN_CURRENT_DATE_TEXT" ]; then if random_seed_is_set; then - PHOTOALBUM_CURRENT_DATE_TEXT='Thu Jan 1 00:00:00 UTC 1970' + SHURIKEN_CURRENT_DATE_TEXT='Thu Jan 1 00:00:00 UTC 1970' else - PHOTOALBUM_CURRENT_DATE_TEXT=$(command date) + SHURIKEN_CURRENT_DATE_TEXT=$(command date) fi fi - output_ref="$PHOTOALBUM_CURRENT_DATE_TEXT" + output_ref="$SHURIKEN_CURRENT_DATE_TEXT" } current_timestamp_slug() { diff --git a/src/photoalbum.default.conf b/src/photoalbum.default.conf deleted file mode 100644 index b6f23a2..0000000 --- a/src/photoalbum.default.conf +++ /dev/null @@ -1,46 +0,0 @@ -# The title of the photoalbum -TITLE='A simple Photoalbum' - -# Thumbnail height geometry -THUMBHEIGHT=300 -# Normal geometry height (when viewing photo). Uncomment, to keep original size. -HEIGHT=1200 -# Max previews per page. -MAXPREVIEWS=40 -# Parallel jobs for image processing and HTML template rendering. -IMAGE_JOBS=3 -# Timeout in seconds for each ImageMagick command. -IMAGEMAGICK_TIMEOUT=60 -# Randomly shuffle all previews. -# SHUFFLE=yes -# Generate a splash landing page at index.html. -SPLASH_PAGE=yes -# Set to any non-empty value for repeatable background, animation, timestamp, -# and shuffled preview choices. -# RANDOM_SEED=album-build-1 - -# Diverse directories, need to be full paths, not relative! -INCOMING_DIR=$(pwd)/incoming -DIST_DIR=$(pwd)/dist -TEMPLATE_DIR=/usr/share/photoalbum/templates/default -#TEMPLATE_DIR=/usr/share/photoalbum/templates/minimal - -# Includes a .tar of the incoming dir in the dist, can be yes or no -TARBALL_INCLUDE=yes -TARBALL_SUFFIX=.tar -# Timeout in seconds for tar archive creation. -TAR_TIMEOUT=120 -TAR_OPTS=(-c) - -# Destinations for `photoalbum --sync`. Each destination is passed to rsync -# with DIST_DIR/ as the source, so the generated contents are copied into the -# target directory. Sync deletes removed files from destinations by default. -SYNC_DELETE=yes -SYNC_DESTINATIONS=( -# admin@fishfinger.buetow.org:/var/www/htdocs/example.org/ -# admin@blowfish.buetow.org:/var/www/htdocs/example.org/ -) - -# Some debugging options -#set -e -#set -x diff --git a/src/photoalbum.sh b/src/photoalbum.sh deleted file mode 100755 index b0d3cee..0000000 --- a/src/photoalbum.sh +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# photoalbum (c) 2011 - 2014, 2022 by Paul Buetow -# https://codeberg.org/snonux/shuriken.sh - -declare -r VERSION='PHOTOALBUMVERSION' -declare -r DEFAULTRC="${PHOTOALBUM_DEFAULT_RC:-/etc/default/photoalbum}" -declare -r PACKAGED_TEMPLATE_DIR='/usr/share/photoalbum/templates/default' -declare -r PACKAGED_ASSET_DIR='/usr/share/photoalbum/assets' -DEFAULT_TEMPLATE_DIR="${PHOTOALBUM_DEFAULT_TEMPLATE_DIR:-$PACKAGED_TEMPLATE_DIR}" -declare -r DEFAULT_TEMPLATE_DIR -DEFAULT_ASSET_DIR="${PHOTOALBUM_DEFAULT_ASSET_DIR:-$PACKAGED_ASSET_DIR}" -declare -r DEFAULT_ASSET_DIR -PHOTOALBUM_OUTPUT_MODE="${PHOTOALBUM_OUTPUT_MODE:-normal}" -PHOTOALBUM_ACTIVE_GENERATION_PID='' -PHOTOALBUM_FORCE_GENERATE="${PHOTOALBUM_FORCE_GENERATE:-no}" -PHOTOALBUM_CURRENT_DATE_TEXT='' - -declare -ra CLI_CONFIG_OVERRIDE_TARGETS=( - INCOMING_DIR - DIST_DIR - TEMPLATE_DIR - TITLE - HEIGHT - THUMBHEIGHT - MAXPREVIEWS - IMAGE_JOBS - RANDOM_SEED - SHUFFLE - SPLASH_PAGE - SYNC_DELETE - TARBALL_INCLUDE -) -declare -Ar CLI_OPTION_KIND=( - [--config]=value - [--incoming]=value - [--dist]=value - [--template]=value - [--title]=value - [--height]=value - [--thumbheight]=value - [--maxpreviews]=value - [--image-jobs]=value - [--random-seed]=value - [--shuffle]=flag - [--no-shuffle]=flag - [--splash]=flag - [--no-splash]=flag - [--tarball]=flag - [--no-tarball]=flag - [--force]=flag - [--sync-delete]=flag - [--no-sync-delete]=flag - [--sync-destination]=value - [--verbose]=output - [--quiet]=output - [--version]=action - [--init]=action - [--clean]=action - [--generate]=action - [--refresh-splash]=action - [--sync]=action - [--dry-run]=action - [--print-config]=action -) -declare -Ar CLI_OPTION_TARGET=( - [--config]=config_file - [--verbose]=PHOTOALBUM_OUTPUT_MODE - [--quiet]=PHOTOALBUM_OUTPUT_MODE - [--force]=PHOTOALBUM_FORCE_GENERATE -) -declare -Ar CLI_OPTION_VALUE=( - [--shuffle]=yes - [--no-shuffle]=no - [--splash]=yes - [--no-splash]=no - [--tarball]=yes - [--no-tarball]=no - [--force]=yes - [--sync-delete]=yes - [--no-sync-delete]=no - [--verbose]=verbose - [--quiet]=quiet -) -declare -Ar CLI_OPTION_CONFIG_TARGET=( - [--incoming]=INCOMING_DIR - [--dist]=DIST_DIR - [--template]=TEMPLATE_DIR - [--title]=TITLE - [--height]=HEIGHT - [--thumbheight]=THUMBHEIGHT - [--maxpreviews]=MAXPREVIEWS - [--image-jobs]=IMAGE_JOBS - [--random-seed]=RANDOM_SEED - [--shuffle]=SHUFFLE - [--no-shuffle]=SHUFFLE - [--splash]=SPLASH_PAGE - [--no-splash]=SPLASH_PAGE - [--tarball]=TARBALL_INCLUDE - [--no-tarball]=TARBALL_INCLUDE - [--sync-delete]=SYNC_DELETE - [--no-sync-delete]=SYNC_DELETE -) -declare -Ar CLI_OPTION_ARGUMENT=( - [--config]=path - [--sync-destination]=destination -) - -PHOTOALBUM_SOURCE_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) -declare -r PHOTOALBUM_SOURCE_DIR - -# PHOTOALBUM_LIB_SOURCES_BEGIN -# shellcheck source=src/lib/bootstrap.source.sh -source "$PHOTOALBUM_SOURCE_DIR/lib/bootstrap.source.sh" -# shellcheck source=src/lib/system.source.sh -source "$PHOTOALBUM_SOURCE_DIR/lib/system.source.sh" -# shellcheck source=src/lib/template.source.sh -source "$PHOTOALBUM_SOURCE_DIR/lib/template.source.sh" -# shellcheck source=src/lib/image.source.sh -source "$PHOTOALBUM_SOURCE_DIR/lib/image.source.sh" -# shellcheck source=src/lib/album.source.sh -source "$PHOTOALBUM_SOURCE_DIR/lib/album.source.sh" -# shellcheck source=src/lib/config.source.sh -source "$PHOTOALBUM_SOURCE_DIR/lib/config.source.sh" -# shellcheck source=src/lib/action.source.sh -source "$PHOTOALBUM_SOURCE_DIR/lib/action.source.sh" -# PHOTOALBUM_LIB_SOURCES_END - -main() { - local action='' - local config_file='' - local has_config_overrides='no' - local -A cli_overrides=() - local -a cli_sync_destinations=() - - if (( $# == 0 )); then - usage - exit 1 - fi - - parse_cli_arguments "$@" - run_action -} - -main "$@" diff --git a/src/shuriken.default.conf b/src/shuriken.default.conf new file mode 100644 index 0000000..6c3ea47 --- /dev/null +++ b/src/shuriken.default.conf @@ -0,0 +1,46 @@ +# The title of the shuriken +TITLE='A simple Shuriken' + +# Thumbnail height geometry +THUMBHEIGHT=300 +# Normal geometry height (when viewing photo). Uncomment, to keep original size. +HEIGHT=1200 +# Max previews per page. +MAXPREVIEWS=40 +# Parallel jobs for image processing and HTML template rendering. +IMAGE_JOBS=3 +# Timeout in seconds for each ImageMagick command. +IMAGEMAGICK_TIMEOUT=60 +# Randomly shuffle all previews. +# SHUFFLE=yes +# Generate a splash landing page at index.html. +SPLASH_PAGE=yes +# Set to any non-empty value for repeatable background, animation, timestamp, +# and shuffled preview choices. +# RANDOM_SEED=album-build-1 + +# Diverse directories, need to be full paths, not relative! +INCOMING_DIR=$(pwd)/incoming +DIST_DIR=$(pwd)/dist +TEMPLATE_DIR=/usr/share/shuriken/templates/default +#TEMPLATE_DIR=/usr/share/shuriken/templates/minimal + +# Includes a .tar of the incoming dir in the dist, can be yes or no +TARBALL_INCLUDE=yes +TARBALL_SUFFIX=.tar +# Timeout in seconds for tar archive creation. +TAR_TIMEOUT=120 +TAR_OPTS=(-c) + +# Destinations for `shuriken --sync`. Each destination is passed to rsync +# with DIST_DIR/ as the source, so the generated contents are copied into the +# target directory. Sync deletes removed files from destinations by default. +SYNC_DELETE=yes +SYNC_DESTINATIONS=( +# admin@fishfinger.buetow.org:/var/www/htdocs/example.org/ +# admin@blowfish.buetow.org:/var/www/htdocs/example.org/ +) + +# Some debugging options +#set -e +#set -x diff --git a/src/shuriken.sh b/src/shuriken.sh new file mode 100755 index 0000000..7ecc1c2 --- /dev/null +++ b/src/shuriken.sh @@ -0,0 +1,146 @@ +#!/usr/bin/env bash +set -euo pipefail + +# shuriken (c) 2011 - 2014, 2022 by Paul Buetow +# https://codeberg.org/snonux/shuriken.sh + +declare -r VERSION='SHURIKENVERSION' +declare -r DEFAULTRC="${SHURIKEN_DEFAULT_RC:-/etc/default/shuriken}" +declare -r PACKAGED_TEMPLATE_DIR='/usr/share/shuriken/templates/default' +declare -r PACKAGED_ASSET_DIR='/usr/share/shuriken/assets' +DEFAULT_TEMPLATE_DIR="${SHURIKEN_DEFAULT_TEMPLATE_DIR:-$PACKAGED_TEMPLATE_DIR}" +declare -r DEFAULT_TEMPLATE_DIR +DEFAULT_ASSET_DIR="${SHURIKEN_DEFAULT_ASSET_DIR:-$PACKAGED_ASSET_DIR}" +declare -r DEFAULT_ASSET_DIR +SHURIKEN_OUTPUT_MODE="${SHURIKEN_OUTPUT_MODE:-normal}" +SHURIKEN_ACTIVE_GENERATION_PID='' +SHURIKEN_FORCE_GENERATE="${SHURIKEN_FORCE_GENERATE:-no}" +SHURIKEN_CURRENT_DATE_TEXT='' + +declare -ra CLI_CONFIG_OVERRIDE_TARGETS=( + INCOMING_DIR + DIST_DIR + TEMPLATE_DIR + TITLE + HEIGHT + THUMBHEIGHT + MAXPREVIEWS + IMAGE_JOBS + RANDOM_SEED + SHUFFLE + SPLASH_PAGE + SYNC_DELETE + TARBALL_INCLUDE +) +declare -Ar CLI_OPTION_KIND=( + [--config]=value + [--incoming]=value + [--dist]=value + [--template]=value + [--title]=value + [--height]=value + [--thumbheight]=value + [--maxpreviews]=value + [--image-jobs]=value + [--random-seed]=value + [--shuffle]=flag + [--no-shuffle]=flag + [--splash]=flag + [--no-splash]=flag + [--tarball]=flag + [--no-tarball]=flag + [--force]=flag + [--sync-delete]=flag + [--no-sync-delete]=flag + [--sync-destination]=value + [--verbose]=output + [--quiet]=output + [--version]=action + [--init]=action + [--clean]=action + [--generate]=action + [--refresh-splash]=action + [--sync]=action + [--dry-run]=action + [--print-config]=action +) +declare -Ar CLI_OPTION_TARGET=( + [--config]=config_file + [--verbose]=SHURIKEN_OUTPUT_MODE + [--quiet]=SHURIKEN_OUTPUT_MODE + [--force]=SHURIKEN_FORCE_GENERATE +) +declare -Ar CLI_OPTION_VALUE=( + [--shuffle]=yes + [--no-shuffle]=no + [--splash]=yes + [--no-splash]=no + [--tarball]=yes + [--no-tarball]=no + [--force]=yes + [--sync-delete]=yes + [--no-sync-delete]=no + [--verbose]=verbose + [--quiet]=quiet +) +declare -Ar CLI_OPTION_CONFIG_TARGET=( + [--incoming]=INCOMING_DIR + [--dist]=DIST_DIR + [--template]=TEMPLATE_DIR + [--title]=TITLE + [--height]=HEIGHT + [--thumbheight]=THUMBHEIGHT + [--maxpreviews]=MAXPREVIEWS + [--image-jobs]=IMAGE_JOBS + [--random-seed]=RANDOM_SEED + [--shuffle]=SHUFFLE + [--no-shuffle]=SHUFFLE + [--splash]=SPLASH_PAGE + [--no-splash]=SPLASH_PAGE + [--tarball]=TARBALL_INCLUDE + [--no-tarball]=TARBALL_INCLUDE + [--sync-delete]=SYNC_DELETE + [--no-sync-delete]=SYNC_DELETE +) +declare -Ar CLI_OPTION_ARGUMENT=( + [--config]=path + [--sync-destination]=destination +) + +SHURIKEN_SOURCE_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +declare -r SHURIKEN_SOURCE_DIR + +# SHURIKEN_LIB_SOURCES_BEGIN +# shellcheck source=src/lib/bootstrap.source.sh +source "$SHURIKEN_SOURCE_DIR/lib/bootstrap.source.sh" +# shellcheck source=src/lib/system.source.sh +source "$SHURIKEN_SOURCE_DIR/lib/system.source.sh" +# shellcheck source=src/lib/template.source.sh +source "$SHURIKEN_SOURCE_DIR/lib/template.source.sh" +# shellcheck source=src/lib/image.source.sh +source "$SHURIKEN_SOURCE_DIR/lib/image.source.sh" +# shellcheck source=src/lib/album.source.sh +source "$SHURIKEN_SOURCE_DIR/lib/album.source.sh" +# shellcheck source=src/lib/config.source.sh +source "$SHURIKEN_SOURCE_DIR/lib/config.source.sh" +# shellcheck source=src/lib/action.source.sh +source "$SHURIKEN_SOURCE_DIR/lib/action.source.sh" +# SHURIKEN_LIB_SOURCES_END + +main() { + local action='' + local config_file='' + local has_config_overrides='no' + local -A cli_overrides=() + local -a cli_sync_destinations=() + + if (( $# == 0 )); then + usage + exit 1 + fi + + parse_cli_arguments "$@" + run_action +} + +main "$@" -- cgit v1.2.3