[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/kiwix 792215ed10 07/15: Support new upgraded kiwix-serv
From: |
ELPA Syncer |
Subject: |
[elpa] externals/kiwix 792215ed10 07/15: Support new upgraded kiwix-serve index API |
Date: |
Wed, 7 Dec 2022 19:58:02 -0500 (EST) |
branch: externals/kiwix
commit 792215ed10bb9e5bf1713926f046adc08b14c018
Author: stardiviner <numbchild@gmail.com>
Commit: stardiviner <numbchild@gmail.com>
Support new upgraded kiwix-serve index API
The kiwix-serve version 3.2.0 changed kiwix libraries retrieve method.
---
kiwix.el | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 91 insertions(+), 6 deletions(-)
diff --git a/kiwix.el b/kiwix.el
index 67b232a726..2cd9f6f4da 100644
--- a/kiwix.el
+++ b/kiwix.el
@@ -93,6 +93,13 @@
(const :tag "Local Docker Service" docker-local)
(const :tag "Local kiwix-serve Service" kiwix-serve-local)))
+(defcustom kiwix-server-api-version "v2"
+ "The kiwix-serve homepage API version.
+- 3.1.0 :: v1
+- 3.2.0 :: v2"
+ :type 'string
+ :safe #'stringp)
+
(defcustom kiwix-server-url "http://127.0.0.1"
"Specify Kiwix server URL."
:type 'string
@@ -150,8 +157,72 @@ Set it to ‘t’ will use Emacs built-in ‘completing-read’."
(defun kiwix-get-libraries ()
"Check out all available Kiwix libraries."
(cond
+ ((and (eq kiwix-server-type 'docker-remote) (string-equal
kiwix-server-api-version "v2"))
+ (let ((url (format "%s:%s/catalog/search" kiwix-server-url
kiwix-server-port)))
+ (request url
+ :type "GET"
+ :sync t
+ :parser (lambda ()
+ (if (libxml-available-p)
+ (let ((xml-data (libxml-parse-xml-region (point-min)
(point-max))))
+ (setq kiwix-libraries
+ (remove-if 'null
+ (mapcar
+ (lambda (cons)
+ (when (and (listp cons) (eq (car
cons) 'entry))
+ (let* ((entry-xml cons)
+ (title (caddr (assq
'title entry-xml))) ; "title"
+ (link_thumbnail (assq
'href (cadr (assq 'link entry-xml))))
+ (link_url_path (cdr
+ (assq
'href
+
(cadr
+
(seq-find
+
(lambda (element)
+
(if (and (listp element) (eq (car element) 'link))
+
(if (string-equal (cdr (assq 'type (cadr element))) "text/html")
+
element)))
+
entry-xml))))))
+ (string-trim-left
link_url_path "/"))))
+ xml-data))))))
+ :error (cl-function
+ (lambda (&rest args &key error-thrown &allow-other-keys)
+ (message "Function kiwix-get-libraries error.")))
+ :success (cl-function
+ (lambda (&key _data &allow-other-keys)
+ _data))
+ :status-code '((404 . (lambda (&rest _) (message (format "Endpoint %s
does not exist." url))))
+ (500 . (lambda (&rest _) (message (format "Error from
%s." url))))))))
+
+ ((and (eq kiwix-server-type 'docker-remote) (string-equal
kiwix-server-api-version "v2"))
+ (let ((url (format "%s:%s/catalog/v2/categories" kiwix-server-url
kiwix-server-port)))
+ (request url
+ :type "GET"
+ :sync t
+ :parser (lambda ()
+ (if (libxml-available-p)
+ (let ((xml-data (libxml-parse-xml-region (point-min)
(point-max))))
+ (setq kiwix-libraries
+ (remove-if 'null
+ (mapcar
+ (lambda (cons)
+ (when (and (listp cons) (eq (car
cons) 'entry))
+ (let* ((entry cons)
+ (title (caddr (assq
'title entry))) ; "title"
+ (link (assq 'href (cadr
(assq 'link cons)))) ; "/catalog/v2/entries?category=stack_exchange"
+ )
+ title)))
+ xml-data))))))
+ :error (cl-function
+ (lambda (&rest args &key error-thrown &allow-other-keys)
+ (message "Function kiwix-get-libraries error.")))
+ :success (cl-function
+ (lambda (&key _data &allow-other-keys)
+ _data))
+ :status-code '((404 . (lambda (&rest _) (message (format "Endpoint %s
does not exist." url))))
+ (500 . (lambda (&rest _) (message (format "Error from
%s." url))))))))
+
;; ZIM library files on remote Docker server, parse index HTML page.
- ((eq kiwix-server-type 'docker-remote)
+ ((and (eq kiwix-server-type 'docker-remote) (string-equal
kiwix-server-api-version "v1"))
(let ((url (format "%s:%s" kiwix-server-url kiwix-server-port)))
(request url
:type "GET"
@@ -262,11 +333,25 @@ Set it to ‘t’ will use Emacs built-in ‘completing-read’."
(defun kiwix-query (query &optional selected-library)
"Search `QUERY' in `LIBRARY' with Kiwix."
- (let* ((library (or selected-library (kiwix--get-library-name
selected-library)))
- (url (concat (format "%s:%s" kiwix-server-url kiwix-server-port)
- "/search?content=" library "&pattern="
(url-hexify-string query)))
- (browse-url-browser-function kiwix-default-browser-function))
- (browse-url url)))
+ (cond
+ ((and (eq kiwix-server-type 'docker-remote) (string-equal
kiwix-server-api-version "v2"))
+ (let* ((library (or selected-library (kiwix--get-library-name
selected-library)))
+ (url (concat (format "%s:%s" kiwix-server-url kiwix-server-port)
+ "/" library "/A/" (url-hexify-string query)))
+ (browse-url-browser-function kiwix-default-browser-function))
+ (browse-url url)))
+ ((and (eq kiwix-server-type 'docker-remote) (string-equal
kiwix-server-api-version "v1"))
+ (let* ((library (or selected-library (kiwix--get-library-name
selected-library)))
+ (url (concat (format "%s:%s" kiwix-server-url kiwix-server-port)
+ "/search?content=" library "&pattern="
(url-hexify-string query)))
+ (browse-url-browser-function kiwix-default-browser-function))
+ (browse-url url)))
+ (t
+ (let* ((library (or selected-library (kiwix--get-library-name
selected-library)))
+ (url (concat (format "%s:%s" kiwix-server-url kiwix-server-port)
+ "/search?content=" library "&pattern="
(url-hexify-string query)))
+ (browse-url-browser-function kiwix-default-browser-function))
+ (browse-url url)))))
(defun kiwix-docker-check ()
"Make sure Docker image 'kiwix/kiwix-server' is available."
- [elpa] externals/kiwix updated (cb843349c1 -> 444f686a7f), ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix 792215ed10 07/15: Support new upgraded kiwix-serve index API,
ELPA Syncer <=
- [elpa] externals/kiwix 7dd18df6f8 03/15: kiwix search keywords async completion read with vertico and consult support, ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix e20c67854b 05/15: Update extension description., ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix d21cbe30d6 06/15: Update library homepage, ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix 4f683e87b2 12/15: Get the complete thumbnail image URL, ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix 99c4663b6a 11/15: Add API URL scheme example comments., ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix 444f686a7f 15/15: Display kiwix library thumbnail URL image in vertico candidates., ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix 6afdefeed3 01/15: Don't need .html in URL constructor now., ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix 1645c5b659 04/15: kiwix search keywords async completion read with Helm support, ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix 9c5d9cf558 08/15: Add missing URL parameters to retrieve complete available ZIM libraries., ELPA Syncer, 2022/12/07
- [elpa] externals/kiwix 5892fff779 02/15: Add missing kiwix server port in `org-kiwix-open-link' function, ELPA Syncer, 2022/12/07