aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/updater.sh144
1 files changed, 101 insertions, 43 deletions
diff --git a/scripts/updater.sh b/scripts/updater.sh
index 47daa20..f240687 100755
--- a/scripts/updater.sh
+++ b/scripts/updater.sh
@@ -9,46 +9,104 @@ norm=""
BG="" # Green
BC="" # Cyan
BY="" # Yellow
-# Print the header first
-vgstash list | head -n 2
-# Let advanced users grep for a specific game
-vgstash list | grep -i "$1"
-# -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
-case $game_id in
- ''|*[!0-9]*)
- echo "No matching game found."
- exit 1
- ;;
- *)
- echo "Found game ID '${game_id}'!"
- ;;
-esac
-# TODO: make sure the game is actually in the db...
-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}"
+
+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
+ ;;
+ 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 $*