summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2022-09-13 12:04:28 +1000
committerYuchen Pei <hi@ypei.me>2022-09-13 12:04:28 +1000
commit0badf7a7160e297b04bf198d23e890bce2629a57 (patch)
treead3a783921b0254cd2a4e45a4b3c9f7e09904960 /lisp
parent93928f9212d340992050e2adcbdd5d51114e7d1e (diff)
added ytdl search
Diffstat (limited to 'lisp')
-rw-r--r--lisp/servall-client.el63
-rw-r--r--lisp/servall-wikipedia.el44
2 files changed, 81 insertions, 26 deletions
diff --git a/lisp/servall-client.el b/lisp/servall-client.el
index 80376e7..cb01aed 100644
--- a/lisp/servall-client.el
+++ b/lisp/servall-client.el
@@ -1,5 +1,3 @@
-;; -*- lexical-binding: t; -*-
-
(defvar servall-endpoint "localhost:5555")
(defvar servall-client-buffer-name "*servall-client*")
@@ -7,6 +5,10 @@
(servall-url-fetch-json
(concat servall-endpoint "/wikipedia/search/" query)))
+(defun servall-api-ytdl-search (query cb)
+ (servall-url-fetch-json-async
+ (concat servall-endpoint "/ytdl/search/" query) cb))
+
(defun servall-api-wikipedia-org (name)
(servall-url-fetch-json
(concat servall-endpoint "/wikipedia/org/" name)))
@@ -27,27 +29,40 @@
(goto-char (point-max))
(insert "[" (current-time-string) "] Request: " url "\n"))
(with-current-buffer (url-retrieve-synchronously url t)
- (let ((header) (status) (fields) (json))
- (delete-http-header)
- (setq header (servall-parse-http-header (car kill-ring))
- status (alist-get 'status header)
- fields (alist-get 'fields header))
- (with-current-buffer servall-client-buffer-name
- (insert "[" (current-time-string) "] Response: " status "\n"))
- (when decompression
- (call-process-region (point) (point-max) "gunzip" t t t)
- (goto-char (point-min)))
- (call-interactively 'delete-trailing-whitespace)
- (if (string= status "200")
- (unless (= (point) (point-max))
- (setq json (json-read-from-string
- (decode-coding-string
- (buffer-string) 'utf-8)))
- (if with-header
- (list
- (cons 'header fields)
- (cons 'json json))
- json))
- (error "HTTP error: %s" (buffer-substring (point) (point-max)))))))
+ (servall-url-fetch-json-callback nil nil decompression with-header)))
+
+(defun servall-url-fetch-json-async (url cb &optional decompression with-header)
+ (with-current-buffer (get-buffer-create servall-client-buffer-name)
+ (goto-char (point-max))
+ (insert "[" (current-time-string) "] Request: " url "\n"))
+ (url-retrieve url 'servall-url-fetch-json-callback
+ (list cb decompression with-header) t))
+
+(defun servall-url-fetch-json-callback (unused cb decompression with-header)
+ (let ((header) (status) (fields) (json) (result))
+ (delete-http-header)
+ (setq header (servall-parse-http-header (car kill-ring))
+ status (alist-get 'status header)
+ fields (alist-get 'fields header))
+ (with-current-buffer servall-client-buffer-name
+ (insert "[" (current-time-string) "] Response: " status "\n"))
+ (when decompression
+ (call-process-region (point) (point-max) "gunzip" t t t)
+ (goto-char (point-min)))
+ (call-interactively 'delete-trailing-whitespace)
+ (if (string= status "200")
+ (unless (= (point) (point-max))
+ (setq json (json-read-from-string
+ (decode-coding-string
+ (buffer-string) 'utf-8)))
+ (setq result
+ (if with-header
+ (list
+ (cons 'header fields)
+ (cons 'json json))
+ json)))
+ (error "HTTP error: %s" (buffer-substring (point) (point-max))))
+ (if cb (funcall cb result)
+ result)))
(provide 'servall-client)
diff --git a/lisp/servall-wikipedia.el b/lisp/servall-wikipedia.el
index 309381b..aebfeb9 100644
--- a/lisp/servall-wikipedia.el
+++ b/lisp/servall-wikipedia.el
@@ -19,9 +19,12 @@
servall-results-re-search-function nil
servall-results-open-function nil))
-(defun servall-results-update ()
+(defun servall-results-update (&optional cb)
(interactive)
- (funcall servall-results-update-function))
+ ;; assuming the update function takes a cb iff cb is nonnil.
+ (if cb
+ (funcall servall-results-update-function cb)
+ (funcall servall-results-update-function)))
(defun servall-results-re-search ()
(interactive)
@@ -31,7 +34,43 @@
(interactive)
(funcall servall-results-open-function))
+;; ytdl results
+(define-derived-mode servall-ytdl-results-mode servall-results-mode
+ "servall-ytdl-results"
+ "Mode for showing and selecting ytdl results"
+ (setq-local servall-ytdl-results-query nil))
+(defun servall-ytdl-search (query)
+ (interactive "sYtdl Query: ")
+ (with-current-buffer (get-buffer-create servall-results-buffer)
+ (servall-ytdl-results-mode)
+ (setq servall-ytdl-results-query query
+ servall-results-update-function 'servall-ytdl-results-update
+ servall-results-re-search-function 'servall-ytdl-search
+ servall-results-open-function 'servall-ytdl-results-open)
+ (servall-results-update (lambda ()
+ (switch-to-buffer servall-results-buffer)))))
+
+(defun servall-ytdl-results-update (cb)
+ (servall-api-ytdl-search
+ servall-ytdl-results-query
+ (lambda (results)
+ (with-current-buffer (get-buffer-create servall-results-buffer)
+ (let* ((inhibit-read-only t))
+ (erase-buffer)
+ (mapc
+ (lambda (result)
+ (let ((title (alist-get 'title result)))
+ (insert
+ (propertize
+ (concat "* " title "\n")
+ 'title title))
+ (insert (alist-get 'description result) "\n\n")))
+ results)
+ (goto-char (point-min))))
+ (funcall cb))))
+
+;; wikipedia results
(define-derived-mode servall-wikipedia-results-mode servall-results-mode
"servall-wikipedia-results"
"Mode for showing and selecting wikipedia results"
@@ -80,6 +119,7 @@
(defun servall-wikipedia-to-name (title)
(replace-regexp-in-string " " "_" title))
+;; wikipedia view
(defvar servall-wikipedia-view-mode-map
(let ((map (make-sparse-keymap)))
(setq map (copy-keymap special-mode-map))