diff options
Diffstat (limited to 'lisp/mastodon-http.el')
-rw-r--r-- | lisp/mastodon-http.el | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/lisp/mastodon-http.el b/lisp/mastodon-http.el index acfda8f..f8cb60d 100644 --- a/lisp/mastodon-http.el +++ b/lisp/mastodon-http.el @@ -21,39 +21,52 @@ Response buffer is passed to the CALLBACK function." (url-retrieve url callback))) (defun mastodon--response-buffer () + "Capture response buffer content as string." (with-current-buffer (current-buffer) (buffer-substring-no-properties (point-min) (point-max)))) (defun mastodon--response-body-substring (pattern) + "Returns substring matching PATTERN from `mastodon--response-buffer'." (let ((resp (mastodon--response-buffer))) (progn (string-match pattern resp) (match-string 0 resp)))) (defun mastodon--response-match-p (pattern) + "Returns non-nil if `mastodon--response-buffer' matches PATTERN." (let ((resp (mastodon--response-buffer))) (string-match-p pattern resp))) (defun mastodon--response-status-p () + "Returns non-nil if `mastodon--response-buffer' has an HTTP Response Status-Line." (when (mastodon--response-match-p "^HTTP/1.*$") t)) (defun mastodon--response-json () - (mastodon--response-body-substring "\{.*\}")) + "Returns string of JSON response body from `mastodon--response-buffer'." + (mastodon--response-body-substring "\{.*\}")) (defun mastodon--response-code () + "Returns HTTP Response Status Code from `mastodon--response-buffer'." (let* ((status-line (mastodon--response-body-substring "^HTTP/1.*$"))) - (progn - (string-match "[0-9][0-9][0-9]" status-line) - (match-string 0 status-line)))) + (progn + (string-match "[0-9][0-9][0-9]" status-line) + (match-string 0 status-line)))) (defun mastodon--json-hash-table () - "Reads JSON string from `mastodon--response-json' into a hash table." + "Reads JSON from `mastodon--response-json' into a hash table." (let ((json-object-type 'hash-table) (json-array-type 'list) (json-key-type 'string)) (json-read-from-string (mastodon--response-json)))) (defun mastodon--http-response-triage (status success) + "Callback function to triage an HTTP response. + +Recursively waits for `mastodon--response-buffer' to contain a Status-Line. + +STATUS is passed by `url-retrieve'. +SUCCESS is a function called on a 2XX level response code. +If response code is not 2XX, switches to the response buffer created by `url-retrieve'." (when (not (mastodon--response-status-p)) (mastodon--http-response-triage status)) (if (string-prefix-p "2" (mastodon--response-code)) |