#!/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. # Color escapes we'll use norm="" BG="" # Green BC="" # Cyan BY="" # 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 "$*"