diff options
| author | Paul Buetow <paul@buetow.org> | 2026-06-17 21:35:21 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-06-17 21:35:21 +0300 |
| commit | 25aff490d739290602b28bdc53936dd3ea6ed939 (patch) | |
| tree | db6b521d3e5281d5edec1aa8588b48192e3a0f4d /src/lib/metadata-label.source.sh | |
| parent | 6109e2a6f5bc45c3c4080259bd09a1e3dc48ea4d (diff) | |
mn0 share camera Make+Model dedup helper
The rule that joins a camera's EXIF Make + Model into one label while
avoiding a duplicated manufacturer prefix (e.g. "Canon Canon EOS 5D" ->
"Canon EOS 5D") was implemented independently in the album tooltip builder
and the stats leaderboard tally. Extract it into a single shared helper
camera_label_from_make_model in the new src/lib/metadata-label.source.sh,
sourced before both callers.
Both prior implementations were behavior-identical (empty model -> make,
empty make -> model, exact/prefix dedup, case-sensitive), so this is a pure
DRY refactor with no observable output change. Added a focused unit test
covering dedup, plain concatenation and the empty-field edge cases.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'src/lib/metadata-label.source.sh')
| -rw-r--r-- | src/lib/metadata-label.source.sh | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/lib/metadata-label.source.sh b/src/lib/metadata-label.source.sh new file mode 100644 index 0000000..4d36b3c --- /dev/null +++ b/src/lib/metadata-label.source.sh @@ -0,0 +1,31 @@ +# Shared EXIF metadata label helpers. Extracted (task mn0) so the rule for +# turning a camera's Make + Model into one human-readable label lives in a +# single place instead of being duplicated in album-metadata.source.sh's +# tooltip builder and stats-aggregate.source.sh's leaderboard tally. This file +# is sourced before both callers (see LIB_SOURCES in the Justfile). All library +# modules are sourced before any code runs, so definition order only documents +# the dependency, it does not affect availability. + +# Join a camera's EXIF Make + Model into one label, avoiding a duplicated +# manufacturer prefix. Many cameras already repeat the make inside the model +# (e.g. Make="Canon", Model="Canon EOS 5D"), so when the model equals the make +# or starts with "<make> " we keep the model alone ("Canon EOS 5D" rather than +# "Canon Canon EOS 5D"). Either field may be empty: an empty model yields the +# make, an empty make yields the model, and both empty yields an empty string. +camera_label_from_make_model() { + local -r make="$1"; shift + local -r model="$1"; shift + + if [ -z "$model" ]; then + printf '%s' "$make" + return + fi + if [ -z "$make" ]; then + printf '%s' "$model" + return + fi + case "$model" in + "$make"|"$make "*) printf '%s' "$model" ;; + *) printf '%s %s' "$make" "$model" ;; + esac +} |
