A tool for managing my collection of notes.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
3.0 KiB

#!/usr/bin/env bash
# This file contains functions relating to file operations such as new, edit and deleting files
newFile(){
vecho "newFile $*"
cd "$dataDir" || return
# While there is a - at the begining
local title="$*"
if [ -z "$title" ]; then
echo -n "Enter a title: "
read -r title
fi
local filename
filename="$(escapeFilename "$title.md")"
[ -e "$filename" ] && die "$filename already exists"
echo -e "---
Title: $title
Tags:
-
---
" > "$filename"
editFile "$filename"
}
# Takes the filename as a parameter
editFile(){
vecho "editFile $*"
cd "$dataDir" || return
local filename
filename="$(findFile "$*")"
[ ! -e "$filename" ] && exit 1
"$editor" "$filename"
updateFileChange "$filename"
}
# This is used to update the DB when a file is changed
# param1 is the file
updateFileChange(){
local filename
local title
local newFilename
filename="$(findFile "$1")"
[ ! -e "$filename" ] && die "No such file $1"
title="$(getYamlTitle "$filename")"
newFilename="$(escapeFilename "$title.md")"
echo "Filename: '$filename'
new filename: '$newFilename'"
if [ "$filename" = "$newFilename" ]; then
# The title hasn't changed
# check if the file is in the DB
if ! fileInDB "$filename"; then
# If not, add it
echo "INSERT INTO items (filename, title, type)
VALUES ( '$(safeSQL "$filename")',
'$(safeSQL "$title")', 'normal' );" |
sqlite3 "${sqliteFile}"
fi
# Make sure all the tags are up to date
getYamlTags "$filename" | assignTags "$filename"
gitChange "$filename"
else
# The title has changed so we need to move the file
if [ -e "$newFilename" ]; then
# If the place we need to move it to already exists, die
die -e "$newFilename already exists
$filename title changed
Please resolve manually"
else
mv "$filename" "$newFilename"
if fileInDB "$filename"; then
echo "UPDATE items
SET (filename,title) =
('$(safeSQL "$newFilename")','$(safeSQL "$title")')
WHERE filename = '$(safeSQL "$filename")';" |
sqlite3 "${sqliteFile}"
else
# We get here if the title was changed in the create process
echo "INSERT INTO items (filename, title, type)
VALUES ( '$(safeSQL "$newFilename")',
'$(safeSQL "$title")', 'normal' );" |
sqlite3 "${sqliteFile}"
fi
gitChange "$filename" "$newFilename"
fi
fi
}
deleteFile(){
cd "$dataDir" || return
local filename
local fileID
local rsp
filename="$(findFile "$1")"
fileID="$(findFileId "$filename")"
[ ! -e "$filename" ] && exit 1
echo -n "Are you sure? [yN] "
read -r rsp
if [[ "$(echo "$rsp" | tr '[:upper:]' '[:lower:]')" = "y"* ]]; then
rm "$filename"
# This deletes the file from the sql database and any tag links
echo "DELETE FROM items
WHERE id = '$(safeSQL "$fileID")';
DELETE FROM links
WHERE itemID = '$(safeSQL "$fileID")';" |
sqlite3 --column --header "${sqliteFile}"
gitChange "$filename"
fi
}
viewFile(){
cd "$dataDir" || return
local id="$1"
local filename
filename="$(findFile "$id")"
bat --color=always --style=full "$filename"
}