aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/mastodon-tl.el34
1 files changed, 22 insertions, 12 deletions
diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el
index 1a4df7f..8be802e 100644
--- a/lisp/mastodon-tl.el
+++ b/lisp/mastodon-tl.el
@@ -590,6 +590,12 @@ With a double PREFIX arg, limit results to your own instance."
'mastodon-tl--timeline nil
params)))
+(defun mastodon-tl--announcements ()
+ "Display announcements from your instance."
+ (interactive)
+ (mastodon-tl--init "announcements" "announcements"
+ 'mastodon-tl--timeline nil nil nil nil :no-byline))
+
;;; BYLINES, etc.
@@ -814,7 +820,7 @@ ACCOUNT is the notification account if any."
;; all other toots, inc. boosts/faves in timelines:
;; (mastodon-tl--field auto fetches from reblogs if needed):
(mastodon-tl--field 'created_at toot))))
- (parsed-time (date-to-time created-time))
+ (parsed-time (when created-time (date-to-time created-time)))
(faved (eq t (mastodon-tl--field 'favourited toot)))
(boosted (eq t (mastodon-tl--field 'reblogged toot)))
(bookmarked (eq t (mastodon-tl--field 'bookmarked toot)))
@@ -1791,7 +1797,7 @@ NO-BYLINE means just insert toot body, used for folding."
#'mastodon-tl--byline-author #'mastodon-tl--byline-boost
nil nil detailed-p thread domain unfolded no-byline))))
-(defun mastodon-tl--timeline (toots &optional thread domain)
+(defun mastodon-tl--timeline (toots &optional thread domain no-byline)
"Display each toot in TOOTS.
This function removes replies if user required.
THREAD means the status will be displayed in a thread view.
@@ -1807,7 +1813,7 @@ When DOMAIN, force inclusion of user's domain in their handle."
(cl-remove-if-not #'mastodon-tl--is-reply toots)
toots))))
(mapc (lambda (toot)
- (mastodon-tl--toot toot nil thread domain))
+ (mastodon-tl--toot toot nil thread domain nil no-byline))
toots)
;; media:
(when mastodon-tl--display-media-p
@@ -2117,7 +2123,9 @@ call this function after it is set or use something else."
((string= "*masto-image*" (buffer-name))
'mastodon-image)
((mastodon-tl--endpoint-str-= "timelines/link")
- 'link-timeline))))
+ 'link-timeline)
+ ((mastodon-tl--endpoint-str-= "announcements")
+ 'announcements))))
(defun mastodon-tl--buffer-type-eq (type)
"Return t if current buffer type is equal to symbol TYPE."
@@ -3246,7 +3254,7 @@ This location is defined by a non-nil value of
(defun mastodon-tl--init
(buffer-name endpoint update-function &optional headers params
- hide-replies instance)
+ hide-replies instance no-byline)
"Initialize BUFFER-NAME with timeline targeted by ENDPOINT asynchronously.
UPDATE-FUNCTION is used to recieve more toots.
HEADERS means to also collect the response headers. Used for paginating
@@ -3264,11 +3272,12 @@ a timeline from."
#'mastodon-http--get-response-async
#'mastodon-http--get-json-async)
url params 'mastodon-tl--init*
- buffer endpoint update-function headers params hide-replies instance)))
+ buffer endpoint update-function headers params hide-replies
+ instance no-byline)))
(defun mastodon-tl--init*
(response buffer endpoint update-function &optional headers
- update-params hide-replies instance)
+ update-params hide-replies instance no-byline)
"Initialize BUFFER with timeline targeted by ENDPOINT.
UPDATE-FUNCTION is used to recieve more toots.
RESPONSE is the data returned from the server by
@@ -3299,7 +3308,7 @@ JSON and http headers, without it just the JSON."
link-header update-params hide-replies
;; awful hack to fix multiple reloads:
(alist-get "max_id" update-params nil nil #'string=))
- (mastodon-tl--do-init json update-function instance)))))))
+ (mastodon-tl--do-init json update-function instance no-byline)))))))
(defun mastodon-tl--init-sync
(buffer-name endpoint update-function &optional note-type params
@@ -3342,14 +3351,15 @@ ENDPOINT-VERSION is a string, format Vx, e.g. V2."
(mastodon-tl--do-init json update-function)
buffer)))
-(defun mastodon-tl--do-init (json update-fun &optional domain)
+(defun mastodon-tl--do-init (json update-fun &optional domain no-byline)
"Utility function for `mastodon-tl--init*' and `mastodon-tl--init-sync'.
JSON is the data to call UPDATE-FUN on.
When DOMAIN, force inclusion of user's domain in their handle."
(remove-overlays) ; video overlays
- (if domain ;; maybe our update-fun doesn't always have 3 args...:
- (funcall update-fun json nil domain)
- (funcall update-fun json))
+ (cond (domain ;; maybe our update-fun doesn't always have 3 args...:
+ (funcall update-fun json nil domain))
+ (no-byline (funcall update-fun json nil nil no-byline))
+ (t (funcall update-fun json)))
(setq
;; Initialize with a minimal interval; we re-scan at least once
;; every 5 minutes to catch any timestamps we may have missed