branch: externals/org-gnosis
commit e5ef4d24d7adeb5aa479d3681a36be70795c82e4
Author: Thanos Apollo <pub...@thanosapollo.org>
Commit: Thanos Apollo <pub...@thanosapollo.org>

    Add delete-file.
    
    * Add org-gnosis--delete-file function that deletes all contents for
      file in db.
      * This is also used in update-file to avoid code duplication.
    * Add org-gnosis-delete-file, which should be the method for deleting
      files.
---
 org-gnosis.el | 37 +++++++++++++++++++++++++++++--------
 1 file changed, 29 insertions(+), 8 deletions(-)

diff --git a/org-gnosis.el b/org-gnosis.el
index cc3129f3f7..f9b9ca0ba0 100644
--- a/org-gnosis.el
+++ b/org-gnosis.el
@@ -271,23 +271,44 @@ If JOURNAL is non-nil, update file as a journal entry."
     (cl-loop for link in links
             do (org-gnosis--insert-into 'links `[,(cdr link) ,(car link)]))))
 
-(defun org-gnosis-update-file (&optional file)
-  "Update contents of FILE in databse.
-
-Removes all contents of FILE in database, adding them anew."
+(defun org-gnosis--delete-file (&optional file)
+  "Delete contents for FILE in database."
   (let* ((file (or file (file-name-nondirectory (buffer-file-name))))
         (journal-p (file-in-directory-p file org-gnosis-journal-dir))
         (nodes (if journal-p
                    (org-gnosis-select 'id 'journal `(= file ,file) t)
                  (org-gnosis-select 'id 'nodes `(= file ,file) t))))
     (emacsql-with-transaction org-gnosis-db
-      ;; Delete all nodes of file in db
       (cl-loop for node in nodes
               do (if journal-p
                      (org-gnosis--delete 'journal `(= id ,node))
-                   (org-gnosis--delete 'nodes `(= id ,node))))
-      ;; Add new data
-      (org-gnosis--update-file file journal-p))))
+                   (org-gnosis--delete 'nodes `(= id ,node)))))))
+
+(defun org-gnosis-update-file (&optional file)
+  "Update contents of FILE in databse.
+
+Removes all contents of FILE in database, adding them anew."
+  (let* ((file (or file (file-name-nondirectory (buffer-file-name))))
+        (journal-p (file-in-directory-p file org-gnosis-journal-dir)))
+    ;; Delete all contents for file
+    (org-gnosis--delete-file file)
+    ;; Reinsert them anew
+    (org-gnosis--update-file file journal-p)))
+
+(defun org-gnosis-delete-file (&optional file)
+  "Delete FILE.
+
+Delete file contents in database & file."
+  (interactive)
+  (let ((file (or file (file-name-nondirectory (buffer-file-name)))))
+    (if (or (file-in-directory-p (buffer-file-name) org-gnosis-dir)
+           (file-in-directory-p (buffer-file-name) org-gnosis-journal-dir))
+       (progn
+         (when (y-or-n-p (format "Delete file: %s?" file))
+           (org-gnosis--delete-file file)
+           (delete-file (buffer-file-name))
+           (kill-buffer (buffer-name))))
+      (error "%s is not an org-gnosis file" file))))
 
 (defun org-gnosis-find--tag-with-tag-prop (lst)
   "Combine each sublist of strings in LST into a single string."

Reply via email to