branch: elpa/mastodon
commit a4e8600364f6a8c08a1d121391f5d763499445af
Author: Rahguzar <rahgu...@mailbox.org>
Commit: Rahguzar <rahgu...@mailbox.org>

    Refactor data validation
---
 lisp/mastodon-http.el | 69 ++++++++++++++++++++++++---------------------------
 1 file changed, 33 insertions(+), 36 deletions(-)

diff --git a/lisp/mastodon-http.el b/lisp/mastodon-http.el
index b895032259..88f290c2ab 100644
--- a/lisp/mastodon-http.el
+++ b/lisp/mastodon-http.el
@@ -352,46 +352,43 @@ Authorization header is included by default unless 
UNAUTHENTICED-P is non-nil."
       (with-temp-buffer
         (url-retrieve url callback cbargs)))))
 
+(defun mastodon-http--get-data (status)
+  "Return data using `json-read' after a successful request.
+If STATUS includes an error emit a message describing it and return nil."
+  (let* ((buf (current-buffer))
+         (data (with-temp-buffer
+                 (url-insert buf)
+                 (goto-char (point-min))
+                 (json-read))))
+    (if-let* ((error-thrown (plist-get status :error)))
+        (prog1 nil
+          (message "%S %s" error-thrown (alist-get 'error data)))
+      data)))
+
 (defun mastodon-http--post-media-callback (status file caption buffer)
   "Callback function called after posting FILE as an attachment with CAPTION.
 The toot is being composed in BUFFER. See `url-retrieve' for STATUS."
   (unwind-protect
-      (if-let* ((error-thrown (plist-get status :error)))
-          (pcase (car (last error-thrown))
-            (401
-             (message "Got error: %S Unauthorized: The access token is invalid"
-                      error-thrown))
-            (422
-             (message "Got error: %S Unprocessable entity: file or file type 
is unsupported or invalid"
-                      error-thrown))
-            (_
-             (message "Got error: %S Shit went south"
-                      error-thrown)))
-        (let* ((buf (current-buffer))
-               (data (with-temp-buffer
-                       (url-insert buf)
-                       (goto-char (point-min))
-                       (json-read))))
-          (when data
-            (with-current-buffer buffer
-              (let ((id (alist-get 'id data)))
-                ;; update ids:
-                (if (not mastodon-toot--media-attachment-ids)
-                    ;; add first id:
-                    (push id mastodon-toot--media-attachment-ids)
-                  ;; add new id to end of list to preserve order:
-                  (push id (cdr
-                            (last mastodon-toot--media-attachment-ids))))
-                ;; pleroma, PUT the description:
-                ;; this is how the mangane akkoma web client does it
-                ;; and it seems easier than the other options!
-                (when (and caption
-                           (not (string= caption (alist-get 'description 
data))))
-                  (let ((url (mastodon-http--api (format "media/%s" id))))
-                    ;; (message "PUTting image description")
-                    (mastodon-http--put url `(("description" . ,caption)))))
-                (message "Uploading %s... (done)" file)
-                (mastodon-toot--update-status-fields))))))
+      (when-let* ((data (mastodon-http--get-data status)))
+        (with-current-buffer buffer
+          (let ((id (alist-get 'id data)))
+            ;; update ids:
+            (if (not mastodon-toot--media-attachment-ids)
+                ;; add first id:
+                (push id mastodon-toot--media-attachment-ids)
+              ;; add new id to end of list to preserve order:
+              (push id (cdr
+                        (last mastodon-toot--media-attachment-ids))))
+            ;; pleroma, PUT the description:
+            ;; this is how the mangane akkoma web client does it
+            ;; and it seems easier than the other options!
+            (when (and caption
+                       (not (string= caption (alist-get 'description data))))
+              (let ((url (mastodon-http--api (format "media/%s" id))))
+                ;; (message "PUTting image description")
+                (mastodon-http--put url `(("description" . ,caption)))))
+            (message "Uploading %s... (done)" file)
+            (mastodon-toot--update-status-fields))))
     (kill-buffer (current-buffer))))
 
 (defun mastodon-http--post-media-prep-file (filename)

Reply via email to