#!/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" }