Support removing from favorites set
[khome.git] / home / bin / wallpapers_preview
CommitLineData
2953aaf3 1#! /bin/bash
31df3021 2
55b6848c
SK
3### XXX Chose not to 'set -e' because arithmetic evaluation can cause a non-zero exit.
4### XXX Chose not to 'set -u' because unset params ($1, $2, ...) cause failures.
5### Solutions to the above are ugly.
6
2953aaf3
SK
7declare -a paths
8declare -i n=0
31df3021 9
2953aaf3
SK
10read_command() {
11 local char
12
13 read -rsn 1 char
14 case "$char" in
15 q | Q) echo 'CMD_QUIT';;
16 h | H) echo 'CMD_MOVE_BACK';;
17 l | L) echo 'CMD_MOVE_FORWARD';;
0e76831b
SK
18 f | F) echo 'CMD_FAVORITE_ADD';;
19 r | R) echo 'CMD_FAVORITE_REMOVE';;
2953aaf3
SK
20 *) echo 'CMD_UKNOWN';;
21 esac
22}
23
cdc33eec 24paths_set() {
2953aaf3
SK
25 local path
26
cdc33eec 27 while read -r path
2953aaf3
SK
28 do
29 if file "$path" | grep 'image data' > /dev/null
30 then
31 (( n++ ))
32 # \r jumps to the beginning of the line:
33 printf '\rFound %d images.' "$n" >&2
55b6848c 34 paths["$(( n - 1 ))"]="$path"
2953aaf3
SK
35 fi
36 done
2953aaf3
SK
37 printf '\n' >&2
38}
39
cdc33eec
SK
40paths_set_from_dir_find() {
41 paths_set < <(find "$1" -type f)
42}
43
44paths_set_from_favs() {
45 paths_set < <(sort -k 2 "$FILE_WALLPAPER_FAVS" | awk '{sub("^" $1 " +", ""); print}')
46}
47
55b6848c
SK
48set_wallpaper() {
49 local -ri i="$1"
50 local -r path="$2"
51
52 printf '%d of %d %s\n' "$(( i + 1 ))" "$n" "$path"
53 feh --bg-scale "$path"
54}
55
2953aaf3 56paths_preview() {
55b6848c
SK
57 local -i i=0
58 local path="${paths[$i]}"
2953aaf3 59
55b6848c 60 set_wallpaper "$i" "$path"
2953aaf3 61
55b6848c
SK
62 while :
63 do
64 if [[ "${paths[$i]}" != "$path" ]]
65 then
66 path="${paths[$i]}"
67 set_wallpaper "$i" "$path"
68 fi
2953aaf3
SK
69
70 case "$(read_command)" in
71 CMD_QUIT)
72 exit 0;;
73 CMD_MOVE_BACK)
55b6848c 74 (( i = i == 0 ? (n - 1) : i - 1));;
2953aaf3 75 CMD_MOVE_FORWARD)
55b6848c 76 (( i = (i + 1) % n ));;
0e76831b
SK
77 CMD_FAVORITE_ADD)
78 printf 'Adding to favorites set: "%s"\n' "$path" >&2
55b6848c 79 wallpaper_fav;;
0e76831b
SK
80 CMD_FAVORITE_REMOVE)
81 printf 'Removing from favorites set: "%s"\n' "$path" >&2
82 digest=$(sha256sum "$path" | awk '{print $1}')
83 grep -v "$digest" "$FILE_WALLPAPER_FAVS" \
84 | sort -u \
85 | sponge "$FILE_WALLPAPER_FAVS"
86 ;;
2953aaf3 87 CMD_UKNOWN)
55b6848c 88 continue;;
2953aaf3
SK
89 esac
90 done
91}
92
93main() {
2953aaf3 94 case "$1" in
cdc33eec
SK
95 f | fav) paths_set_from_favs;;
96 d | dir) paths_set_from_dir_find "$2";;
97 a | all) paths_set_from_dir_find "$DIR_WALLPAPERS";;
98 '')
99 paths_set_from_dir_find "$DIR_WALLPAPERS";;
100 *)
101 printf 'Error: unknown source "%s"\n' "$1" >&2
102 exit 1;;
2953aaf3
SK
103 esac
104
2953aaf3
SK
105 paths_preview
106}
107
108main "$@"
This page took 0.04637 seconds and 4 git commands to generate.