Only generate blog index when necessary

This commit is contained in:
Tom Willemse 2023-07-25 12:21:16 -07:00
parent 1d6a9213cb
commit 4e8104f11f

View file

@ -52,7 +52,9 @@
time time
(if (= time 1) "" "s"))) (if (= time 1) "" "s")))
(defun publish-get-summary-from-file (file props) (defun publish-extract-summary-from-file (file props)
"Extract a summary from FILE.
PROPS is used as an aid in getting the right information from the file."
(format "* %s\n:PROPERTIES:\n:CUSTOM_ID: %s\n:PUBDATE: %s\n:RSS_PERMALINK: %s\n:END:\n\n%s\n\n[[file:%s][Read More]]\n\n" (format "* %s\n:PROPERTIES:\n:CUSTOM_ID: %s\n:PUBDATE: %s\n:RSS_PERMALINK: %s\n:END:\n\n%s\n\n[[file:%s][Read More]]\n\n"
(car (org-publish-find-property file :title props)) (car (org-publish-find-property file :title props))
(file-name-nondirectory file) (file-name-nondirectory file)
@ -66,19 +68,43 @@
(list file))) (list file)))
(file-name-nondirectory file))) (file-name-nondirectory file)))
(defun publish-get-latest-modified-time (files)
"Get the latest modification time of any file from the list FILES."
(car
(last
(sort (mapcar #'org-publish-cache-mtime-of-src files) #'time-less-p))))
(defun publish-time>= (a b)
"Check if time A is greater than or equal to time B."
(not (time-less-p a b)))
(defun publish-empty-time ()
"Get an empty time value."
(let ((current-time (current-time)))
(time-subtract current-time current-time)))
(defun publish-generate-index (props) (defun publish-generate-index (props)
"Generate an index from my posts. "Generate an index from my posts.
Argument PROPS Argument PROPS
." ."
(let ((files (directory-files "posts/" t (rx bos (= 8 digit) "-" (= 4 digit) "-" (one-or-more nonl) (not "~") eos)))) (let* ((index-file (expand-file-name "posts/index.org"))
(index-generated-time (or (and (file-exists-p index-file)
(org-publish-cache-mtime-of-src index-file))
(publish-empty-time)))
(files (directory-files "posts/" t (rx bos (= 8 digit) "-" (= 4 digit) "-" (one-or-more nonl) (not "~") eos)))
(latest-modification-time (publish-get-latest-modified-time files)))
(if (publish-time>= index-generated-time latest-modification-time)
(message "Not generating index...")
(progn
(message "Generating index...")
(with-temp-buffer (with-temp-buffer
(insert "#+title: ryuslash's blog\n") (insert "#+title: ryuslash's blog\n")
(insert "#+options: num:nil\n") (insert "#+options: num:nil\n")
(insert "\n") (insert "\n")
(apply 'insert (apply 'insert
(mapcar (lambda (file) (publish-get-summary-from-file file props)) (mapcar (lambda (file) (publish-extract-summary-from-file file props))
(take 30 (reverse files)))) (take 30 (reverse files))))
(write-file "posts/index.org")))) (write-file "posts/index.org"))))))
(setq org-export-exclude-tags '("noexport" "draft")) (setq org-export-exclude-tags '("noexport" "draft"))