feat(tazjin/emacs): Add function for quick Songwhip lookups

Adds a function `songwhip-lookup-url` which looks up the supplied URL
on Songwhip and copies the Songwhip link if a result was found.

This is bound to `s-s w` for convenience.

Change-Id: I3b529a058ee56f992942760910822490e6324259
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2002
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
Vincent Ambo 2020-09-25 14:12:26 +01:00 committed by tazjin
parent 6bdc6c85cd
commit 48235517f6
2 changed files with 30 additions and 0 deletions

View file

@ -41,6 +41,9 @@
;; Insert TODO comments
(global-set-key (kbd "C-c t") 'insert-todo-comment)
;; Make sharing music easier
(global-set-key (kbd "s-s w") #'songwhip-lookup-url)
;; Add subthread collapsing to notmuch-show.
;;
;; C-, closes a thread, C-. opens a thread. This mirrors stepping

View file

@ -296,4 +296,31 @@
(magit-read-file-from-rev "HEAD" "Find file")
#'pop-to-buffer-same-window))
(defun songwhip--handle-result (status &optional cbargs)
;; TODO(tazjin): Inspect status, which looks different in practice
;; than the manual claims.
(if-let* ((response (json-parse-string
(buffer-substring url-http-end-of-headers (point-max))))
(sw-path (ht-get* response "data" "path"))
(link (format "https://songwhip.com/%s" sw-path))
(select-enable-clipboard t))
(progn
(kill-new link)
(message "Copied Songwhip link (%s)" link))
(warn "Something went wrong while retrieving Songwhip link!")
;; For debug purposes, the buffer is persisted in this case.
(setq songwhip--debug-buffer (current-buffer))))
(defun songwhip-lookup-url (url)
"Look up URL on Songwhip and copy the resulting link to the clipboard."
(interactive "sEnter source URL: ")
(let ((songwhip-url "https://songwhip.com/api/")
(url-request-method "POST")
(url-request-extra-headers '(("Content-Type" . "application/json")))
(url-request-data
(json-serialize `((country . "GB")
(url . ,url)))))
(url-retrieve "https://songwhip.com/api/" #'songwhip--handle-result nil t t)
(message "Requesting Songwhip URL ... please hold the line.")))
(provide 'functions)