From b2d9543fa286d0eb6c5c5e49c20d36bf9e2cc610 Mon Sep 17 00:00:00 2001 From: Jethro Kuan Date: Wed, 11 May 2022 15:39:49 -0700 Subject: [PATCH] (fix)db: update atime on file access (#2174) Previously we only updated the database on file save, but we need to update the file's atime on file access, so we hook into `find-file-hook` to do so. We only update the file atime if the file exists in the file table. --- org-roam-db.el | 15 +++++++++++++++ org-roam-node.el | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/org-roam-db.el b/org-roam-db.el index 6e9270c..60f48c8 100644 --- a/org-roam-db.el +++ b/org-roam-db.el @@ -695,6 +695,19 @@ If FORCE, force a rebuild of the cache from scratch." (lwarn 'org-roam :error "Failed to process %s with error %s, skipping..." file (error-message-string err)))))))) +(defun org-roam-db--update-file-atime-h () + "Update atime in the files table on file-access." + (let* ((f (buffer-file-name (buffer-base-buffer))) + (file-in-db-p (> (caar (org-roam-db-query [:select (funcall count file) :from files + :where (= file $s1)] f)) 0)) + (new-atime (file-attribute-access-time (file-attributes f)))) + (when file-in-db-p + (org-roam-db-query [:update (atime) + :in files + :values $v1 + :where (= file $s2)] + [new-atime] f)))) + ;;;###autoload (define-minor-mode org-roam-db-autosync-mode "Global minor mode to keep your Org-roam session automatically synchronized. @@ -712,12 +725,14 @@ database, see `org-roam-db-sync' command." (cond (enabled (add-hook 'find-file-hook #'org-roam-db-autosync--setup-file-h) + (add-hook 'find-file-hook #'org-roam-db--update-file-atime-h) (add-hook 'kill-emacs-hook #'org-roam-db--close-all) (advice-add #'rename-file :after #'org-roam-db-autosync--rename-file-a) (advice-add #'delete-file :before #'org-roam-db-autosync--delete-file-a) (org-roam-db-sync)) (t (remove-hook 'find-file-hook #'org-roam-db-autosync--setup-file-h) + (remove-hook 'find-file-hook #'org-roam-db--update-file-atime-h) (remove-hook 'kill-emacs-hook #'org-roam-db--close-all) (advice-remove #'rename-file #'org-roam-db-autosync--rename-file-a) (advice-remove #'delete-file #'org-roam-db-autosync--delete-file-a) diff --git a/org-roam-node.el b/org-roam-node.el index 6d24815..0cf0c84 100644 --- a/org-roam-node.el +++ b/org-roam-node.el @@ -73,7 +73,7 @@ It takes a single argument NODE, which is an `org-roam-node' construct." :group 'org-roam :type 'function) -(defcustom org-roam-node-default-sort 'file-mtime +(defcustom org-roam-node-default-sort 'file-atime "Default sort order for Org-roam node completions." :type '(choice (const :tag "none" nil)