diff options
-rwxr-xr-x | scripts/updater.sh | 144 |
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="[0m" BG="[1;32m" # Green BC="[1;36m" # Cyan BY="[1;33m" # 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 $* |