URI: 
       tcommented and finished _dig - gtomb - tomb gtk frontend in zenity
  HTML git clone git://parazyd.org/gtomb.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit ec063ed4c349e80c2fc323e6044fcec25605da3f
   DIR parent b4342de039fb39c7f89d7118991222c75357e28d
  HTML Author: parazyd <parazyd@dyne.org>
       Date:   Sun, 13 Dec 2015 22:11:39 +0100
       
       commented and finished _dig
       
       Diffstat:
         M README.md                           |       4 ++--
         M gtomb                               |      89 +++++++++++++++++++++++++------
       
       2 files changed, 74 insertions(+), 19 deletions(-)
       ---
   DIR diff --git a/README.md b/README.md
       t@@ -5,12 +5,12 @@ A GUI for Tomb (https://www.dyne.org/software/tomb/)
        It is imagined to make usage of Tomb even easier for end-users.
        
        ## Usage
       -![gtomb UI](https://github.com/parazyd/gtomb/raw/master/screenshot.png "gtomb UI")
       +![gtomb UI](https://github.com/parazyd/gtomb/raw/master/screenshot.png "gtomb UI")  
        The UI consists of all commands included in Tomb. You can choose a command you wish to run via the
        list and the script will run it for you. Easy-peasy.
        
        ## Dependencies
       -* tomb (also get tomb's dependencies)
       +* [tomb](https://github.com/dyne/Tomb) (also get tomb's dependencies)
        * zenity
        
        ## TODO
   DIR diff --git a/gtomb b/gtomb
       t@@ -10,10 +10,11 @@
        # intended and should be used with caution.
        #
        
       -ver="0.5.1"
       +ver="0.5.2"
        TOMBPATH="/usr/local/bin/tomb" # Set this to your tomb executable's path
        
        function _ {
       +    # I like cleaning.
            _clean
        }
        
       t@@ -180,11 +181,15 @@ function _failure die() {
        
        # {{{ _clean - Clean function, removes sensitive stuff from memory
        function _clean {
       -     local rr="$RANDOM"
       -     while [[ ${#rr} -lt 500 ]]; do
       +    
       +    echo "Cleaning..." # For debugging.
       +    unset $?
       +    local rr="$RANDOM"
       +    while [[ ${#rr} -lt 500 ]]; do
                rr+="$RANDOM"
            done
        
       +    # Overwrite and unset vars.
            command="$rr";      unset command
            tombname="$rr";     unset tombname
            tombsize="$rr";     unset tombsize
       t@@ -235,6 +240,7 @@ function _main {
        
        # {{{ dig - Dig a new tomb
        function _dig {
       +    # Get new tomb's name and path.
            tombname=`zenity \
                --title="Choose where to dig your tomb" \
                --window-icon="monmort.png" \
       t@@ -242,6 +248,9 @@ function _dig {
                --filename="secret.tomb" \
                --save`
        
       +    res=$?
       +
       +    # Check for existing tomb.
            if [[ -f $tombname ]]; then
                zenity \
                    --title="Error!" \
       t@@ -249,10 +258,19 @@ function _dig {
                    --error \
                    --text="This tomb already exists. I'm not digging here."
                    exec _main
       +    # Check for empty path.
       +    elif [[ $tombname == "" ]]; then
       +        zenity \
       +            --title="Warning!" \
       +            --window-icon="monmort.png" \
       +            --warning \
       +            --text="Try again."
       +        exec _main
            fi
        
       -    case $? in
       +    case $res in
                0)
       +            # Get tomb's size.
                    tombsize=`zenity \
                        --title="Tomb digging" \
                        --window-icon="monmort.png" \
       t@@ -260,8 +278,29 @@ function _dig {
                        --text="Enter the size of your tomb in MiB (min. 10 MiB):" \
                        --entry-text=10`
        
       -            case $? in
       +            res=$?
       +
       +            # See if it's an actual integer.
       +            re='^[0-9]+$'
       +            if ! [[ $tombsize =~ $re ]]; then
       +                zenity \
       +                    --title="Error!" \
       +                    --window-icon="monmort.png" \
       +                    --error \
       +                    --text="Please choose a valid number."
       +            elif [[ $tombsize == "" ]]; then
       +                zenity \
       +                    --title="Warning" \
       +                    --window-icon="monmort.png" \
       +                    --error \
       +                    --text="Try again."
       +
       +                exec _main
       +            fi
       +
       +            case $res in
                        0)
       +                    # Dig teh tomb.
                            $TOMBPATH dig -s $tombsize $tombname | \
                                zenity \
                                    --title="Digging new tomb" \
       t@@ -271,22 +310,20 @@ function _dig {
                                    --auto-close \
                                    --pulsate &
        
       +                    # Control Zenity and dd's PIDs to catch cancelling.
                            PID_ZEN=$(ps -C zenity h -o pid,command | grep "Digging new tomb" | awk '{print $1}')
       -
                            while [ "$PID_ZEN" != "" ]; do
                                PID_ZEN=$(ps h -o pid -p ${PID_ZEN})
                                PID_DD=$(ps -C dd h -o pid,command | grep "$tombname" | awk '{print $1}')
       -
                                #PID_DD=$(ps -C dd h -o pid,command | grep " of=" | awk '{print $1}')
                                                                    # ^ unsafe for other dds
                                                                    # doesn't work when using
                                                                    # a var like $tombname
                                                                    # sometimes
       -                        sleep 2 # test out
       +                        sleep 1 # Test different values here.
                            done
        
                            if [[ "$PID_DD" != "" && "$PID_ZEN" == "" ]]; then
       -
                                kill -9 $PID_DD
        
                                zenity \
       t@@ -295,7 +332,7 @@ function _dig {
                                    --text="Tomb digging canceled." \
                                    --warning
        
       -                        rm -f $tombname # try srm/wipe
       +                        rm -f $tombname # Try srm/wipe here, but not actually necessary.
                                exec _main
                            fi
        
       t@@ -339,6 +376,15 @@ function _forge {
                --filename="secret.tomb.key" \
                --save`
        
       +    if [[ -f $keyfile ]]; then
       +        zenity \
       +            --title="Error!" \
       +            --window-icon="monmort.png" \
       +            --error \
       +            --text="This key already exists. I'm not overwriting."
       +        exec _main
       +    fi
       +
            case $? in
                0)
                    $TOMBPATH forge $keyfile | \
       t@@ -349,11 +395,22 @@ function _forge {
                            You can move your mouse around and use your computer to speed up the process." \
                            --progress \
                            --auto-close \
       -                    --pulsate
       +                    --pulsate &
       +
       +            PID_ZEN=$(ps -C zenity h -o pid,command | grep "Forging key" | awk '{print $1}')
        
       -            if [[ $? == 1 ]]; then
       -                killall dd # possibly unsafe
       +            while [ "$PID_ZEN" != "" ]; do
       +                PID_ZEN=$(ps h -o pid -p ${PID_ZEN})
       +                PID_DD=$(ps -C dd h -o pid,command | grep " if=" | awk '{print $1}')
       +                                                            # ^ also unsafe
       +                                                            # find out how to catch
       +                                                            # correct one
       +                sleep 2
       +            done
        
       +            if [[ "$PID_DD" != "" && "$PID_ZEN" == "" ]]; then
       +                    
       +                kill -9 $PID_DD
                        zenity \
                            --title="Canceled!" \
                            --window-icon="monmort.png" \
       t@@ -372,12 +429,10 @@ function _forge {
                        --info \
                        --text="Your key is now forged."
        
       -            _main
       -            eval "_$command"
       +            exec _main
                    ;;
                1)
       -            _main
       -            eval "_$command"
       +            exec _main
                    ;;
            esac
        }