This can be used when a file is modified externally. It will update the sqlite database and potentially run git commands for the change. If there are 2 files provided, it assumes that the file was moved. The first filename should be the old file. The new, edit and delete functions were also re factored slightly to use this new update function. Relevant to issue #4 Close issue #1
111 lines
2.8 KiB
Bash
111 lines
2.8 KiB
Bash
#!/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
|
|
}
|
|
|