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.
120 lines
2.9 KiB
120 lines
2.9 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")" |
|
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" |
|
} |
|
|
|
|