feat: validate input

Gracefully handle invalid setting and environment.
This commit is contained in:
Adam 2022-04-10 14:12:49 -06:00
parent 2d6f745bf9
commit 7324eeb65f
1 changed files with 53 additions and 0 deletions

53
usr/local/bin/wallpaperctl Executable file
View File

@ -0,0 +1,53 @@
#!/usr/bin/env bash
pictureuri="picture-uri"
validate_config() {
if [ -z "$WALLPAPER_DIR" ]; then
quit "Error: The wallpaper directory environment variable (WALLPAPER_DIR) has not been set."
fi
if [ ! -e "$WALLPAPER_DIR" ]; then
quit "Error: The wallpaper directory \"$WALLPAPER_DIR\" does not exist."
fi
if [ ! -d "$WALLPAPER_DIR" ]; then
quit "Error: The wallpaper directory \"$WALLPAPER_DIR\" is not a directory."
fi
if [ ! -r "$WALLPAPER_DIR" ]; then
quit "Error: The wallpaper directory \"$WALLPAPER_DIR\" is not accessible. "
fi
}
prepare() {
get_wallpaper
validate_wallpaper
}
get_wallpaper() {
selection="$(find "$WALLPAPER_DIR" -type f -name "*.jpg" -o -name "*.png" | shuf -n1)"
}
validate_wallpaper() {
if [ ! -f "$selection" ]; then
quit "Error: The wallpaper \"$WALLPAPER_DIR\" is not a file."
fi
if [ ! -r "$selection" ]; then
quit "Error: The wallpaper \"$WALLPAPER_DIR\" is not accessible."
fi
}
set_wallpaper() {
gsettings set org.gnome.desktop.background "$pictureuri" "file://$selection"
}
quit() {
if [[ "$1" = 0 ]]
then
exit 0
else
printf "%b\n" "$1"
exit 1
fi
}
validate_config
prepare
set_wallpaper
quit 0