diff options
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/servall-client.el | 63 | ||||
-rw-r--r-- | lisp/servall-wikipedia.el | 44 |
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)) |