diff options
| author | marty hiatt <martianhiatus@riseup.net> | 2024-08-02 21:31:59 +0200 | 
|---|---|---|
| committer | marty hiatt <martianhiatus@riseup.net> | 2024-08-03 09:55:11 +0200 | 
| commit | 6dda2522d2a5ea57f88898e0f043760e68c7309d (patch) | |
| tree | 1cb07fd6b539f257b3f429f7cbb7b701058a02a6 /lisp | |
| parent | 731f7b5295e7169f51b2cebf767bb3acefbcda96 (diff) | |
toot: attach-media: get max attachments from instance, y-or-n-p
views: get-own-instance (for max attachs)
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/mastodon-toot.el | 47 | ||||
| -rw-r--r-- | lisp/mastodon-views.el | 8 | 
2 files changed, 35 insertions, 20 deletions
diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el index 277b9c4..f7799c2 100644 --- a/lisp/mastodon-toot.el +++ b/lisp/mastodon-toot.el @@ -97,6 +97,7 @@  (autoload 'mastodon-tl--get-buffer-type "mastodon-tl")  (autoload 'mastodon-tl--human-duration "mastodon-tl")  (autoload 'mastodon-profile--get-preferences-pref "mastodon-profile") +(autoload 'mastodon-views--get-own-instance "mastodon-views")  ;; for mastodon-toot--translate-toot-text  (autoload 'mastodon-tl--content "mastodon-tl") @@ -1245,33 +1246,43 @@ Return its two letter ISO 639 1 code."    (mastodon-toot--refresh-attachments-display)    (mastodon-toot--update-status-fields)) +(defun mastodon-toot--get-instance-max-attachments () +  "Return the maximum attachments from `mastodon-active-user's instance." +  ;; FIXME: this likely various for other server types: +  (let ((config (alist-get 'statuses +                           (alist-get 'configuration +                                      (mastodon-views--get-own-instance))))) +    (alist-get 'max_media_attachments config))) +  (defun mastodon-toot--attach-media (file description)    "Prompt for an attachment FILE with DESCRIPTION.  A preview is displayed in the new toot buffer, and the file  is uploaded asynchronously using `mastodon-toot--upload-attached-media'.  File is actually attached to the toot upon posting."    (interactive "fFilename: \nsDescription: ") -  (when (>= (length mastodon-toot--media-attachments) 4) -    ;; Only a max. of 4 attachments are allowed, so pop the oldest one. -    (pop mastodon-toot--media-attachments)) -  (if (file-directory-p file) -      (user-error "Looks like you chose a directory not a file") -    (setq mastodon-toot--media-attachments -          (nconc mastodon-toot--media-attachments -                 `(((:contents . ,(mastodon-http--read-file-as-string file)) -                    (:description . ,description) -                    (:filename . ,file))))) -    (mastodon-toot--refresh-attachments-display) -    ;; upload only most recent attachment: -    (mastodon-toot--upload-attached-media -     (car (last mastodon-toot--media-attachments))))) +  (let ((max-attachments (mastodon-toot--get-instance-max-attachments))) +    (when (>= (length mastodon-toot--media-attachments) +              (or max-attachments 4)) +      ;; warn + pop the oldest one: +      (when (y-or-n-p +             (format "Maximum attachments (%s) reached: remove first one?" +                     max-attachments)) +        (pop mastodon-toot--media-attachments))) +    (if (file-directory-p file) +        (user-error "Looks like you chose a directory not a file") +      (setq mastodon-toot--media-attachments +            (nconc mastodon-toot--media-attachments +                   `(((:contents . ,(mastodon-http--read-file-as-string file)) +                      (:description . ,description) +                      (:filename . ,file))))) +      (mastodon-toot--refresh-attachments-display) +      ;; upload only most recent attachment: +      (mastodon-toot--upload-attached-media +       (car (last mastodon-toot--media-attachments))))))  (defun mastodon-toot--attachment-descriptions ()    "Return a list of image descriptions for current attachments." -  (mastodon-tl--map-alist :description -                          ;; (mapcar (lambda (a) -                          ;; (alist-get :description a)) -                          mastodon-toot--media-attachments)) +  (mastodon-tl--map-alist :description mastodon-toot--media-attachments))  (defun mastodon-toot--attachment-from-desc (desc)    "Return an attachment based on its description DESC." diff --git a/lisp/mastodon-views.el b/lisp/mastodon-views.el index 775b96b..e956ccd 100644 --- a/lisp/mastodon-views.el +++ b/lisp/mastodon-views.el @@ -738,6 +738,11 @@ If INSTANCE is given, use that."           (string-remove-suffix (concat "/@" username)                                 url)))) +(defun mastodon-views--get-own-instance () +  "Return JSON of `mastodon-active-user's instance." +  (mastodon-http--get-json +   (mastodon-http--api "instance" "v2") nil nil :vector)) +  (defun mastodon-views--view-instance-description      (&optional user brief instance misskey)    "View the details of the instance the current post's author is on. @@ -747,8 +752,7 @@ INSTANCE is an instance domain name.  MISSKEY means the instance is a Misskey or derived server."    (interactive)    (if user -      (let ((response (mastodon-http--get-json -                       (mastodon-http--api "instance" "v2") nil nil :vector))) +      (let ((response (mastodon-views--get-own-instance)))          (mastodon-views--instance-response-fun response brief instance))      (mastodon-tl--do-if-item       (let* ((toot (if (mastodon-tl--profile-buffer-p)  | 
