aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wiki-engine.el46
-rw-r--r--wiki-utils.el4
2 files changed, 39 insertions, 11 deletions
diff --git a/wiki-engine.el b/wiki-engine.el
index b82b9aa..fb48994 100644
--- a/wiki-engine.el
+++ b/wiki-engine.el
@@ -37,15 +37,20 @@ The site name is passed as a symbol WIKI-SITE."
(let ((wiki-site-info (alist-get wiki-site wiki-sites)))
(cl-assert (eq (plist-get wiki-site-info :engine) 'mediawiki))
(when (string-empty-p title) (setq title "Main Page"))
- (wiki-fetch-url
- (format "%s%s?action=raw"
- (plist-get wiki-site-info :base-url)
- title)
- (lambda ()
- (wiki-mode)
- (setq-local wiki-site wiki-site)
- )
- )))
+ (unless (and wiki-fetch-prefer-local
+ (wiki-local-find-file
+ title
+ (wiki-locate-dir wiki-site)))
+ (wiki-fetch-url
+ (format "%s%s?action=raw"
+ (plist-get wiki-site-info :base-url)
+ title)
+ (wiki-locate-dir wiki-site)
+ (lambda ()
+ (wiki-mode)
+ (setq-local wiki-site wiki-site)
+ )
+ ))))
(defun wiki-engine-oddmuse-fetch (wiki-site title)
(let ((wiki-site-info (alist-get wiki-site wiki-sites)))
@@ -54,6 +59,7 @@ The site name is passed as a symbol WIKI-SITE."
(format "%s?action=download;id=%s"
(plist-get wiki-site-info :base-url)
title)
+ (wiki-locate-dir wiki-site)
(lambda ()
(wiki-mode)
(setq-local wiki-site wiki-site)
@@ -67,12 +73,34 @@ The site name is passed as a symbol WIKI-SITE."
(format "%s%s?action=raw"
(plist-get wiki-site-info :base-url)
title)
+ (wiki-locate-dir wiki-site)
(lambda ()
(wiki-mode)
(setq-local wiki-site wiki-site)
)
title)))
+(defun wiki-locate-dir (wiki-site)
+ "Locate the directory for a WIKI-SITE."
+ (expand-file-name (format "%s" wiki-site) wiki-local-dir))
+
+(defun wiki-local-find-file (title &optional dir create-if-not-exists
+ extension)
+ "Find local TITLE in DIR.
+
+Returns the file-name if success, and nil otherwise. If
+CREATE-IF-NOT-EXISTS is non-nil, creates the file is not found.
+DIR defaults to `default-directory'."
+ (unless dir (setq dir default-directory))
+ (let ((file-name (expand-file-name
+ (if extension
+ (file-name-extension title extension)
+ title)
+ dir)))
+ (when (or (file-exists-p file-name) create-if-not-exists)
+ (find-file file-name)
+ file-name)))
+
(defun wiki-engine-fetcher (wiki-site-info)
(intern (format "wiki-engine-%s-fetch"
(plist-get wiki-site-info :engine))))
diff --git a/wiki-utils.el b/wiki-utils.el
index 5b66075..c2500a4 100644
--- a/wiki-utils.el
+++ b/wiki-utils.el
@@ -34,14 +34,14 @@
"If non-nil, visit the local file if exists when instructed for
fetching.")
-(defun wiki-fetch-url (url &optional callback title)
+(defun wiki-fetch-url (url dir &optional callback title)
"Fetch URL asynchronously.
Then calls CALLBACK which is a closure taking no argument."
(interactive "sURL: ")
(let ((file-name (expand-file-name
(or title (wiki-make-file-name-from-url url))
- wiki-download-dir))
+ dir))
(cb (lambda (status file-name)
(wiki-fetch-url-save-and-switch status file-name)
(when callback (funcall callback)))))