aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarty hiatt <martianhiatus@disroot.org>2024-10-23 21:07:43 +0200
committermarty hiatt <martianhiatus@disroot.org>2024-10-23 21:07:43 +0200
commit53bf30caab7e6076ecc8307098d6b331c8258ca5 (patch)
tree97c5804629b107c4726c68be637436357b1c4db7
parente9d9bc3a6bbe6b54772298e9fc20c2daff963916 (diff)
add mastodon-instance-data var and fun
mainly used in mastodon-transient.el to avoid pinging the server for instance data non-stop
-rw-r--r--lisp/mastodon-toot.el37
-rw-r--r--lisp/mastodon.el9
2 files changed, 28 insertions, 18 deletions
diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el
index 7440fe5..4177062 100644
--- a/lisp/mastodon-toot.el
+++ b/lisp/mastodon-toot.el
@@ -199,7 +199,7 @@ change the setting on the server, see
"A list of any media attachment ids of the toot being composed.")
(defvar-local mastodon-toot-poll nil
- "A list of poll options for the toot being composed.")
+ "A plist of poll options for the toot being composed.")
(defvar-local mastodon-toot--language nil
"The language of the toot being composed, in ISO 639 (two-letter).")
@@ -892,16 +892,18 @@ instance to edit a toot."
(endpoint (mastodon-http--api (if edit-id ; we are sending an edit:
(format "statuses/%s" edit-id)
"statuses")))
- (args-no-media (append `(("status" . ,toot)
- ("in_reply_to_id" . ,mastodon-toot--reply-to-id)
- ("visibility" . ,mastodon-toot--visibility)
- ("sensitive" . ,(when mastodon-toot--content-nsfw
- (symbol-name t)))
- ("spoiler_text" . ,mastodon-toot--content-warning)
- ("language" . ,mastodon-toot--language))
- ;; Pleroma instances can't handle null-valued
- ;; scheduled_at args, so only add if non-nil
- (when scheduled `(("scheduled_at" . ,scheduled)))))
+ (args-no-media
+ (append
+ `(("status" . ,toot)
+ ("in_reply_to_id" . ,mastodon-toot--reply-to-id)
+ ("visibility" . ,mastodon-toot--visibility)
+ ("sensitive" . ,(when mastodon-toot--content-nsfw
+ (symbol-name t)))
+ ("spoiler_text" . ,mastodon-toot--content-warning)
+ ("language" . ,mastodon-toot--language))
+ ;; Pleroma instances can't handle null-valued
+ ;; scheduled_at args, so only add if non-nil
+ (when scheduled `(("scheduled_at" . ,scheduled)))))
(args-media (when mastodon-toot--media-attachment-ids
(mastodon-http--build-array-params-alist
"media_ids[]"
@@ -1399,7 +1401,7 @@ MAX is the maximum number set by their instance."
(defun mastodon-toot--create-poll ()
"Prompt for new poll options and return as a list."
(interactive)
- (let* ((instance (mastodon-http--get-json (mastodon-http--api "instance")))
+ (let* ((instance (mastodon-instance-data))
(max-options (mastodon-toot--fetch-max-poll-options instance))
(count (mastodon-toot--read-poll-options-count max-options))
(length (mastodon-toot--fetch-max-poll-option-chars instance))
@@ -1424,12 +1426,11 @@ LENGTH is the maximum character length allowed for a poll option."
(format "Poll option [%s/%s] [max %s chars]: "
x count length))))
(longest (apply #'max (mapcar #'length choices))))
- (if (> longest length)
- (progn
- (user-error "Looks like you went over the max length. Try again")
- (sleep-for 2)
- (mastodon-toot--read-poll-options count length))
- choices)))
+ (if (not (> longest length))
+ choices
+ (user-error "Looks like you went over the max length. Try again")
+ (sleep-for 2)
+ (mastodon-toot--read-poll-options count length))))
(defun mastodon-toot--read-poll-expiry ()
"Prompt for a poll expiry time.
diff --git a/lisp/mastodon.el b/lisp/mastodon.el
index 89e2a87..8560902 100644
--- a/lisp/mastodon.el
+++ b/lisp/mastodon.el
@@ -337,6 +337,15 @@ FORCE means to fetch from the server in any case and update
;; else just return the var:
mastodon-profile-credential-account))
+(defvar mastodon-instance-data nil
+ "Instance data from the instance endpoint.")
+
+(defun mastodon-instance-data ()
+ "Return `mastodon-instnace-data' or else fetch from instance endpoint."
+ (or mastodon-instance-data
+ (setq mastodon-instance-data
+ (mastodon-http--get-json (mastodon-http--api "instance")))))
+
;;;###autoload
(defun mastodon-toot (&optional user reply-to-id reply-json)
"Update instance with new toot. Content is captured in a new buffer.