# If you want to store your notes in a git repository set this to true
USEGIT=true
-# Address of your remote repository
+# Address of your remote repository. Without this GIT will refuse to work
GITREMOTE=${GITREMOTE:-""}
# How long should we wait (in seconds) between sync on the git remote. Default 3600 (1 hour)
-GITSYNCDELAY=${GITSYNCDELAY:-3600}
-# The name of this client. Defaults to the output of hostname
+GITSYNCDELAY=${GITSYNCDELAY:-"3600"}
+# The name of this client. If left empty, defaults to the output of hostname
GITCLIENT=${GITCLIENT:-""}
} # end set_defaults, do not change this line.
IN=$1
case $IN in
''|*[!0-9]*)
- return 1
+ false
;;
*)
echo "$IN"
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 -e " --showconf\t\t\t: Display running options"
+ echo -e " --sync\t\t\t: Sync notes to git repository"
echo ""
echo -e "if a non option is passed and is a valid note ID, the note will be displayed."
}
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
-
-text editor: ${EDITOR}
-terminal: ${TERMINAL}
-jq executable: ${JQ}
-PAGER: ${PAGER}
-__NOWCONF__
-
+ [ $USEGIT ] && GITUSE="enabled" || GITUSE="disabled"
+ if [ -n $GITCLIENT ]; then
+ CLIENTGIT="$( hostname )"
+ else
+ CLIENTGIT="$GITCLIENT"
+ fi
+ clear
+ echo -e "${BASENAME} configuration is:"
+
+ echo -e "\tbase directory: ${BASEDIR}/"
+ echo -e "\tnotes archive: ${NOTESDIR}/"
+ echo -e "\tnotes database: ${DB}"
+ echo -e "\trc file: $RCFILE"
+ echo -e "\tdebug file: /tmp/debug_bash-note.log"
+ echo
+ echo -e "\ttext editor: ${EDITOR}"
+ echo -e "\tterminal: ${TERMINAL}"
+ echo -e "\tjq executable: ${JQ}"
+ echo -e "\tPAGER: ${PAGER}"
+ echo
+ echo -e "\tGIT: ${GITUSE} - ${GIT}"
+ echo -e "\tGIT remote: ${GITREMOTE}"
+ echo -e "\tGIT sync delay: ${GITSYNCDELAY}"
+ echo -e "\tGIT client name: ${CLIENTGIT}"
}
# this function returns a random 2 words title
}
# check if GITCLIENT has been set or set it to the output of hostname
-if [ -z $GITCLIENT ]; then
+if [ -z "$GITCLIENT" ]; then
GITCLIENT=$( hostname )
fi
# returns true if the argument provided directory is a git repository
}
# sync local repository to remote
+# accepts -f parameter to skip last sync check
gitsync() {
+ FORCE=$1
if [[ $USEGIT && -n $GITREMOTE ]]; then
- NOWSYNC=$(date +%s)
- # LASTSYNC is the last time we synced to the remote, or 0 if it's the first time.
- LASTSYNC=$($JQ -r '.git["lastpull"] // 0' "$DB")
[ $PLAIN == false ] && echo "Syncing notes with git on remote \"$GITREMOTE\""
- SYNCDIFF=$(( ${NOWSYNC} - ${LASTSYNC} ))
- if (( $SYNCDIFF > $GITSYNCDELAY )); then
- #more than our delay time has passed. We can sync again.
+ NOWSYNC=$(date +%s)
+ if [[ $FORCE == "-f" ]]; then
$JQ --arg n "$NOWSYNC" '.git["lastpull"] = $n' "$DB" > $TMPDB
mv $TMPDB $DB
cd $BASEDIR
- $GIT pull
+ [ $PLAIN == false ] && $GIT pull || $GIT pull -q
else
- # Last synced less than $GITSYNCDELAY seconds ago. We shall wait
- [ $PLAIN == false ] && echo "Last synced less than $GITSYNCDELAY seconds ago. We shall wait"
+ # LASTSYNC is the last time we synced to the remote, or 0 if it's the first time.
+ LASTSYNC=$($JQ -r '.git["lastpull"] // 0' "$DB")
+ SYNCDIFF=$(( ${NOWSYNC} - ${LASTSYNC} ))
+ if (( $SYNCDIFF > $GITSYNCDELAY )); then
+ #more than our delay time has passed. We can sync again.
+ $JQ --arg n "$NOWSYNC" '.git["lastpull"] = $n' "$DB" > $TMPDB
+ mv $TMPDB $DB
+ cd $BASEDIR
+ [ $PLAIN == false ] && $GIT pull || $GIT pull -q
+ else
+ # Last synced less than $GITSYNCDELAY seconds ago. We shall wait
+ [ $PLAIN == false ] && echo "Last synced less than $GITSYNCDELAY seconds ago. We shall wait"
+ fi
fi
else
# no git, so we just keep going
fi
}
+# edited note added to git and pushed it to remote
+gitedit() {
+ if [[ $USEGIT && -n $GITREMOTE ]]; then
+ [ $PLAIN == false ] && echo "Editing note on remote \"$GITREMOTE\""
+ cd $BASEDIR
+ $GIT add .
+ $GIT commit -m "$(basename $0) - ${GITCLIENT} note edited."
+ $GIT push origin master
+ else
+ # no git, so we just keep going
+ true
+ fi
+}
+
+# add note to git and push it to remote
+gitremove() {
+ NOTE=$1
+ FILE=$2
+ if [[ $USEGIT && -n $GITREMOTE ]]; then
+ [ $PLAIN == false ] && echo "Deleting notes from remote \"$GITREMOTE\""
+ if [ "all" == $NOTE ];then
+ echo "Deleting all notes"
+ cd $BASEDIR
+ $GIT rm notes/*
+ $GIT commit -m "$(basename $0) - ${GITCLIENT} removing all notes."
+ $GIT push origin master
+ else
+ local OK=$(check_noteID "$NOTE")
+ if [[ "$OK" ]]; then
+ echo "Deleting note ID ${NOTE}"
+ cd $BASEDIR
+ $GIT rm notes/${FILE}
+ $GIT add .
+ $GIT commit -m "$(basename $0) - ${GITCLIENT} removing note ID ${NOTE}."
+ $GIT push origin master
+ fi
+ fi
+ else
+ # no git, so we just keep going
+ true
+ fi
+}
+
# check for USEGIT and subsequent variables
if [[ $USEGIT && -n $GITREMOTE ]]; then
# GIT is a go.
addnote() {
# attempt syncing before adding a note
- gitsync
+ gitsync -f
# remove eventually existing temp DB file
if [[ -f $TMPDB ]]; then
rm $TMPDB
fi
+ # RANDOM TITLE
RTITLE=$(random_title)
- [[ -z "$1" ]] && NOTETITLE="$RTITLE" || NOTETITLE="$1"
+
+ if [[ -z $1 ]]; then
+ read -r -p "Title: " TITLE
+ case "$TITLE" in
+ '' )
+ NOTETITLE="$RTITLE"
+ ;;
+ * )
+ NOTETITLE=$TITLE
+ ;;
+ esac
+ fi
+
+ # [[ -z "$1" ]] && NOTETITLE="$RTITLE" || NOTETITLE="$1"
echo "adding new note - \"$NOTETITLE\""
# shellcheck disable=SC2086
LASTID=$($JQ '.notes[-1].id // 0 | tonumber' $DB)
echo "editing note $TITLE"
# shellcheck disable=SC2086,SC2091
$(${TERMINAL} ${TERM_OPTS} ${EDITOR} ${NOTESDIR}/${FILE})
+ gitedit
else
echo "note not found"
exit 1
mv $TMPDB $DB
# shellcheck disable=SC2086
rm $NOTESDIR/*
+ gitremove "all"
echo "Deleted all notes"
;;
* )
# shellcheck disable=SC2086
mv $TMPDB $DB
rm $NOTESDIR/$FILE
+ gitremove $OK $FILE
echo "Deleted note $TITLE"
sleep 1
exit
fi
}
# shellcheck disable=SC2006
-GOPT=$(getopt -o hvplr::a::e::d::s:: --long help,version,list,plain,userconf,sync,restore::,backup::,add::,edit::,delete::,show:: -n 'bash-notes' -- "$@")
+GOPT=$(getopt -o hvplr:a::e:d:s: --long help,version,list,plain,userconf,showconf,sync,restore:,backup:,add::,edit:,delete:,show: -n 'bash-notes' -- "$@")
# shellcheck disable=SC2181
if [ $? != 0 ] ; then helptext >&2 ; exit 1 ; fi
exit
;;
-a | --add )
- case "$2" in
- '' )
- read -r -p "Title: " TITLE
- ;;
- * )
- TITLE=$2
- ;;
- esac
+ TITLE=$2
shift 2
addnote "$TITLE"
exit
;;
-e | --edit )
- case "$2" in
- '' )
- read -r -p "Note ID: " NOTE
- ;;
- * )
- NOTE=$2
- ;;
- esac
+ NOTE=$2
shift 2
editnote "$NOTE"
exit
;;
-d | --delete )
- case "$2" in
- '' )
- read -r -p "Note ID: " NOTE
- ;;
- * )
- NOTE=$2
- ;;
- esac
+ NOTE=$2
shift 2
rmnote "$NOTE"
exit
;;
-s | --show )
- case "$2" in
- '' )
- read -r -p "Note ID: " NOTE
- ;;
- * )
- NOTE=$2
- ;;
- esac
+ NOTE=$2
shift 2
shownote "$NOTE"
exit
;;
-r | --restore )
- case "$2" in
- '' )
- read -r -p "Backup Dir: " RDIR
- ;;
- * )
- RDIR=$2
- ;;
- esac
+ RDIR=$2
shift 2
backup_restore $RDIR
exit
;;
--sync )
- gitsync
+ # I'm forcing it because if you run it manually, chances are that you need to.
+ gitsync -f
+ shift
exit
;;
--userconf )
# shellcheck disable=SC2317
exit
;;
+ --showconf )
+ configtext
+ exit
+ ;;
--backup )
- case "$2" in
- '' )
- read -r -p "Backup Dir: " BDIR
- ;;
- * )
- BDIR=$2
- ;;
- esac
+ BDIR=$2
shift 2
backup_data $BDIR
exit