emacs-config/lisp/org-config/org-board-custom-dispatcher.el
2024-12-28 13:29:08 -06:00

65 lines
2.6 KiB
EmacsLisp

(require 'org-board)
(defun org-board-archive-dry-run ()
"Archive the URL given by the current entry's `URL' property.
The attachment directory and the unique ID are created if not
already present. See the docstring of `org-attach-dir'.
Every snapshot is stored in its own timestamped folder, and is
added as a link in the `ARCHIVED_AT' property."
(interactive)
(org-board-expand-regexp-alist)
(let* ((attach-directory (file-name-as-directory (make-temp-name "/tmp/org-board-")))
(urls (org-entry-get-multivalued-property (point) org-board-property))
(options
(org-board-options-handler
(org-entry-get-multivalued-property (point) "WGET_OPTIONS")))
(timestamp (org-board-make-timestamp))
(output-directory (concat (file-name-as-directory attach-directory)
(file-name-as-directory timestamp)))
(org-id-token (org-id-get))
(link-to-output (if (not org-board-make-relative)
(concat "[[file:" output-directory "]["
timestamp "]]")
(concat "[[file:" (file-relative-name output-directory)"][" timestamp "]]"))))
(make-directory attach-directory)
(org-board-wget-call org-board-wget-program
output-directory
options
urls)))
(defvar youtube-dl-binary
(executable-find "yt-dlp"))
(defun org-board-dispatch-special (orig path directory args site)
(cond
((and
(= (length site) 1)
(string-match-p "youtube" (car site)))
(message "Invoking custom youtube-dl dispatcher!")
(make-directory directory)
(let ((default-directory directory))
(start-process "org-board-youtube-dl" "*org-board-youtube-dl*" youtube-dl-binary
"-f 135+140" (car site))))
((and
(= (length site) 1)
(string-match-p "reddit" (car site)))
(message "Invoking custom reddit dispatcher!")
(make-directory directory)
(let ((default-directory directory))
(start-process "org-board-reddit-archive" "*org-board-reddit-archive*"
(executable-find "python3")
"/home/benson/RedditArchiver-standalone/RedditArchiver.py"
"-c"
"/home/benson/RedditArchiver-standalone/config.yaml"
"-i"
(car site))))
(t (apply orig path directory args (list site)))))
(advice-add #'org-board-wget-call
:around
#'org-board-dispatch-special)
(provide 'org-board-custom-dispatcher)