blob: cdf78a0c4f4a14614d0cd43deea169bf4d3b08fb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#!/bin/bash
# WARNING: This script is a proof-of-concept and prone to errors. I don't want to hear any bitching if you use this and it blows up your game db. Back it up using `vgstash export -i foo.yaml` first.
# TODO: Refactor into multiple functions to improve error-handling.
# Set options for improved robustness
set -o errexit
set -o pipefail
set -o nounset
# Color escapes we'll use
norm="[0m"
BG="[1;32m" # Green
BC="[1;36m" # Cyan
BY="[1;33m" # Yellow
again=0
gamesrc=""
gid_check() {
if [[ $# == 1 ]]; then
case $game_id in
''|*[!0-9]*)
echo "ID is not a number."
exit 1
;;
*)
# Check for its existence
result=$(vgstash list -r | grep "^${game_id}|")
if [[ -n $result ]]; then
echo "Found game ID '${game_id}'!"
else
echo "ID not found in vgstash database."
exit 1
fi
;;
esac
fi
}
field_update() {
echo -ne "${BG}Which field are you updating?\n[t]itle, [s]ystem, [o]wnership, [p]rogress: ${norm}"
read game_field
case $game_field in
t|s)
clause="string"
;;
o)
clause="y/n"
;;
p)
clause="[f]resh, [i]n-progress, [b]eaten, [c]omplete"
;;
*)
echo "Invalid"
exit 1
;;
esac
echo -ne "${BG}What to?\n${clause}: ${norm}"
read game_value
# TODO: Put this into a loop/function
echo "Running '${BC}vgstash update ${game_id} ${game_field} "${game_value}"${norm}'..."
echo -ne "${BY}"
vgstash update ${game_id} ${game_field} "${game_value}"
echo -ne "${norm}"
run_again
}
run_again() {
echo -ne "${BG}Do you want to edit another game?${norm} "
read again
case $again in
y|yes)
main
;;
n|no)
exit
;;
*)
echo "Invalid. Try [y]es or [n]o."
run_again
;;
esac
}
game_search() {
if [[ $# == 0 ]]; then
echo -ne "${BG}Game title to search for:${norm} "
read gamesrc
else
gamesrc="$1"
fi
# Print the header first
vgstash list | head -n 2
vgstash list | grep -i "$gamesrc"
# -ne omits the newline and accepts color escapes; handy!
echo -ne "${BG}Which ID do you want to update?${norm} "
read game_id
echo "${game_id} selected."
# Check to make sure $game_id is a number
gid_check $game_id
field_update $game_id
}
main() {
case $# in
0)
game_search
;;
1)
game_search "$1"
;;
*)
echo "This script accepts zero or one arguments."
exit
;;
esac
}
main "$*"
|