summaryrefslogtreecommitdiff
path: root/lisp/servall-ytdl.el
blob: 426333bd6e6e79a38922cd215ef1c1fe4812f842 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
;; -*- lexical-binding: t; -*-
(require 'servall-client)
(require 'servall-results)

;; 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))))

(provide 'servall-ytdl)