@ -23,6 +23,85 @@ Tags:
editFile "$filename"
}
addFile(){
vecho "addFile $*"
local copiedFile
local subFolder=""
local ext
local file
local filenameTitle
local yaml
local yamlBlock
local yamlTitle
while [[ $1 = -?* ]]; do
case "$1" in
--asset) mkdir -p "${dataDir}assets"; subFolder+="assets/" ;;
--yaml-header) yaml="header" ;;
--yaml-file) yaml="file" ;;
*) die "invalid add option: '$1'." ;;
esac
shift
done
file="$1"
[ -z "$file" ] && die "You must specify a file"
[ -f "$file" ] || die "File $file not found"
ext="${file##*.}"
copiedFile="${file##*/}"
# If the type of yaml entry hasn't been specified on the command line
if [ -z "$yaml" ]; then
# We want a header if it's markdown, otherwise a seperate file
if [ "$ext" = "md" ]; then
yaml="header"
else
yaml="file"
fi
fi
[ -e "$dataDir$copiedFile" ] && die "File $copiedFile already exists"
cp "$file" "$dataDir$subFolder$copiedFile"
# The title as specified in yaml (or empty string)
yamlBlock="$(getYamlBlock "$subFolder$copiedFile")"
yamlTitle="$(getYamlTitle "$subFolder$copiedFile")"
# The title generated from filename
filenameTitle="$(echo "$copiedFile" | tr '_' ' ' | sed -E 's/\..[^.]+$//')"
if [ -z "$yamlTitle" ] || [ "$yamlTitle" = "null" ]; then
# If empty, generate the title from the filename
yamlTitle="$filenameTitle"
else
# If the yaml title and the filename title are different, then use the yaml title
if [ "$yamlTitle" != "$filenameTitle" ]; then
local newFilename=$(escapeFilename "$yamlTitle").$ext
echo mv "$dataDir$subFolder$copiedFile" "$dataDir$subFolder$newFilename"
warn "File renamed from $copiedFile to "$newFilename
copiedFile="$newFilename"
fi
fi
yamlBlock="Title: $yamlTitle
$yamlBlock"
if [ "$yaml" = "header" ]; then
local tmpfile=$(mktemp)
echo "---
$yamlBlock
---" > $tmpfile
sed '1 { /^---/ { :a N; /\n---/! ba; d} }' "$dataDir$subFolder$copiedFile" >> "$tmpfile"
mv "$tmpfile" "$dataDir$subFolder$copiedFile"
else
echo "$yamlBlock" > "$dataDir$subFolder$copiedFile.yaml"
fi
updateFileChange "$subFolder$copiedFile"
}
# Takes the filename as a parameter
editFile(){
vecho "editFile $*"
@ -37,13 +116,23 @@ editFile(){
# This is used to update the DB when a file is changed
# param1 is the file
updateFileChange(){
vecho "updateFileChange $*"
cd "$dataDir" || return
local filename
local directory=""
local title
local newFilename
local filetype="normal"
local ext
filename="$(findFile "$1")"
ext="${filename##*.}"
[ ! -e "$filename" ] && die "No such file $1"
if echo "$filename" | grep -q '^assets/'; then
filetype="asset"
directory="assets/"
fi
title="$(getYamlTitle "$filename")"
newFilename="$(escapeFilename "$title.md")"
newFilename="$directory$(escapeFilename "$title.$ext ")"
if [ "$filename" = "$newFilename" ]; then
# The title hasn't changed
# check if the file is in the DB
@ -51,7 +140,7 @@ updateFileChange(){
# If not, add it
echo "INSERT INTO items (filename, title, type)
VALUES ( '$(safeSQL "$filename")',
'$(safeSQL "$title")', 'normal ' );" |
'$(safeSQL "$title")', '$(safeSQL "$filetype") ' );" |
sqlite3 "${sqliteFile}"
fi
# Make sure all the tags are up to date
@ -76,7 +165,7 @@ Please resolve manually"
# 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 ' );" |
'$(safeSQL "$title")', '$(safeSQL "$filetype") ' );" |
sqlite3 "${sqliteFile}"
fi
@ -86,6 +175,7 @@ Please resolve manually"
}
deleteFile(){
vecho "deleteFile $*"
cd "$dataDir" || return
local filename
local fileID
@ -108,6 +198,7 @@ deleteFile(){
}
viewFile(){
vecho "viewFile $*"
cd "$dataDir" || return
local id="$1"