jq executable: ${JQ}
"
+ echo "Now I'll create the needed files and directories."
read -r -p "Do you wish to continue? (y/N) " ANSWER
case $ANSWER in
y|Y )
function helptext() {
echo "Usage:"
- echo " $0 [PARAMS] ..."
+ echo " $0 [PARAMS] [note ID]..."
+ echo ""
+ echo "${BASENAME} parameters are:"
+ echo -e " -h | --help\t\t\t: This help text"
+ echo -e " -p | --plain\t\t\t: Output is in plain text"
+ echo -e "\t\t\t\t (without this option the output is formatted)"
+ echo -e "\t\t\t\t (this option must precede all others)"
+ echo -e " -l | --list\t\t\t: List existing notes"
+ echo -e " -a | --add=[\"<title>\"]\t: Add new note"
+ echo -e " -e | --edit=[<note>]\t\t: Edit note"
+ echo -e " -d | --delete=[<note> | all] : Delete single note or all notes at once"
+ echo -e " -s | --show=[<note>]\t\t: Display note using your favourite PAGER"
+ echo -e " -r | --restore=[<dir>]\t: Restore a previous backup from dir"
+ echo -e " -v | --version\t\t: Print version"
+ echo -e " --userconf\t\t\t: Export User config file"
+ echo -e " --backup [<dest>]\t\t: Backup your data in your destination folder"
echo ""
- cat << __NOWCONF__
+ echo -e "if a non option is passed and is a valid note ID, the note will be displayed."
+}
+
+function configtext() {
+ cat << __NOWCONF__
${BASENAME} configuration is:
-base directory: ${BASEDIR}/
-notes archive: ${NOTESDIR}/
-notes database: ${DB}
-rc file: $RCFILE
-debug file: /tmp/debug_bash-note.log
+base directory: ${BASEDIR}/
+notes archive: ${NOTESDIR}/
+notes database: ${DB}
+rc file: $RCFILE
+debug file: /tmp/debug_bash-note.log
-text editor: ${EDITOR}
-terminal: ${TERMINAL}
-jq executable: ${JQ}
+text editor: ${EDITOR}
+terminal: ${TERMINAL}
+jq executable: ${JQ}
+PAGER: ${PAGER}
__NOWCONF__
- echo ""
- 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 formatted)"
- echo " (this option must precede all others)"
- echo " -l | --list : List existing notes"
- echo " -a | --add [\"<title>\"] : Add new note"
- echo " -e | --edit [<note>] : Edit note"
- echo " -d | --delete [<note> | all] : Delete single note or all notes at once"
- echo " -s | --show [<note>] : Display note using your favourite PAGER"
- echo " -v | --version : Print version"
- echo " --userconf : Export User config file"
- echo ""
}
+
function addnote() {
# remove eventually existing temp DB file
if [[ -f $TMPDB ]]; then
# shellcheck disable=SC2086,SC2091
$(${TERMINAL} ${TERM_OPTS} ${EDITOR} ${NOTESDIR}/${NOW})
}
+function backup_data() {
+ BACKUPDIR="$1"
+ echo "backing up data in $BACKUPDIR"
+
+
+ if [ -d $BACKUPDIR ]; then
+ if [ $(/bin/ls -A $BACKUPDIR) ]; then
+ echo "$BACKUPDIR is not empty. Cannot continue"
+ exit
+ else
+ echo "$BACKUPDIR is ok. Continuing!"
+ fi
+ else
+ # BACKUPDIR doesn't exists
+ echo "$BACKUPDIR doesn't exists"
+ read -r -p "Do you want me to create it for you? (y/N) " ANSWER
+ case $ANSWER in
+ y|Y )
+ mkdir -p $BACKUPDIR
+ ;;
+ * )
+ echo "No changes made. Exiting"
+ exit
+ ;;
+ esac
+ fi
+ # ok, we have a backup directory
+ if [ -r $RCFILE ]; then
+ BCKUP_COMM=$(rsync -avz --progress ${RCFILE}* ${BASEDIR}/* ${BACKUPDIR})
+ else
+ BCKUP_COMM=$(rsync -avz --progress ${BASEDIR}/* ${BACKUPDIR})
+ fi
+ # run the command
+ if [ "$BCKUP_COMM" ]; then
+ echo -e "All files backed up."
+ echo -e "BACKUP directory:\t$BACKUPDIR"
+ tree $BACKUPDIR | $PAGER
+ echo; echo "BACKUP COMPLETED"
+ fi
+}
+
+function backup_restore() {
+ BACKUPDIR="$1"
+ echo "restoring backup from $BACKUPDIR"
+ echo "This will overwrite all your notes and configurations with the backup."
+ read -r -p "Do you want to continue? (y/N) " ANSWER
+ case $ANSWER in
+ y|Y )
+ # restoring rc file
+ BACKUPRC=$(basename $RCFILE)
+ if [ -r ${BACKUPDIR}/${BACKUPRC} ]; then
+ if [ -r ${RCFILE} ]; then
+ echo "Backing up current '${RCFILE}'...."
+ mv -f ${RCFILE} ${RCFILE}.$(date +%Y%m%d_%H%M)
+ fi
+ cp --verbose ${BACKUPDIR}/${BACKUPRC} $RCFILE
+ fi
+ # restoring notes directory
+ if [ -d $BACKUPDIR/notes ]; then
+ if [ $(/bin/ls -A $NOTESDIR) ]; then
+ rm --verbose $NOTESDIR/*
+ fi
+ cp -r --verbose $BACKUPDIR/notes $BASEDIR
+ fi
+ # restoring database
+ BACKUPDB=$(basename $DB)
+ if [ -f ${BACKUPDIR}/${BACKUPDB} ]; then
+ if [ -r ${DB} ]; then
+ echo "Backing up current '${DB}'...."
+ mv -f ${DB} ${DB}.$(date +%Y%m%d_%H%M)
+ fi
+ cp --verbose ${BACKUPDIR}/${BACKUPDB} $DB
+ fi
+ ;;
+ * )
+ echo "No changes made. Exiting"
+ exit
+ ;;
+ esac
+}
+
function editnote() {
NOTE=$1
# shellcheck disable=SC2155
echo "note not found"
exit 1
fi
- exit
}
function listnotes() {
# [ $PLAIN == true ] && echo "output is plain text" || echo "output is colored"
if [ ! "$OK" ]; then
echo "invalid note \"$NOTE\""
echo "Use the note ID that you can fetch after listing your notes"
+ sleep 1
exit 1
fi
mv $TMPDB $DB
rm $NOTESDIR/$FILE
echo "Deleted note $TITLE"
+ sleep 1
+ exit
else
echo "note not found"
+ sleep 1
exit 1
fi
fi
fi
}
# shellcheck disable=SC2006
-GOPT=$(getopt -o hvpla::e::d::s:: --long help,version,list,plain,userconf,backup::,add::,edit::,delete::,show:: -n 'bash-notes' -- "$@")
+GOPT=$(getopt -o hvplr::a::e::d::s:: --long help,version,list,plain,userconf,restore::,backup::,add::,edit::,delete::,show:: -n 'bash-notes' -- "$@")
# shellcheck disable=SC2181
if [ $? != 0 ] ; then helptext >&2 ; exit 1 ; fi
shownote "$NOTE"
exit
;;
+ -r | --restore )
+ case "$2" in
+ '' )
+ read -r -p "Backup Dir: " RDIR
+ ;;
+ * )
+ RDIR=$2
+ ;;
+ esac
+ shift 2
+ backup_restore $RDIR
+ exit
+ ;;
--userconf )
export_config
# shellcheck disable=SC2317
# shellcheck disable=SC2317
exit
;;
+ --backup )
+ case "$2" in
+ '' )
+ read -r -p "Backup Dir: " BDIR
+ ;;
+ * )
+ BDIR=$2
+ ;;
+ esac
+ shift 2
+ backup_data $BDIR
+ exit
+ ;;
-- )
shift
break
;;
esac
done
+
+for arg; do
+ if [ $(check_noteID $arg) ]; then
+ shownote $arg
+ else
+ helptext
+ exit
+ fi
+done