aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/mastodon-search.el52
1 files changed, 39 insertions, 13 deletions
diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el
index e8ab093..bc51d22 100644
--- a/lisp/mastodon-search.el
+++ b/lisp/mastodon-search.el
@@ -40,10 +40,13 @@
(autoload 'mastodon-tl--render-text "mastodon-tl")
(autoload 'mastodon-tl--set-buffer-spec "mastodon-tl")
(autoload 'mastodon-tl--set-face "mastodon-tl")
+(autoload 'mastodon-tl--timeline "mastodon-tl")
+(autoload 'mastodon-tl--toot "mastodon-tl")
(defvar mastodon-toot--completion-style-for-mentions)
(defvar mastodon-instance-url)
(defvar mastodon-tl--link-keymap)
+(defvar mastodon-tl--horiz-bar)
;; functions for completion of mentions in mastodon-toot
@@ -81,26 +84,53 @@ QUERY is the string to search."
(defun mastodon-search--trending-tags ()
"Display a list of tags trending on your instance."
(interactive)
- (let* ((url (mastodon-http--api "trends"))
+ (mastodon-search--view-trending "tags"
+ #'mastodon-search--print-tags-list))
+
+(defun mastodon-search--trending-statuses ()
+ "Display a list of statuses trending on your instance."
+ (interactive)
+ (mastodon-search--view-trending "statuses"
+ #'mastodon-tl--timeline))
+
+(defun mastodon-search--get-full-statuses-data (response)
+ "For statuses list in RESPONSE, fetch and return full status JSON."
+ (let ((status-ids-list
+ (mapcar #'mastodon-search--get-id-from-status response)))
+ (mapcar #'mastodon-search--fetch-full-status-from-id
+ status-ids-list)))
+
+(defun mastodon-search--view-trending (type print-fun)
+ "Display a list of tags trending on your instance.
+TYPE is a string, either tags, statuses, or links.
+PRINT-FUN is the function used to print the data from the response."
+ (let* ((url (mastodon-http--api
+ (format "trends/%s" type)))
(response (mastodon-http--get-json url))
- (tags (mapcar #'mastodon-search--get-hashtag-info
- response))
- (buffer (get-buffer-create "*mastodon-trending*")))
+ (data (cond ((equal type "tags")
+ (mapcar #'mastodon-search--get-hashtag-info
+ response))
+ ((equal type "statuses")
+ (mastodon-search--get-full-statuses-data response))
+ ((equal type "links")
+ (message "todo"))))
+ (buffer (get-buffer-create
+ (format "*mastodon-trending-%s*" type))))
(with-current-buffer buffer
(switch-to-buffer (current-buffer))
(mastodon-mode)
(let ((inhibit-read-only t))
(erase-buffer)
(mastodon-tl--set-buffer-spec (buffer-name buffer)
- "api/v1/trends"
+ (format "api/v1/trends/%s" type)
nil)
;; hashtag results:
(insert (mastodon-tl--set-face
(concat "\n " mastodon-tl--horiz-bar "\n"
- " TRENDING HASHTAGS\n"
+ (upcase (format " TRENDING %s\n" type))
" " mastodon-tl--horiz-bar "\n\n")
'success))
- (mastodon-search--print-tags-list tags)))))
+ (funcall print-fun data)))))
;; functions for mastodon search
@@ -118,12 +148,8 @@ QUERY is the string to search."
;; accts)) ; returns a list of three-item lists
(tags-list (mapcar #'mastodon-search--get-hashtag-info
tags))
- ;; (status-list (mapcar #'mastodon-search--get-status-info
- ;; statuses))
- (status-ids-list (mapcar #'mastodon-search--get-id-from-status
- statuses))
- (toots-list-json (mapcar #'mastodon-search--fetch-full-status-from-id
- status-ids-list)))
+ (toots-list-json
+ (mastodon-search--get-full-statuses-data statuses)))
(with-current-buffer (get-buffer-create buffer)
(switch-to-buffer buffer)
(mastodon-mode)