aboutsummaryrefslogtreecommitdiff
path: root/lisp/mastodon-toot.el
diff options
context:
space:
mode:
authormousebot <mousebot@riseup.net>2021-12-16 16:09:35 +0100
committermousebot <mousebot@riseup.net>2021-12-16 16:09:35 +0100
commitc06776ba115c561ddb23fd9887aad1c19c5b960a (patch)
treeb11357c0809f2a578541f09a1fa1bea8f031e7db /lisp/mastodon-toot.el
parentdd9ef80d940655bb24958d3c48a86aad45cefa43 (diff)
parent7653aacf64214fdaf376f4a5b8c7327116da6a90 (diff)
Merge branch 'develop' into echo-faves-in-thread
Diffstat (limited to 'lisp/mastodon-toot.el')
-rw-r--r--lisp/mastodon-toot.el72
1 files changed, 40 insertions, 32 deletions
diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el
index 885db1d..8d2df60 100644
--- a/lisp/mastodon-toot.el
+++ b/lisp/mastodon-toot.el
@@ -106,6 +106,11 @@ This is only used if company mode is installed."
(const :tag "following only" "following")
(const :tag "all users" "all")))
+(defcustom mastodon-toot--enable-custom-instance-emoji nil
+ "Whether to enable your instance's custom emoji by default."
+ :group 'mastodon-toot
+ :type 'boolean)
+
(defvar-local mastodon-toot--content-warning nil
"A flag whether the toot should be marked with a content warning.")
@@ -446,10 +451,8 @@ to `emojify-user-emojis', and the emoji data is updated."
(defun mastodon-toot--send ()
"POST contents of new-toot buffer to Mastodon instance and kill buffer.
-If media items have been attached with
-`mastodon-toot--attach-media', upload them with
-`mastodon-toot-upload-attached-media' and attach them to the
-toot."
+If media items have been attached and uploaded with
+`mastodon-toot--attach-media', they are attached to the toot."
(interactive)
(let* ((toot (mastodon-toot--remove-docs))
(empty-toot-p (and (not mastodon-toot--media-attachments)
@@ -465,10 +468,14 @@ toot."
(symbol-name t)))
("spoiler_text" . ,spoiler)))
(args-media (when mastodon-toot--media-attachments
- (mastodon-toot--upload-attached-media) ; sync upload so we wait (and pray) till done
- (mapcar (lambda (id)
- (cons "media_ids[]" id))
- mastodon-toot--media-attachment-ids)))
+ (if (= (length mastodon-toot--media-attachments)
+ (length mastodon-toot--media-attachment-ids))
+ ;; (mastodon-toot--upload-attached-media)
+ ;; moved upload to mastodon-toot--attach-media
+ (mapcar (lambda (id)
+ (cons "media_ids[]" id))
+ mastodon-toot--media-attachment-ids)
+ (message "Looks like something went wrong with your uploads. Maybe you want to try again."))))
(args (append args-media args-no-media)))
(if (> (length toot) (string-to-number mastodon-toot--max-toot-chars))
(message "Looks like your toot is longer than that maximum allowed length.")
@@ -519,10 +526,11 @@ eg. \"feduser@fed.social\" -> \"feduser@fed.social\"."
(defun mastodon-toot--mentions-company-candidates (prefix)
"Given a company PREFIX query, build a list of candidates.
The prefix can match against both user handles and display names."
- (let (res)
+ (let ((prefix (substring prefix 1)) ;remove @ for search
+ (res))
(dolist (item (mastodon-search--search-accounts-query prefix))
- (when (or (string-prefix-p prefix (cadr item))
- (string-prefix-p prefix (car item)))
+ (when (or (string-prefix-p prefix (substring (cadr item) 1) t)
+ (string-prefix-p prefix (car item) t))
(push (mastodon-toot--mentions-company-make-candidate item) res)))
res))
@@ -533,11 +541,11 @@ The prefix can match against both user handles and display names."
(url (caddr candidate)))
(propertize handle 'annot display-name 'meta url)))
-(defun mastodon-toot--mentions-completion (command &optional arg &rest ignored)
+(defun mastodon-toot-mentions (command &optional arg &rest ignored)
"A company completion backend for toot mentions."
(interactive (list 'interactive))
(cl-case command
- (interactive (company-begin-backend 'mastodon-toot--mentions-completion))
+ (interactive (company-begin-backend 'mastodon-toot-mentions))
(prefix (when (and (bound-and-true-p mastodon-toot-mode) ; if masto toot minor mode
(save-excursion
(forward-whitespace -1)
@@ -613,9 +621,10 @@ The prefix can match against both user handles and display names."
(mastodon-toot--update-status-fields))
(defun mastodon-toot--attach-media (file content-type description)
- "Prompt for a attachment FILE of CONTENT-TYPE with DESCRIPTION.
-A preview is displayed in the toot create buffer, and the file
-will be uploaded and attached to the toot upon sending."
+ "Prompt for an attachment FILE of CONTENT-TYPE 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: \nsContent type: \nsDescription: ")
(when (>= (length mastodon-toot--media-attachments) 4)
;; Only a max. of 4 attachments are allowed, so pop the oldest one.
@@ -626,21 +635,20 @@ will be uploaded and attached to the toot upon sending."
(:content-type . ,content-type)
(:description . ,description)
(:filename . ,file)))))
- (mastodon-toot--refresh-attachments-display))
-
-(defun mastodon-toot--upload-attached-media ()
- "Actually upload attachments using `mastodon-http--post-media-attachment'.
-The files to be uploaded are in `mastodon-toot--media-attachments'.
-The items' ids are added to `mastodon-toot--media-attachment-ids',
-which are used to attach them to a toot after uploading."
- (mapcar (lambda (attachment)
- (let* ((filename (expand-file-name
- (alist-get :filename attachment)))
- (caption (alist-get :description attachment))
- (url (concat mastodon-instance-url "/api/v2/media")))
- (message "Uploading %s..." (file-name-nondirectory filename))
- (mastodon-http--post-media-attachment url filename caption)))
- mastodon-toot--media-attachments))
+ (mastodon-toot--refresh-attachments-display)
+ ;; upload only most recent attachment:
+ (mastodon-toot--upload-attached-media (car (last mastodon-toot--media-attachments))))
+
+(defun mastodon-toot--upload-attached-media (attachment)
+ "Upload a single attachment using `mastodon-http--post-media-attachment'.
+The item's id is added to `mastodon-toot--media-attachment-ids',
+which is used to attach it to a toot when posting."
+ (let* ((filename (expand-file-name
+ (alist-get :filename attachment)))
+ (caption (alist-get :description attachment))
+ (url (concat mastodon-instance-url "/api/v2/media")))
+ (message "Uploading %s..." (file-name-nondirectory filename))
+ (mastodon-http--post-media-attachment url filename caption)))
(defun mastodon-toot--refresh-attachments-display ()
"Update the display attachment previews in toot draft buffer."
@@ -856,7 +864,7 @@ REPLY-JSON is the full JSON of the toot being replied to."
(when (require 'company nil :noerror)
(when mastodon-toot--enable-completion-for-mentions
(set (make-local-variable 'company-backends)
- (add-to-list 'company-backends 'mastodon-toot--mentions-completion))
+ (add-to-list 'company-backends 'mastodon-toot-mentions))
(company-mode-on)))
(make-local-variable 'after-change-functions)
(push #'mastodon-toot--update-status-fields after-change-functions)