#!/bin/sh

HID_PATH="/mnt/onboard/.kobo"
DB_NAME="KoboReader.sqlite"
DB_BAK_NAME="$DB_NAME.bz2"
DB_PATH="$HID_PATH/$DB_NAME"
DB_BAK_PATH="/var/bak/$DB_BAK_NAME"
DB_FLASH_PATH="$HID_PATH/$DB_BAK_NAME"

BLINK=0
TOBAK=0
TOFLASH=0
ELAPSED=0

CHECK_DELTA=3
FIRSTTIME=1

chk-usb
USB_IN="$?"
chk-net
NET="$?"

while true ; do
    chk-usb
    NEW_USB_IN="$?"
    chk-net
    NEW_NET="$?"
    
    if [ "$ELAPSED" -ge "1200" ] || 
       ([ "$FIRSTTIME" -eq "1" ] && [ "$ELAPSED" -ge "60" ]) ; then
        ELAPSED=0
        FIRSTTIME=1
        
        if [ ! -f "$DB_BAK_PATH" ] ||
           ([ "$DB_PATH" -nt "$DB_BAK_PATH" ]  && [ -s "$DB_PATH" ]) ; then
            if [ "$(sqlite3 "$DB_PATH" 'PRAGMA integrity_check;')" == "ok" ] ; then
                TOBAK=1
                BLINK=0
            else
                if [ "$DB_BAK_PATH" -nt "$DB_FLASH_PATH" ] ; then
                    TOFLASH=1
                fi
                
                if [ "$BLINK" -eq "0" ] ; then
                    led red blink-fast
                    led blue blink-fast
                    BLINK=1
                fi
            fi
        fi
    elif ([ "$NEW_USB_IN" -eq "1" ] && [ "$USB_IN" -eq "0" ]) || 
         ([ "$NEW_NET" -eq "0" ] && [ "$NET" -ne "0" ]) ; then
        TOBAK=1
    fi
    
    if [ "$TOBAK" -eq "1" ] ; then
        bzip2 -c "$DB_PATH" > "$DB_BAK_PATH"
        TOBAK=0
    fi
    
    if [ "$TOFLASH" -eq "1" ] && [ "$(lsmod | grep -c g_file_storage)" -eq "0" ] ; then
        cp "$DB_BAK_PATH" "$DB_FLASH_PATH"
        TOFLASH=0
    fi
    
    USB_IN="$NEW_USB_IN"
    NET="$NEW_NET"

    sleep "$CHECK_DELTA"
    ELAPSED=$((ELAPSED + $CHECK_DELTA))
done

