Add defaults for the data from the org buffer

This commit is contained in:
Tom Willemse 2021-06-24 22:02:52 -07:00
parent 7b5322b313
commit 7ce1d86c05

View file

@ -44,15 +44,24 @@
(defvar tekuti-host "http://127.0.0.1:8080") (defvar tekuti-host "http://127.0.0.1:8080")
(defun tekuti--format-date (date) (defun tekuti--format-date (&optional date)
"Format DATE into a date that tekuti understands." "Format DATE into a date that tekuti understands."
(format-time-string "%a, %d %b %Y %H:%M:%S %Z" (format-time-string "%a, %d %b %Y %H:%M:%S %Z"
(unless (null date)
(org-timestamp-to-time (org-timestamp-to-time
(org-timestamp-from-string date)) (org-timestamp-from-string date)))
t)) t))
(defun tekuti-build-data-from-org () (defun tekuti-build-data-from-org ()
(append "Parse the current org buffer to collect the necessary metadata."
(let ((defaults `(("TITLE")
("DATE" ,(tekuti--format-date))
("TAGS")
("STATUS")
("COMMENTS")
("COMMENTS-CLOSED-DATE")
("BODY")))
(data (append
(mapcar (mapcar
(lambda (pair) (lambda (pair)
(pcase pair (pcase pair
@ -67,7 +76,12 @@
(list (list
(list "BODY" (list "BODY"
(with-current-buffer (org-html-export-as-html nil nil nil t) (with-current-buffer (org-html-export-as-html nil nil nil t)
(buffer-substring-no-properties (point-min) (point-max))))))) (buffer-substring-no-properties (point-min) (point-max))))))))
(mapcar (lambda (item)
(let ((key (car item)))
`(,key ,@(or (alist-get key data nil nil #'string=)
(cdr item)))))
defaults)))
(defun tekuti-form-encode-pair (key value) (defun tekuti-form-encode-pair (key value)
(concat (url-hexify-string key) "=" (url-hexify-string value))) (concat (url-hexify-string key) "=" (url-hexify-string value)))
@ -79,6 +93,9 @@
data data
"&")) "&"))
(defun tekuti--send-finished (status &rest _)
(message "Finished: %s" status))
;;;###autoload ;;;###autoload
(defun tekuti-send () (defun tekuti-send ()
(interactive) (interactive)
@ -87,8 +104,7 @@
(url-request-extra-headers (url-request-extra-headers
`(("Content-Type" . "application/x-www-form-urlencoded"))) `(("Content-Type" . "application/x-www-form-urlencoded")))
(url-request-data (tekuti-form-encode-data data))) (url-request-data (tekuti-form-encode-data data)))
(url-retrieve (format "%s/admin/new-post" tekuti-host) (url-retrieve (format "%s/admin/new-post" tekuti-host) #'tekuti--send-finished)))
(lambda (status &rest _) (message "Finished: %s" status)))))
(provide 'tekuti) (provide 'tekuti)
;;; tekuti.el ends here ;;; tekuti.el ends here