Fix WebP background migration boundaries
This commit is contained in:
1 parent
a54bf5fd95
commit
b6844dcc33
2 files changed
+69
-8
No files matched your search
@@ -1,30 +1,56 @@
|
|||||||
echo "Repair background selections after bundled images moved to WebP"
|
echo "Repair background selections after bundled images moved to WebP"
|
||||||
|
|
||||||
|
theme_webp_source() {
|
||||||
|
local theme="$1"
|
||||||
|
local background="$2"
|
||||||
|
local original_name=${background##*/}
|
||||||
|
local replacement_name="${original_name%.*}.webp"
|
||||||
|
local user_theme_backgrounds="$HOME/.config/omarchy/themes/$theme/backgrounds"
|
||||||
|
local bundled_theme_backgrounds="$OMARCHY_PATH/themes/$theme/backgrounds"
|
||||||
|
|
||||||
|
if [[ -f $user_theme_backgrounds/$original_name || -f $bundled_theme_backgrounds/$original_name ]]; then
|
||||||
|
return 1
|
||||||
|
elif [[ -f $user_theme_backgrounds/$replacement_name ]]; then
|
||||||
|
printf '%s\n' "$user_theme_backgrounds/$replacement_name"
|
||||||
|
elif [[ -f $bundled_theme_backgrounds/$replacement_name ]]; then
|
||||||
|
printf '%s\n' "$bundled_theme_backgrounds/$replacement_name"
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
replacement_webp() {
|
replacement_webp() {
|
||||||
local background="$1"
|
local background="$1"
|
||||||
local theme="${2:-}"
|
local theme="${2:-}"
|
||||||
local replacement
|
local replacement
|
||||||
|
|
||||||
[[ ! -e $background ]] || return 1
|
|
||||||
|
|
||||||
case ${background,,} in
|
case ${background,,} in
|
||||||
*.jpg | *.jpeg | *.png) replacement="${background%.*}.webp" ;;
|
*.jpg | *.jpeg | *.png) replacement="${background%.*}.webp" ;;
|
||||||
*) return 1 ;;
|
*) return 1 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ ! -f $replacement ]]; then
|
if [[ -n $theme && ${background%/*} == "$HOME/.local/state/omarchy/current/theme/backgrounds" ]]; then
|
||||||
[[ -n $theme && ${background%/*} == "$HOME/.local/state/omarchy/current/theme/backgrounds" ]] || return 1
|
theme_webp_source "$theme" "$background" >/dev/null || return 1
|
||||||
[[ -f $OMARCHY_PATH/themes/$theme/backgrounds/${replacement##*/} ]] || return 1
|
printf '%s\n' "$replacement"
|
||||||
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
[[ ! -e $background && -f $replacement ]] || return 1
|
||||||
printf '%s\n' "$replacement"
|
printf '%s\n' "$replacement"
|
||||||
}
|
}
|
||||||
|
|
||||||
current_background="$HOME/.local/state/omarchy/current/background"
|
current_dir="$HOME/.local/state/omarchy/current"
|
||||||
|
current_background="$current_dir/background"
|
||||||
if [[ -L $current_background ]]; then
|
if [[ -L $current_background ]]; then
|
||||||
|
active_theme=$(cat "$current_dir/theme.name" 2>/dev/null || true)
|
||||||
background=$(readlink "$current_background")
|
background=$(readlink "$current_background")
|
||||||
if replacement=$(replacement_webp "$background"); then
|
if replacement=$(replacement_webp "$background" "$active_theme"); then
|
||||||
|
if [[ ! -f $replacement ]]; then
|
||||||
|
source=$(theme_webp_source "$active_theme" "$background")
|
||||||
|
cp "$source" "$replacement"
|
||||||
|
fi
|
||||||
ln -sfn "$replacement" "$current_background"
|
ln -sfn "$replacement" "$current_background"
|
||||||
|
omarchy-shell -q background set "$replacement"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -8,14 +8,23 @@ test_dir=$(mktemp -d)
|
|||||||
trap 'rm -rf "$test_dir"' EXIT
|
trap 'rm -rf "$test_dir"' EXIT
|
||||||
home="$test_dir/home"
|
home="$test_dir/home"
|
||||||
migration="$ROOT/migrations/1791470456.sh"
|
migration="$ROOT/migrations/1791470456.sh"
|
||||||
|
mkdir -p "$test_dir/bin"
|
||||||
|
call_log="$test_dir/shell-calls"
|
||||||
|
cat >"$test_dir/bin/omarchy-shell" <<'SH'
|
||||||
|
#!/bin/bash
|
||||||
|
printf '%s\n' "$*" >>"$CALL_LOG"
|
||||||
|
SH
|
||||||
|
chmod +x "$test_dir/bin/omarchy-shell"
|
||||||
|
|
||||||
reset_home() {
|
reset_home() {
|
||||||
rm -rf "$home"
|
rm -rf "$home"
|
||||||
mkdir -p "$home/.local/state/omarchy/current/theme/backgrounds" "$home/.local/state/omarchy/theme-backgrounds"
|
mkdir -p "$home/.local/state/omarchy/current/theme/backgrounds" "$home/.local/state/omarchy/theme-backgrounds"
|
||||||
|
: >"$call_log"
|
||||||
}
|
}
|
||||||
|
|
||||||
run_migration() {
|
run_migration() {
|
||||||
HOME="$home" OMARCHY_PATH="$ROOT" bash -euo pipefail "$migration" >"$test_dir/output"
|
HOME="$home" OMARCHY_PATH="$ROOT" CALL_LOG="$call_log" PATH="$test_dir/bin:$PATH" \
|
||||||
|
bash -euo pipefail "$migration" >"$test_dir/output"
|
||||||
}
|
}
|
||||||
|
|
||||||
backgrounds="$home/.local/state/omarchy/current/theme/backgrounds"
|
backgrounds="$home/.local/state/omarchy/current/theme/backgrounds"
|
||||||
@@ -30,6 +39,7 @@ printf '%s\n' "$backgrounds/2-swirl-buck.jpg" >"$remembered"
|
|||||||
printf '%s\n' "$backgrounds/omarchy.png" >"$remembered_png"
|
printf '%s\n' "$backgrounds/omarchy.png" >"$remembered_png"
|
||||||
run_migration
|
run_migration
|
||||||
[[ $(readlink "$current") == "$backgrounds/current.webp" ]] || fail "the current background moves from the removed JPEG to its WebP replacement"
|
[[ $(readlink "$current") == "$backgrounds/current.webp" ]] || fail "the current background moves from the removed JPEG to its WebP replacement"
|
||||||
|
[[ $(<"$call_log") == "-q background set $backgrounds/current.webp" ]] || fail "the running shell is told about the repaired current background"
|
||||||
[[ $(<"$remembered") == "$backgrounds/2-swirl-buck.webp" ]] || fail "an inactive theme's remembered JPEG moves to its bundled WebP replacement"
|
[[ $(<"$remembered") == "$backgrounds/2-swirl-buck.webp" ]] || fail "an inactive theme's remembered JPEG moves to its bundled WebP replacement"
|
||||||
[[ $(<"$remembered_png") == "$backgrounds/omarchy.webp" ]] || fail "an inactive theme's remembered PNG moves to its bundled WebP replacement"
|
[[ $(<"$remembered_png") == "$backgrounds/omarchy.webp" ]] || fail "an inactive theme's remembered PNG moves to its bundled WebP replacement"
|
||||||
pass "converted bundled backgrounds keep their current and remembered selections"
|
pass "converted bundled backgrounds keep their current and remembered selections"
|
||||||
@@ -56,3 +66,28 @@ run_migration
|
|||||||
[[ $(readlink "$current") == "$backgrounds/missing.jpeg" ]] || fail "a dangling selection without an exact WebP replacement is preserved"
|
[[ $(readlink "$current") == "$backgrounds/missing.jpeg" ]] || fail "a dangling selection without an exact WebP replacement is preserved"
|
||||||
[[ $(<"$remembered") == "$backgrounds/missing.png" ]] || fail "a dangling remembered selection without an exact WebP replacement is preserved"
|
[[ $(<"$remembered") == "$backgrounds/missing.png" ]] || fail "a dangling remembered selection without an exact WebP replacement is preserved"
|
||||||
pass "unrelated dangling background paths are left alone"
|
pass "unrelated dangling background paths are left alone"
|
||||||
|
|
||||||
|
reset_home
|
||||||
|
mkdir -p "$home/.config/omarchy/themes/custom/backgrounds"
|
||||||
|
touch "$backgrounds/cover.webp" "$home/.config/omarchy/themes/custom/backgrounds/cover.jpg"
|
||||||
|
custom_remembered="$home/.local/state/omarchy/theme-backgrounds/custom"
|
||||||
|
printf '%s\n' "$backgrounds/cover.jpg" >"$custom_remembered"
|
||||||
|
run_migration
|
||||||
|
[[ $(<"$custom_remembered") == "$backgrounds/cover.jpg" ]] || fail "an inactive custom theme's existing JPEG is not confused with the active theme's WebP"
|
||||||
|
pass "remembered selections are checked against their named theme"
|
||||||
|
|
||||||
|
reset_home
|
||||||
|
touch "$backgrounds/2-swirl-buck.jpg"
|
||||||
|
printf '%s\n' "$backgrounds/2-swirl-buck.jpg" >"$remembered"
|
||||||
|
run_migration
|
||||||
|
[[ $(<"$remembered") == "$backgrounds/2-swirl-buck.webp" ]] || fail "an active-theme filename collision does not hide an inactive theme's WebP replacement"
|
||||||
|
pass "active theme files do not control inactive remembered repairs"
|
||||||
|
|
||||||
|
reset_home
|
||||||
|
printf 'tokyo-night\n' >"$home/.local/state/omarchy/current/theme.name"
|
||||||
|
touch "$backgrounds/2-swirl-buck.jpg"
|
||||||
|
ln -s "$backgrounds/2-swirl-buck.jpg" "$current"
|
||||||
|
run_migration
|
||||||
|
[[ -f $backgrounds/2-swirl-buck.webp ]] || fail "the active staged theme receives its bundled WebP replacement"
|
||||||
|
[[ $(readlink "$current") == "$backgrounds/2-swirl-buck.webp" ]] || fail "a selected staged JPEG moves before a later refresh can strand it"
|
||||||
|
pass "the active staged theme is repaired before its old bundled image disappears"
|
||||||
Reference in new issue
Block a user