fixed error when adding first note on new install. Fixed error when listing empty db.
[bash-notes.git] / notes.sh
index 91a3867..68feaf9 100644 (file)
--- a/notes.sh
+++ b/notes.sh
@@ -9,6 +9,7 @@ set_defaults() {
 # Binaries to use
 EDITOR=${EDITOR:-/usr/bin/vim}
 TERMINAL=${TERMINAL:-/usr/bin/alacritty}
+TERM_OPTS="--class notes --title notes -e "
 JQ=${JQ:-/usr/bin/jq}
 
 # base directory for program files
@@ -56,6 +57,19 @@ fi
 # create PIDFILE
 echo $PID > $PIDFILE
 
+# check if input is a number, returns false or the number itself
+function check_noteID() {
+       IN=$1
+       case $IN in
+               ''|*[!0-9]*)
+                       return 1
+                       ;;
+               *)
+                       echo $IN
+                       ;;
+       esac
+}
+
 function helptext() {
     echo "Usage:"
     echo "  $0 [PARAMS] ..."
@@ -74,7 +88,7 @@ jq executable:                ${JQ}
 __NOWCONF__
 
        echo ""
-    echo "The script's parameters are:"
+    echo "${BASENAME} parameters are:"
     echo "  -h | --help                        : This help text"
     echo "  -p | --plain                       : Output is in plain text"
     echo "                               (without this option the output is colored)"
@@ -85,36 +99,49 @@ __NOWCONF__
     echo "  -r | --remove <note>               : Remove note"
     echo "  -v | --version             : Print version"
     echo "  --userconf                 : Export User config file"
+    echo ""
 }
 
 function addnote() {
        NOTETITLE="$1"
        echo "adding new note - \"$NOTETITLE\""
-       LASTID=$($JQ '.notes[-1].id | tonumber' $DB)
-       [ null == $LASTID ] && LASTID=0
+       LASTID=$($JQ '.notes[-1].id // 0 | tonumber' $DB)
+       # [ "" == $LASTID ] && LASTID=0
        NOTEID=$(( $LASTID + 1 ))
        touch ${NOTESDIR}/${NOW}
        $JQ --arg i "$NOTEID" --arg t "$NOTETITLE" --arg f "$NOW" '.notes += [{"id": $i, "title": $t, "file": $f}]' "$DB" > $TMPDB
        mv $TMPDB $DB
-       $(${TERMINAL} --class notes --title notes -e ${EDITOR} ${NOTESDIR}/${NOW})
+       $(${TERMINAL} ${TERM_OPTS} ${EDITOR} ${NOTESDIR}/${NOW})
 }
 
 function listnotes() {
-       echo "listing all notes"
-       [ $PLAIN == true ] && echo "output is plain text" || echo "output is colored"
-       echo ""
-       echo "[ID]      [TITLE]"
-       for i in ${NOTESDIR}/*; do
-               TITLE=$($JQ -r --arg z $(basename $i) '.notes[] | select(.file == $z) | .title' $DB)
-               ID=$($JQ -r --arg z $(basename $i) '.notes[] | select(.file == $z) | .id' $DB)
-
-               echo "[${ID}]   ${TITLE}"
-       done
+       # [ $PLAIN == true ] && echo "output is plain text" || echo "output is colored"
+       if [[ $(ls -A $NOTESDIR) ]]; then
+               echo "listing all notes"
+               echo ""
+               echo "[ID]      [TITLE]         [SIZE]"
+               for i in ${NOTESDIR}/*; do
+                       SIZE=$(du -k $i |cut -f 1)
+                       TITLE=$($JQ -r --arg z $(basename $i) '.notes[] | select(.file == $z) | .title' $DB)
+                       ID=$($JQ -r --arg z $(basename $i) '.notes[] | select(.file == $z) | .id' $DB)
+
+                       echo "[${ID}]   ${TITLE}        ${SIZE}kb"
+               done
+       else
+               echo "no notes yet. You can add your first one with: ${BASENAME} -a \"your note title\""
+       fi
 }
 
 function editnote() {
-       TITLE=$($JQ --arg i $1 '.notes[] | select(.id == $i) | .title' $DB)
-       FILE=$($JQ -r --arg i $1 '.notes[] | select(.id == $i) | .file' $DB)
+       NOTE=$1
+       local OK=$(check_noteID $NOTE)
+       if [ ! $OK ]; then
+               echo "invalid note \"$NOTE\""
+               exit 1
+       fi
+
+       TITLE=$($JQ --arg i $OK '.notes[] | select(.id == $i) | .title' $DB)
+       FILE=$($JQ -r --arg i $OK '.notes[] | select(.id == $i) | .file' $DB)
        if [ "$TITLE" ]; then
                echo "editing note $TITLE"
                $(${TERMINAL} --class notes --title notes -e ${EDITOR} ${NOTESDIR}/${FILE})
@@ -125,14 +152,17 @@ function editnote() {
 }
 
 function datenote() {
-       echo "edit date for note \"${1}\""
+       NOTE=$1
+       local OK=$(check_noteID $NOTE)
+       [ $OK ] && echo "editing date for note $OK" || echo "invalid note \"$NOTE\""
        # FILEDATE=$(date -d @$NOW +%d/%m/%Y_%T)
 
 }
 
 function rmnote() {
        NOTE=$1
-       echo "removing note $NOTE"
+       local OK=$(check_noteID $NOTE)
+       [ $OK ] && echo "removing note $OK" || echo "invalid note \"$NOTE\""
 }
 
 function export_config() {