|
|
|
#!/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")"
|
|
|
|
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")"
|
|
|
|
|
|
|
|
"$pager" "$filename"
|
|
|
|
}
|
|
|
|
|