aboutsummaryrefslogtreecommitdiff
path: root/lisp/mastodon-toot.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/mastodon-toot.el')
-rw-r--r--lisp/mastodon-toot.el134
1 files changed, 76 insertions, 58 deletions
diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el
index d571b6e..3081637 100644
--- a/lisp/mastodon-toot.el
+++ b/lisp/mastodon-toot.el
@@ -216,8 +216,6 @@ Makes a POST request to the server."
(let ((response (mastodon-http--post url nil nil)))
(mastodon-http--triage response callback))))
-
-
(defun mastodon-toot--toggle-boost-or-favourite (type)
"Toggle boost or favourite of toot at `point'.
TYPE is a symbol, either 'favourite or 'boost."
@@ -240,26 +238,27 @@ TYPE is a symbol, either 'favourite or 'boost."
(remove (if boost-p (when boosted t) (when faved t)))
(toot-type (alist-get 'type (mastodon-tl--property 'toot-json))))
(if byline-region
- (cond ((mastodon-toot--own-toot-p (mastodon-tl--property 'toot-json))
- (error "You can't %s your own toots." action-string))
- ((equal "reblog" toot-type)
- (error "You can't %s boosts." action-string))
- ((equal "favourite" toot-type)
- (error "Your can't %s favourites." action-string))
- (t
- (mastodon-toot--action
- action
- (lambda ()
- (let ((inhibit-read-only t))
- (add-text-properties (car byline-region)
- (cdr byline-region)
- (if boost-p
- (list 'boosted-p (not boosted))
- (list 'favourited-p (not faved))))
- (mastodon-toot--action-success
- (if boost-p "B" "F")
- byline-region remove))
- (message (format "%s #%s" (if boost-p msg action) id))))))
+ (cond ;; actually there's nothing wrong with faving/boosting own toots!
+ ;;((mastodon-toot--own-toot-p (mastodon-tl--property 'toot-json))
+ ;;(error "You can't %s your own toots." action-string))
+ ((equal "reblog" toot-type)
+ (error "You can't %s boosts." action-string))
+ ((equal "favourite" toot-type)
+ (error "Your can't %s favourites." action-string))
+ (t
+ (mastodon-toot--action
+ action
+ (lambda ()
+ (let ((inhibit-read-only t))
+ (add-text-properties (car byline-region)
+ (cdr byline-region)
+ (if boost-p
+ (list 'boosted-p (not boosted))
+ (list 'favourited-p (not faved))))
+ (mastodon-toot--action-success
+ (if boost-p "B" "F")
+ byline-region remove))
+ (message (format "%s #%s" (if boost-p msg action) id))))))
(message (format "Nothing to %s here?!?" action-string)))))
(defun mastodon-toot--toggle-boost ()
@@ -272,6 +271,43 @@ TYPE is a symbol, either 'favourite or 'boost."
(interactive)
(mastodon-toot--toggle-boost-or-favourite 'favourite))
+;; TODO maybe refactor into boost/fave fun
+(defun mastodon-toot--bookmark-toot-toggle ()
+ "Bookmark or unbookmark toot at point."
+ (interactive)
+ (let* ((toot (mastodon-tl--property 'toot-json))
+ (id (mastodon-tl--property 'base-toot-id))
+ ;; (mastodon-tl--as-string (mastodon-tl--toot-id toot)))
+ (bookmarked-p (mastodon-tl--property 'bookmarked-p))
+ (prompt (if bookmarked-p
+ (format "Toot already bookmarked. Remove? ")
+ (format "Bookmark this toot? ")))
+ (byline-region
+ (when id
+ (mastodon-tl--find-property-range 'byline (point))))
+ (action (if bookmarked-p "unbookmark" "bookmark"))
+ (bookmark-str (if (fontp (char-displayable-p #10r128278))
+ "🔖"
+ "K"))
+ (message (if bookmarked-p
+ "Bookmark removed!"
+ "Toot bookmarked!"))
+ (remove (when bookmarked-p t)))
+ (if byline-region
+ (when (y-or-n-p prompt)
+ (mastodon-toot--action
+ action
+ (lambda ()
+ (let ((inhibit-read-only t))
+ (add-text-properties (car byline-region)
+ (cdr byline-region)
+ (list 'bookmarked-p (not bookmarked-p))))
+ (mastodon-toot--action-success
+ bookmark-str
+ byline-region remove)
+ (message (format "%s #%s" message id)))))
+ (message (format "Nothing to %s here?!?" action)))))
+
(defun mastodon-toot--copy-toot-url ()
"Copy URL of toot at point."
(interactive)
@@ -365,6 +401,12 @@ NO-REDRAFT means delete toot only."
toot-visibility
toot-cw)))))))))
+(defun mastodon-toot-set-cw (&optional cw)
+ "Set content warning to CW if it is non-nil"
+ (unless (equal cw "")
+ (setq mastodon-toot--content-warning t)
+ (setq mastodon-toot--content-warning-from-reply-or-redraft cw)))
+
(defun mastodon-toot--redraft (response &optional reply-id toot-visibility toot-cw)
"Opens a new toot compose buffer using values from RESPONSE buffer.
REPLY-ID, TOOT-VISIBILITY, and TOOT-CW of deleted toot are preseved."
@@ -378,32 +420,9 @@ REPLY-ID, TOOT-VISIBILITY, and TOOT-CW of deleted toot are preseved."
(when reply-id
(setq mastodon-toot--reply-to-id reply-id))
(setq mastodon-toot--visibility toot-visibility)
- (when (not (equal toot-cw ""))
- (setq mastodon-toot--content-warning t)
- (setq mastodon-toot--content-warning-from-reply-or-redraft toot-cw))
+ (mastodon-toot-set-cw toot-cw)
(mastodon-toot--update-status-fields))))
-(defun mastodon-toot--bookmark-toot-toggle ()
- "Bookmark or unbookmark toot at point synchronously."
- (interactive)
- (let* ((toot (mastodon-tl--property 'toot-json))
- (id (mastodon-tl--as-string (mastodon-tl--toot-id toot)))
- (bookmarked (alist-get 'bookmarked toot))
- (url (mastodon-http--api (if (equal bookmarked t)
- (format "statuses/%s/unbookmark" id)
- (format "statuses/%s/bookmark" id))))
- (prompt (if (equal bookmarked t)
- (format "Toot already bookmarked. Remove? ")
- (format "Bookmark this toot? ")))
- (message (if (equal bookmarked t)
- "Bookmark removed!"
- "Toot bookmarked!")))
- (when (y-or-n-p prompt)
- (let ((response (mastodon-http--post url nil nil)))
- (mastodon-http--triage response
- (lambda ()
- (message message)))))))
-
(defun mastodon-toot--kill ()
"Kill `mastodon-toot-mode' buffer and window."
(kill-buffer-and-window))
@@ -465,10 +484,10 @@ The list is formatted for `emojify-user-emojis', which see."
(mapc (lambda (x)
(push
`(,(concat ":"
- (file-name-base x)
- ":") . (("name" . ,(file-name-base x))
- ("image" . ,(concat mastodon-custom-emojis-dir x))
- ("style" . "github")))
+ (file-name-base x) ":")
+ . (("name" . ,(file-name-base x))
+ ("image" . ,(concat mastodon-custom-emojis-dir x))
+ ("style" . "github")))
mastodon-emojify-user-emojis))
custom-emoji-files)
(reverse mastodon-emojify-user-emojis)))
@@ -482,7 +501,8 @@ to `emojify-user-emojis', and the emoji data is updated."
(unless (file-exists-p (concat (expand-file-name
emojify-emojis-dir)
"/mastodon-custom-emojis/"))
- (when (y-or-n-p "Looks like you haven't downloaded your instance's custom emoji yet. Download now? ")
+ (when (y-or-n-p "Looks like you haven't downloaded your
+ instance's custom emoji yet. Download now? ")
(mastodon-toot--download-custom-emoji)))
(setq emojify-user-emojis
(append (mastodon-toot--collect-custom-emoji)
@@ -885,12 +905,10 @@ REPLY-JSON is the full JSON of the toot being replied to."
(when reply-to-user
(insert (format "%s " reply-to-user))
(setq mastodon-toot--reply-to-id reply-to-id)
- (if (not (equal mastodon-toot--visibility
- reply-visibility))
- (setq mastodon-toot--visibility reply-visibility))
- (when (not (equal reply-cw ""))
- (setq mastodon-toot--content-warning t)
- (setq mastodon-toot--content-warning-from-reply-or-redraft reply-cw)))))
+ (unless (equal mastodon-toot--visibility
+ reply-visibility)
+ (setq mastodon-toot--visibility reply-visibility))
+ (mastodon-toot-set-cw reply-cw))))
(defun mastodon-toot--update-status-fields (&rest _args)
"Update the status fields in the header based on the current state."
@@ -940,7 +958,7 @@ REPLY-JSON is the full JSON of the toot being replied to."
(switch-to-buffer-other-window buffer)
(text-mode)
(mastodon-toot-mode t)
- (when (not buffer-exists)
+ (unless buffer-exists
(mastodon-toot--display-docs-and-status-fields)
(mastodon-toot--setup-as-reply reply-to-user reply-to-id reply-json))
(unless mastodon-toot--max-toot-chars