From 787f18dcff2ee7a4c5a5cbf331f4e2d26997e1cc Mon Sep 17 00:00:00 2001 From: mousebot Date: Tue, 15 Feb 2022 15:30:58 +0100 Subject: replace all calls to mastodon-search--insert-users-propertized with calls to mastodon-profile--add-author-bylines. --- lisp/mastodon-search.el | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) (limited to 'lisp/mastodon-search.el') diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el index d17b054..2f8054a 100644 --- a/lisp/mastodon-search.el +++ b/lisp/mastodon-search.el @@ -98,7 +98,8 @@ Returns a nested list containing user handle, display name, and URL." " USERS\n" " ------------\n\n") 'success)) - (mastodon-search--insert-users-propertized user-ids :note) + (mastodon-profile--add-author-bylines accts) + ;; (mastodon-search--insert-users-propertized user-ids :note) ;; hashtag results: (insert (mastodon-tl--set-face (concat "\n ------------\n" @@ -124,27 +125,6 @@ Returns a nested list containing user handle, display name, and URL." (mapc 'mastodon-tl--toot toots-list-json) (goto-char (point-min)))))) -(defun mastodon-search--insert-users-propertized (users &optional note) - "Insert USERS list into the buffer. -If NOTE is non-nil, include user's profile note. -This is also called by `mastodon-tl--get-follow-suggestions'." - (mapc (lambda (el) - (insert (propertize (car el) 'face 'mastodon-display-name-face) - " : \n : " - (propertize (concat "@" (car (cdr el))) - 'face 'mastodon-handle-face - 'mouse-face 'highlight - 'mastodon-tab-stop 'user-handle - 'keymap mastodon-tl--link-keymap - 'mastodon-handle (concat "@" (car (cdr el))) - 'help-echo (concat "Browse user profile of @" (car (cdr el)))) - " : \n" - (if note - (mastodon-tl--render-text (cadddr el) nil) - "") - "\n")) - users)) - (defun mastodon-search--get-user-info (account) "Get user handle, display name, account URL and profile note from ACCOUNT." (list (alist-get 'display_name account) -- cgit v1.2.3 From 5c6fa1b6aae1c0b1bf09b2be700958351feb1861 Mon Sep 17 00:00:00 2001 From: mousebot Date: Tue, 15 Feb 2022 20:28:44 +0100 Subject: Revert "replace all calls to mastodon-search--insert-users-propertized" This reverts commit 787f18dcff2ee7a4c5a5cbf331f4e2d26997e1cc. --- lisp/mastodon-search.el | 24 ++++++++++++++++++++++-- lisp/mastodon-tl.el | 2 +- 2 files changed, 23 insertions(+), 3 deletions(-) (limited to 'lisp/mastodon-search.el') diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el index 2f8054a..d17b054 100644 --- a/lisp/mastodon-search.el +++ b/lisp/mastodon-search.el @@ -98,8 +98,7 @@ Returns a nested list containing user handle, display name, and URL." " USERS\n" " ------------\n\n") 'success)) - (mastodon-profile--add-author-bylines accts) - ;; (mastodon-search--insert-users-propertized user-ids :note) + (mastodon-search--insert-users-propertized user-ids :note) ;; hashtag results: (insert (mastodon-tl--set-face (concat "\n ------------\n" @@ -125,6 +124,27 @@ Returns a nested list containing user handle, display name, and URL." (mapc 'mastodon-tl--toot toots-list-json) (goto-char (point-min)))))) +(defun mastodon-search--insert-users-propertized (users &optional note) + "Insert USERS list into the buffer. +If NOTE is non-nil, include user's profile note. +This is also called by `mastodon-tl--get-follow-suggestions'." + (mapc (lambda (el) + (insert (propertize (car el) 'face 'mastodon-display-name-face) + " : \n : " + (propertize (concat "@" (car (cdr el))) + 'face 'mastodon-handle-face + 'mouse-face 'highlight + 'mastodon-tab-stop 'user-handle + 'keymap mastodon-tl--link-keymap + 'mastodon-handle (concat "@" (car (cdr el))) + 'help-echo (concat "Browse user profile of @" (car (cdr el)))) + " : \n" + (if note + (mastodon-tl--render-text (cadddr el) nil) + "") + "\n")) + users)) + (defun mastodon-search--get-user-info (account) "Get user handle, display name, account URL and profile note from ACCOUNT." (list (alist-get 'display_name account) diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index d82a0a5..3167f9c 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -1253,7 +1253,7 @@ RESPONSE is the JSON returned by the server." " SUGGESTED ACCOUNTS\n" " ------------\n\n") 'success)) - (mastodon-profile--add-author-bylines response) + (mastodon-search--insert-users-propertized users :note) (goto-char (point-min)))) (defun mastodon-tl--follow-user (user-handle &optional notify) -- cgit v1.2.3 From 1c0328ced821b152e3da911592a6acd12d8598dd Mon Sep 17 00:00:00 2001 From: mousebot Date: Tue, 15 Feb 2022 21:55:10 +0100 Subject: re-factor follow-user functions for various views - revert profile--extract-users-handles - rewrite search--insert-users-propertized to handle raw account JSON, and to call search--get-user-info itself, so we can add full acct JSON to each user displayed and use it for follow-user etc. - and to choose how we want to follow users, we edit tl--interactive-user-handles-get to work differently depending on context: - poss contexts are "follow suggestions" view, search results, and profiles displaying a user's followers/followed users. --- lisp/mastodon-profile.el | 11 +++-------- lisp/mastodon-search.el | 48 ++++++++++++++++++++++++++++-------------------- lisp/mastodon-tl.el | 15 ++++++++++++--- 3 files changed, 43 insertions(+), 31 deletions(-) (limited to 'lisp/mastodon-search.el') diff --git a/lisp/mastodon-profile.el b/lisp/mastodon-profile.el index 8388d05..5504065 100644 --- a/lisp/mastodon-profile.el +++ b/lisp/mastodon-profile.el @@ -463,14 +463,9 @@ If the handle does not match a search return then retun NIL." These include the author, author of reblogged entries and any user mentioned." (when status - (let ((this-account - ;; follow suggestions view compat: - (if (or (equal (buffer-name) "*mastodon-follow-suggestions*") - (string-prefix-p "accounts" (mastodon-tl--get-endpoint))) - (mastodon-tl--property 'toot-json) - (alist-get 'account status))) - (mentions (alist-get 'mentions status)) - (reblog (alist-get 'reblog status))) + (let ((this-account (alist-get 'account status)) + (mentions (alist-get 'mentions status)) + (reblog (alist-get 'reblog status))) (seq-filter 'stringp (seq-uniq diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el index d17b054..726b76e 100644 --- a/lisp/mastodon-search.el +++ b/lisp/mastodon-search.el @@ -89,16 +89,16 @@ Returns a nested list containing user handle, display name, and URL." status-ids-list))) (with-current-buffer (get-buffer-create buffer) (switch-to-buffer buffer) - (erase-buffer) (mastodon-mode) (let ((inhibit-read-only t)) + (erase-buffer) ;; user results: (insert (mastodon-tl--set-face (concat "\n ------------\n" " USERS\n" " ------------\n\n") 'success)) - (mastodon-search--insert-users-propertized user-ids :note) + (mastodon-search--insert-users-propertized accts :note) ;; hashtag results: (insert (mastodon-tl--set-face (concat "\n ------------\n" @@ -124,26 +124,34 @@ Returns a nested list containing user handle, display name, and URL." (mapc 'mastodon-tl--toot toots-list-json) (goto-char (point-min)))))) -(defun mastodon-search--insert-users-propertized (users &optional note) - "Insert USERS list into the buffer. +(defun mastodon-search--insert-users-propertized (json &optional note) + "Insert users list into the buffer. +JSON is the data from the server.. If NOTE is non-nil, include user's profile note. This is also called by `mastodon-tl--get-follow-suggestions'." - (mapc (lambda (el) - (insert (propertize (car el) 'face 'mastodon-display-name-face) - " : \n : " - (propertize (concat "@" (car (cdr el))) - 'face 'mastodon-handle-face - 'mouse-face 'highlight - 'mastodon-tab-stop 'user-handle - 'keymap mastodon-tl--link-keymap - 'mastodon-handle (concat "@" (car (cdr el))) - 'help-echo (concat "Browse user profile of @" (car (cdr el)))) - " : \n" - (if note - (mastodon-tl--render-text (cadddr el) nil) - "") - "\n")) - users)) + (mapc (lambda (acct) + (let ((user (mastodon-search--get-user-info acct))) + (insert + (propertize + (concat (propertize (car user) + 'face 'mastodon-display-name-face + 'byline t + 'toot-id "0") + " : \n : " + (propertize (concat "@" (cadr user)) + 'face 'mastodon-handle-face + 'mouse-face 'highlight + 'mastodon-tab-stop 'user-handle + 'keymap mastodon-tl--link-keymap + 'mastodon-handle (concat "@" (cadr user)) + 'help-echo (concat "Browse user profile of @" (cadr user))) + " : \n" + (if note + (mastodon-tl--render-text (cadddr user) nil) + "") + "\n") + 'user-json acct)))) + json)) (defun mastodon-search--get-user-info (account) "Get user handle, display name, account URL and profile note from ACCOUNT." diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index ec9c033..6bb5656 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -1253,7 +1253,7 @@ RESPONSE is the JSON returned by the server." " SUGGESTED ACCOUNTS\n" " ------------\n\n") 'success)) - (mastodon-search--insert-users-propertized users :note) + (mastodon-search--insert-users-propertized response :note) (goto-char (point-min)))) (defun mastodon-tl--follow-user (user-handle &optional notify) @@ -1321,8 +1321,17 @@ Can be called to toggle NOTIFY on users already being followed." (defun mastodon-tl--interactive-user-handles-get (action) "Get the list of user-handles for ACTION from the current toot." - (let ((user-handles (mastodon-profile--extract-users-handles - (mastodon-profile--toot-json)))) + (let ((user-handles + ;; follow suggests / search compat: + (cond ((or (equal (buffer-name) "*mastodon-follow-suggestions*") + (string-prefix-p "*mastodon-search" (buffer-name))) + (list (alist-get 'acct (mastodon-tl--property 'user-json)))) + ;; profile view follows/followers compat: + ((string-prefix-p "accounts" (mastodon-tl--get-endpoint)) + (list (alist-get 'acct (mastodon-tl--property 'toot-json)))) + (t + (mastodon-profile--extract-users-handles + (mastodon-profile--toot-json)))))) (completing-read (if (or (equal action "disable") (equal action "enable")) (format "%s notifications when user posts: " action) -- cgit v1.2.3 From 4a6dd954a999cd84198b56795795361bc492183a Mon Sep 17 00:00:00 2001 From: mousebot Date: Wed, 16 Feb 2022 10:29:59 +0100 Subject: remove unused let binding user-ids --- lisp/mastodon-search.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lisp/mastodon-search.el') diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el index 726b76e..1c7f00e 100644 --- a/lisp/mastodon-search.el +++ b/lisp/mastodon-search.el @@ -77,8 +77,9 @@ Returns a nested list containing user handle, display name, and URL." (accts (alist-get 'accounts response)) (tags (alist-get 'hashtags response)) (statuses (alist-get 'statuses response)) - (user-ids (mapcar #'mastodon-search--get-user-info - accts)) ; returns a list of three-item lists + ;; this is now done in search--insert-users-propertized + ;; (user-ids (mapcar #'mastodon-search--get-user-info + ;; 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 -- cgit v1.2.3 From 7d12bfac3c9adfae63529cc2a9d10ab006fc7b5f Mon Sep 17 00:00:00 2001 From: mousebot Date: Wed, 16 Feb 2022 10:37:23 +0100 Subject: cleanup indentation in tl.el cleanup indents --- lisp/mastodon-profile.el | 4 +- lisp/mastodon-search.el | 46 ++++++++++----------- lisp/mastodon-tl.el | 102 +++++++++++++++++++++++------------------------ 3 files changed, 76 insertions(+), 76 deletions(-) (limited to 'lisp/mastodon-search.el') diff --git a/lisp/mastodon-profile.el b/lisp/mastodon-profile.el index b5e1489..0119a36 100644 --- a/lisp/mastodon-profile.el +++ b/lisp/mastodon-profile.el @@ -475,8 +475,8 @@ If the handle does not match a search return then retun NIL." These include the author, author of reblogged entries and any user mentioned." (when status (let ((this-account (alist-get 'account status)) - (mentions (alist-get 'mentions status)) - (reblog (alist-get 'reblog status))) + (mentions (alist-get 'mentions status)) + (reblog (alist-get 'reblog status))) (seq-filter 'stringp (seq-uniq diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el index 1c7f00e..e1ca81a 100644 --- a/lisp/mastodon-search.el +++ b/lisp/mastodon-search.el @@ -130,29 +130,29 @@ Returns a nested list containing user handle, display name, and URL." JSON is the data from the server.. If NOTE is non-nil, include user's profile note. This is also called by `mastodon-tl--get-follow-suggestions'." - (mapc (lambda (acct) - (let ((user (mastodon-search--get-user-info acct))) - (insert - (propertize - (concat (propertize (car user) - 'face 'mastodon-display-name-face - 'byline t - 'toot-id "0") - " : \n : " - (propertize (concat "@" (cadr user)) - 'face 'mastodon-handle-face - 'mouse-face 'highlight - 'mastodon-tab-stop 'user-handle - 'keymap mastodon-tl--link-keymap - 'mastodon-handle (concat "@" (cadr user)) - 'help-echo (concat "Browse user profile of @" (cadr user))) - " : \n" - (if note - (mastodon-tl--render-text (cadddr user) nil) - "") - "\n") - 'user-json acct)))) - json)) + (mapc (lambda (acct) + (let ((user (mastodon-search--get-user-info acct))) + (insert + (propertize + (concat (propertize (car user) + 'face 'mastodon-display-name-face + 'byline t + 'toot-id "0") + " : \n : " + (propertize (concat "@" (cadr user)) + 'face 'mastodon-handle-face + 'mouse-face 'highlight + 'mastodon-tab-stop 'user-handle + 'keymap mastodon-tl--link-keymap + 'mastodon-handle (concat "@" (cadr user)) + 'help-echo (concat "Browse user profile of @" (cadr user))) + " : \n" + (if note + (mastodon-tl--render-text (cadddr user) nil) + "") + "\n") + 'user-json acct)))) + json)) (defun mastodon-search--get-user-info (account) "Get user handle, display name, account URL and profile note from ACCOUNT." diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index eaafd74..2c2c6ec 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -362,12 +362,12 @@ Used on initializing a timeline or thread." (propertize (concat "@" handle) 'face 'mastodon-handle-face 'mouse-face 'highlight - 'mastodon-tab-stop 'user-handle + 'mastodon-tab-stop 'user-handle 'account account - 'shr-url profile-url - 'keymap mastodon-tl--link-keymap + 'shr-url profile-url + 'keymap mastodon-tl--link-keymap 'mastodon-handle (concat "@" handle) - 'help-echo (concat "Browse user profile of @" handle)) + 'help-echo (concat "Browse user profile of @" handle)) ")"))) (defun mastodon-tl--format-faves-count (toot) @@ -520,34 +520,34 @@ By default it is `mastodon-tl--byline-boosted'" ;; this makes the behaviour of these markers consistent whether they are ;; displayed for an already boosted/favourited toot or as the result of ;; the toot having just been favourited/boosted. - (concat (when boosted - (mastodon-tl--format-faved-or-boosted-byline "B")) - (when faved - (mastodon-tl--format-faved-or-boosted-byline "F"))) - (propertize - (concat - ;; we propertize help-echo format faves for author name - ;; in `mastodon-tl--byline-author' - (funcall author-byline toot) - (cond ((equal visibility "direct") - (if (fontp (char-displayable-p #10r128274)) - " ✉" - " [direct]")) - ((equal visibility "private") - (if (fontp (char-displayable-p #10r9993)) - " 🔒" - " [followers]"))) - (funcall action-byline toot) - " " - ;; TODO: Once we have a view for toot (responses etc.) make - ;; this a tab stop and attach an action. - (propertize - (format-time-string mastodon-toot-timestamp-format parsed-time) - 'timestamp parsed-time - 'display (if mastodon-tl--enable-relative-timestamps - (mastodon-tl--relative-time-description parsed-time) - parsed-time)) - (propertize "\n ------------\n" 'face 'default)) + (concat (when boosted + (mastodon-tl--format-faved-or-boosted-byline "B")) + (when faved + (mastodon-tl--format-faved-or-boosted-byline "F"))) + (propertize + (concat + ;; we propertize help-echo format faves for author name + ;; in `mastodon-tl--byline-author' + (funcall author-byline toot) + (cond ((equal visibility "direct") + (if (fontp (char-displayable-p #10r128274)) + " ✉" + " [direct]")) + ((equal visibility "private") + (if (fontp (char-displayable-p #10r9993)) + " 🔒" + " [followers]"))) + (funcall action-byline toot) + " " + ;; TODO: Once we have a view for toot (responses etc.) make + ;; this a tab stop and attach an action. + (propertize + (format-time-string mastodon-toot-timestamp-format parsed-time) + 'timestamp parsed-time + 'display (if mastodon-tl--enable-relative-timestamps + (mastodon-tl--relative-time-description parsed-time) + parsed-time)) + (propertize "\n ------------\n" 'face 'default)) 'favourited-p faved 'boosted-p boosted 'byline t)))) @@ -947,11 +947,11 @@ a notification." (let ((attachments (mastodon-tl--property 'attachments)) vids) (mapc (lambda (x) - (let ((att-type (plist-get x :type))) - (when (or (string= "video" att-type) - (string= "gifv" att-type)) - (push x vids)))) - attachments) + (let ((att-type (plist-get x :type))) + (when (or (string= "video" att-type) + (string= "gifv" att-type)) + (push x vids)))) + attachments) (car vids))) (defun mastodon-tl--mpv-play-video-from-byline () @@ -975,7 +975,7 @@ in which case play first video or gif from current toot." (type (or ;; in byline: type ;; point in toot: - (mastodon-tl--property 'mastodon-media-type)))) + (mastodon-tl--property 'mastodon-media-type)))) (if url (if (or (equal type "gifv") (equal type "video")) @@ -1211,24 +1211,24 @@ JSON is what is returned by by the server." (propertize filter-string 'toot-id id ;for goto-next-filter compat 'phrase phrase - ;'help-echo "n/p to go to next/prev filter, c to create new filter, d to delete filter at point." - ;'keymap mastodon-tl--view-filters-keymap + ;;'help-echo "n/p to go to next/prev filter, c to create new filter, d to delete filter at point." + ;;'keymap mastodon-tl--view-filters-keymap 'byline t)))) ;for goto-next-filter compat (defun mastodon-tl--delete-filter () "Delete filter at point." (interactive) - (let* ((filter-id (get-text-property (point) 'toot-id)) - (phrase (get-text-property (point) 'phrase)) - (url (mastodon-http--api - (format "filters/%s" filter-id)))) - (if (equal nil filter-id) - (error "No filter at point?") - (when (y-or-n-p (format "Delete this filter? "))) - (let ((response (mastodon-http--delete url))) - (mastodon-http--triage response (lambda () - (mastodon-tl--view-filters) - (message "Filter for \"%s\" deleted!" phrase))))))) + (let* ((filter-id (get-text-property (point) 'toot-id)) + (phrase (get-text-property (point) 'phrase)) + (url (mastodon-http--api + (format "filters/%s" filter-id)))) + (if (equal nil filter-id) + (error "No filter at point?") + (when (y-or-n-p (format "Delete this filter? "))) + (let ((response (mastodon-http--delete url))) + (mastodon-http--triage response (lambda () + (mastodon-tl--view-filters) + (message "Filter for \"%s\" deleted!" phrase))))))) (defun mastodon-tl--get-follow-suggestions () "Display a buffer of suggested accounts to follow." -- cgit v1.2.3 From 678b572132df07265f4d745e579d23162a67cca0 Mon Sep 17 00:00:00 2001 From: mousebot Date: Fri, 18 Feb 2022 15:20:05 +0100 Subject: handle empty display_name in search--get-user-info ensures we hever have an empty author name slot --- lisp/mastodon-search.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lisp/mastodon-search.el') diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el index e1ca81a..10500ad 100644 --- a/lisp/mastodon-search.el +++ b/lisp/mastodon-search.el @@ -156,7 +156,9 @@ This is also called by `mastodon-tl--get-follow-suggestions'." (defun mastodon-search--get-user-info (account) "Get user handle, display name, account URL and profile note from ACCOUNT." - (list (alist-get 'display_name account) + (list (if (not (equal "" (alist-get 'display_name account))) + (alist-get 'display_name account) + (alist-get 'username account)) (alist-get 'acct account) (alist-get 'url account) (alist-get 'note account))) -- cgit v1.2.3 From 8526e6c1cd25e9d060c15f1e11aa83450e5f0f01 Mon Sep 17 00:00:00 2001 From: mousebot Date: Fri, 18 Feb 2022 16:02:21 +0100 Subject: search: use toot-json propertize not user-json, for compat --- lisp/mastodon-search.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lisp/mastodon-search.el') diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el index 10500ad..2ebdd10 100644 --- a/lisp/mastodon-search.el +++ b/lisp/mastodon-search.el @@ -151,7 +151,7 @@ This is also called by `mastodon-tl--get-follow-suggestions'." (mastodon-tl--render-text (cadddr user) nil) "") "\n") - 'user-json acct)))) + 'toot-json acct)))) ; so named for compat w other processing functions json)) (defun mastodon-search--get-user-info (account) -- cgit v1.2.3 From 25282eb0daa8edfeb777a2fe6c6e0538fdba08a5 Mon Sep 17 00:00:00 2001 From: mousebot Date: Fri, 18 Feb 2022 16:28:18 +0100 Subject: docstring insert-users-prop --- lisp/mastodon-search.el | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'lisp/mastodon-search.el') diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el index 2ebdd10..cbb1fba 100644 --- a/lisp/mastodon-search.el +++ b/lisp/mastodon-search.el @@ -127,9 +127,10 @@ Returns a nested list containing user handle, display name, and URL." (defun mastodon-search--insert-users-propertized (json &optional note) "Insert users list into the buffer. -JSON is the data from the server.. -If NOTE is non-nil, include user's profile note. -This is also called by `mastodon-tl--get-follow-suggestions'." +JSON is the data from the server.. If NOTE is non-nil, include +user's profile note. This is also called by +`mastodon-tl--get-follow-suggestions' and +`mastodon-profile--insert-follow-requests'." (mapc (lambda (acct) (let ((user (mastodon-search--get-user-info acct))) (insert -- cgit v1.2.3