aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarty hiatt <martianhiatus [a t] riseup [d o t] net>2022-11-05 10:40:26 +0100
committermarty hiatt <martianhiatus [a t] riseup [d o t] net>2022-11-05 10:40:26 +0100
commit40cf1038e386cfe62cfcc81234794b3a13102176 (patch)
treefbfa46465b9adeef825f8e612fd593d316c39aee
parenta7fa1f599630aa0f49e8d0a91d400c6f267622f1 (diff)
add headers arg to http--process-json and --get-json-async
-rw-r--r--lisp/mastodon-http.el17
-rw-r--r--lisp/mastodon-profile.el3
-rw-r--r--lisp/mastodon-tl.el11
-rw-r--r--lisp/mastodon-toot.el5
4 files changed, 24 insertions, 12 deletions
diff --git a/lisp/mastodon-http.el b/lisp/mastodon-http.el
index e3efabe..46a6398 100644
--- a/lisp/mastodon-http.el
+++ b/lisp/mastodon-http.el
@@ -154,10 +154,19 @@ SILENT means don't message."
(with-current-buffer (mastodon-http--get url silent)
(mastodon-http--process-json)))
-(defun mastodon-http--process-json ()
+(defun mastodon-http--process-json (&optional headers)
"Process JSON response."
;; view raw response:
- ;; (switch-to-buffer (current-buffer))
+ (switch-to-buffer (current-buffer))
+ (when headers
+ (let* ((head-str (buffer-substring-no-properties
+ (point-min)
+ (re-search-forward "^$" nil 'move)))
+ (head-list (split-string head-str "\n"))
+ (head-alist (mapcar (lambda (x)
+ (split-string x ": "))
+ head-list)))
+ (setq mastodon-http-headers-alist head-alist)))
(goto-char (point-min))
(re-search-forward "^$" nil 'move)
(let ((json-string
@@ -241,13 +250,13 @@ Pass response buffer to CALLBACK function with args CBARGS."
"GET"
(url-retrieve url callback cbargs)))
-(defun mastodon-http--get-json-async (url &optional callback &rest args)
+(defun mastodon-http--get-json-async (url &optional headers callback &rest args)
"Make GET request to URL. Call CALLBACK with json-vector and ARGS."
(mastodon-http--get-async
url
(lambda (status)
(when status ;; only when we actually get sth?
- (apply callback (mastodon-http--process-json) args)))))
+ (apply callback (mastodon-http--process-json headers) args)))))
(defun mastodon-http--post-async (url args headers &optional callback &rest cbargs)
"POST asynchronously to URL with ARGS and HEADERS.
diff --git a/lisp/mastodon-profile.el b/lisp/mastodon-profile.el
index 2e4807c..ebd1b37 100644
--- a/lisp/mastodon-profile.el
+++ b/lisp/mastodon-profile.el
@@ -183,7 +183,8 @@ contains")
(message "Loading your favourited toots...")
(mastodon-tl--init "favourites"
"favourites"
- 'mastodon-tl--timeline))
+ 'mastodon-tl--timeline
+ :headers))
(defun mastodon-profile--view-bookmarks ()
"Open a new buffer displaying the user's bookmarks."
diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el
index 1986979..a9c8b39 100644
--- a/lisp/mastodon-tl.el
+++ b/lisp/mastodon-tl.el
@@ -1139,7 +1139,7 @@ Then run CALLBACK with arguments CBARGS."
"?")
"max_id="
(mastodon-tl--as-string id)))))
- (apply 'mastodon-http--get-json-async url callback cbargs)))
+ (apply 'mastodon-http--get-json-async url nil callback cbargs)))
;; TODO
;; Look into the JSON returned here by Local
@@ -1907,14 +1907,15 @@ from the start if it is nil."
(goto-char (or mastodon-tl--update-point (point-min)))
(funcall update-function json)))))
-(defun mastodon-tl--init (buffer-name endpoint update-function)
+(defun mastodon-tl--init (buffer-name endpoint update-function &optional headers)
"Initialize BUFFER-NAME with timeline targeted by ENDPOINT asynchronously.
-
-UPDATE-FUNCTION is used to recieve more toots."
+UPDATE-FUNCTION is used to recieve more toots.
+HEADERS means to also collect the response headers. Used for paginating
+favourites."
(let ((url (mastodon-http--api endpoint))
(buffer (concat "*mastodon-" buffer-name "*")))
(mastodon-http--get-json-async
- url 'mastodon-tl--init* buffer endpoint update-function)))
+ url headers 'mastodon-tl--init* buffer endpoint update-function)))
(defun mastodon-tl--init* (json buffer endpoint update-function)
"Initialize BUFFER with timeline targeted by ENDPOINT.
diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el
index 44386f7..25446ef 100644
--- a/lisp/mastodon-toot.el
+++ b/lisp/mastodon-toot.el
@@ -203,12 +203,13 @@ send.")
nil t)))
(mastodon-profile--update-preference "privacy" vis :source)))
-(defun mastodon-toot--get-max-toot-chars (&optional _no-toot)
+(defun mastodon-toot--get-max-toot-chars (&optional no-toot)
"Fetch max_toot_chars from `mastodon-instance-url' asynchronously.
NO-TOOT means we are not calling from a toot buffer."
(mastodon-http--get-json-async
(mastodon-http--api "instance")
- 'mastodon-toot--get-max-toot-chars-callback 'no-toot))
+ nil
+ 'mastodon-toot--get-max-toot-chars-callback no-toot))
(defun mastodon-toot--get-max-toot-chars-callback (json-response
&optional no-toot)