diff options
| author | marty hiatt <martianhiatus [a t] riseup [d o t] net> | 2023-10-15 11:54:28 +0200 | 
|---|---|---|
| committer | marty hiatt <martianhiatus [a t] riseup [d o t] net> | 2023-10-15 11:54:28 +0200 | 
| commit | 574c17c4bdfe43a3081ddcbde4452dd477929c02 (patch) | |
| tree | d700370b46aeed9ea8d1c3cf8ac5424e7ecc29b3 /lisp | |
| parent | 9aac053495a08482d04f36c258a4e11d7ec92ea4 (diff) | |
toot-id>item-id, toot-json>item-json, item-type for nav, byline still needed
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/mastodon-inspect.el | 26 | ||||
| -rw-r--r-- | lisp/mastodon-notifications.el | 16 | ||||
| -rw-r--r-- | lisp/mastodon-profile.el | 34 | ||||
| -rw-r--r-- | lisp/mastodon-search.el | 7 | ||||
| -rw-r--r-- | lisp/mastodon-tl.el | 138 | ||||
| -rw-r--r-- | lisp/mastodon-toot.el | 58 | ||||
| -rw-r--r-- | lisp/mastodon-views.el | 22 | 
7 files changed, 153 insertions, 148 deletions
| diff --git a/lisp/mastodon-inspect.el b/lisp/mastodon-inspect.el index c332dde..0a278ab 100644 --- a/lisp/mastodon-inspect.el +++ b/lisp/mastodon-inspect.el @@ -62,21 +62,21 @@    (interactive)    (mastodon-inspect--dump-json-in-buffer     (concat "*mastodon-inspect-toot-" -           (mastodon-tl--as-string (mastodon-tl--property 'toot-id)) +           (mastodon-tl--as-string (mastodon-tl--property 'item-id))             "*") -   (mastodon-tl--property 'toot-json))) +   (mastodon-tl--property 'item-json))) -(defun mastodon-inspect--download-single-toot (toot-id) -  "Download the toot/status represented by TOOT-ID." +(defun mastodon-inspect--download-single-toot (item-id) +  "Download the toot/status represented by ITEM-ID."    (mastodon-http--get-json -   (mastodon-http--api (concat "statuses/" toot-id)))) +   (mastodon-http--api (concat "statuses/" item-id)))) -(defun mastodon-inspect--view-single-toot (toot-id) -  "View the toot/status represented by TOOT-ID." +(defun mastodon-inspect--view-single-toot (item-id) +  "View the toot/status represented by ITEM-ID."    (interactive "s Toot ID: ") -  (let ((buffer (get-buffer-create (concat "*mastodon-status-" toot-id "*")))) +  (let ((buffer (get-buffer-create (concat "*mastodon-status-" item-id "*"))))      (with-current-buffer buffer -      (let ((toot (mastodon-inspect--download-single-toot toot-id ))) +      (let ((toot (mastodon-inspect--download-single-toot item-id )))          (mastodon-tl--toot toot)          (goto-char (point-min))          (while (search-forward "\n\n\n | " nil t) @@ -85,12 +85,12 @@      (switch-to-buffer-other-window buffer)      (mastodon-mode))) -(defun mastodon-inspect--view-single-toot-source (toot-id) -  "View the ess source of a toot/status represented by TOOT-ID." +(defun mastodon-inspect--view-single-toot-source (item-id) +  "View the ess source of a toot/status represented by ITEM-ID."    (interactive "s Toot ID: ")    (mastodon-inspect--dump-json-in-buffer -   (concat "*mastodon-status-raw-" toot-id "*") -   (mastodon-inspect--download-single-toot toot-id))) +   (concat "*mastodon-status-raw-" item-id "*") +   (mastodon-inspect--download-single-toot item-id)))  (defvar mastodon-inspect--search-query-accounts-result) diff --git a/lisp/mastodon-notifications.el b/lisp/mastodon-notifications.el index 5f6d1ba..cce5810 100644 --- a/lisp/mastodon-notifications.el +++ b/lisp/mastodon-notifications.el @@ -50,7 +50,7 @@  (autoload 'mastodon-tl--property "mastodon-tl")  (autoload 'mastodon-tl--reload-timeline-or-profile "mastodon-tl")  (autoload 'mastodon-tl--spoiler "mastodon-tl") -(autoload 'mastodon-tl--toot-id "mastodon-tl") +(autoload 'mastodon-tl--item-id "mastodon-tl")  (autoload 'mastodon-tl--update "mastodon-tl")  (autoload 'mastodon-views--view-follow-requests "mastodon-views") @@ -98,17 +98,17 @@  With no argument, the request is accepted. Argument REJECT means  reject the request. Can be called in notifications view or in  follow-requests view." -  (if (not (mastodon-tl--find-property-range 'toot-json (point))) +  (if (not (mastodon-tl--find-property-range 'item-json (point)))        (message "No follow request at point?") -    (let* ((toot-json (mastodon-tl--property 'toot-json)) +    (let* ((item-json (mastodon-tl--property 'item-json))             (f-reqs-view-p (string= "follow_requests"                                     (plist-get mastodon-tl--buffer-spec 'endpoint))) -           (f-req-p (or (string= "follow_request" (alist-get 'type toot-json)) ;notifs +           (f-req-p (or (string= "follow_request" (alist-get 'type item-json)) ;notifs                          f-reqs-view-p)))        (if (not f-req-p)            (message "No follow request at point?") -        (let-alist (or (alist-get 'account toot-json) ;notifs -                       toot-json) ;f-reqs +        (let-alist (or (alist-get 'account item-json) ;notifs +                       item-json) ;f-reqs            (if .id                (let ((response                       (mastodon-http--post @@ -319,9 +319,9 @@ Status notifications are created when you call  (defun mastodon-notifications--clear-current ()    "Dismiss the notification at point."    (interactive) -  (let* ((id (or (mastodon-tl--property 'toot-id) +  (let* ((id (or (mastodon-tl--property 'item-id)                   (mastodon-tl--field 'id -                                     (mastodon-tl--property 'toot-json)))) +                                     (mastodon-tl--property 'item-json))))           (response            (mastodon-http--post (mastodon-http--api                                  (format "notifications/%s/dismiss" id))))) diff --git a/lisp/mastodon-profile.el b/lisp/mastodon-profile.el index 365e352..9850b81 100644 --- a/lisp/mastodon-profile.el +++ b/lisp/mastodon-profile.el @@ -74,7 +74,7 @@  (autoload 'mastodon-tl--symbol "mastodon-tl")  (autoload 'mastodon-tl--timeline "mastodon-tl.el")  (autoload 'mastodon-tl--toot "mastodon-tl") -(autoload 'mastodon-tl--toot-id "mastodon-tl") +(autoload 'mastodon-tl--item-id "mastodon-tl")  (autoload 'mastodon-toot--count-toot-chars "mastodon-toot")  (autoload 'mastodon-toot--get-max-toot-chars "mastodon-toot")  (autoload 'mastodon-views--add-account-to-list "mastodon-views") @@ -136,10 +136,10 @@ contains")    :keymap mastodon-profile-update-mode-map    :global nil) -(defun mastodon-profile--toot-json () -  "Get the next toot-json." +(defun mastodon-profile--item-json () +  "Get the next item-json."    (interactive) -  (mastodon-tl--property 'toot-json)) +  (mastodon-tl--property 'item-json))  (defun mastodon-profile--make-author-buffer (account &optional no-reblogs)    "Take an ACCOUNT json and insert a user account into a new buffer. @@ -679,7 +679,7 @@ the format \"2000-01-31T00:00:00.000Z\"."  If toot is a boost, opens the profile of the booster."    (interactive)    (mastodon-profile--make-author-buffer -   (alist-get 'account (mastodon-profile--toot-json)))) +   (alist-get 'account (mastodon-profile--item-json))))  (defun mastodon-profile--image-from-account (account img-type)    "Return a avatar image from ACCOUNT. @@ -693,21 +693,21 @@ IMG-TYPE is the JSON key from the account data."    (interactive     (list      (if (and (not (mastodon-tl--profile-buffer-p)) -             (not (mastodon-tl--property 'toot-json :no-move))) +             (not (mastodon-tl--property 'item-json :no-move)))          (message "Looks like there's no toot or user at point?")        (let ((user-handles (mastodon-profile--extract-users-handles -                           (mastodon-profile--toot-json)))) +                           (mastodon-profile--item-json))))          (completing-read "View profile of user [choose or enter any handle]: "                           user-handles                           nil ; predicate                           'confirm))))) -  (if (not (or ; own profile has no need for toot-json test: +  (if (not (or ; own profile has no need for item-json test:              (equal user-handle (mastodon-auth--get-account-name))              (mastodon-tl--profile-buffer-p) -            (mastodon-tl--property 'toot-json :no-move))) +            (mastodon-tl--property 'item-json :no-move)))        (message "Looks like there's no toot or user at point?")      (let ((account (mastodon-profile--lookup-account-in-status -                    user-handle (mastodon-profile--toot-json)))) +                    user-handle (mastodon-profile--item-json))))        (if account            (progn              (message "Loading profile of user %s..." user-handle) @@ -733,14 +733,14 @@ Used to view a user's followers and those they're following."                     (propertize                      (mastodon-tl--byline-author `((account . ,toot)) :avatar)                      'byline  't -                    'toot-id (alist-get 'id toot) -                    'base-toot-id (mastodon-tl--toot-id toot) -                    'toot-json toot)) +                    'item-id (alist-get 'id toot) +                    'base-item-id (mastodon-tl--item-id toot) +                    'item-json toot))             (mastodon-media--inline-images start-pos (point))             (insert "\n"                     (propertize                      (mastodon-tl--render-text (alist-get 'note toot) nil) -                    'toot-json toot) +                    'item-json toot)                     "\n")))         tootv)))) @@ -805,7 +805,7 @@ These include the author, author of reblogged entries and any user mentioned."    "Remove a user from your followers.  Optionally provide the ID of the account to remove."    (interactive) -  (let* ((account (unless id (mastodon-tl--property 'toot-json :no-move))) +  (let* ((account (unless id (mastodon-tl--property 'item-json :no-move)))           (id (or id (alist-get 'id account)))           (handle (if account                       (alist-get 'acct account) @@ -823,10 +823,10 @@ Optionally provide the ID of the account to remove."    "Prompt for a user in the item at point and remove from followers."    (interactive)    (let* ((handles (mastodon-profile--extract-users-handles -                   (mastodon-profile--toot-json))) +                   (mastodon-profile--item-json)))           (handle (completing-read "Remove from followers: " handles nil))           (account (mastodon-profile--lookup-account-in-status -                   handle (mastodon-profile--toot-json))) +                   handle (mastodon-profile--item-json)))           (id (alist-get 'id account)))      (mastodon-profile--remove-user-from-followers id))) diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el index 9b4bb68..1f39088 100644 --- a/lisp/mastodon-search.el +++ b/lisp/mastodon-search.el @@ -261,7 +261,8 @@ If NOTE is non-nil, include user's profile note. This is also        (propertize (car user)                    'face 'mastodon-display-name-face                    'byline t -                  'toot-id id) ; for prev/next nav +                  'item-type 'user +                  'item-id id) ; for prev/next nav        " : \n : "        (propertize (concat "@" (cadr user))                    'face 'mastodon-handle-face @@ -275,7 +276,7 @@ If NOTE is non-nil, include user's profile note. This is also            (mastodon-tl--render-text (cadddr user) acct)          "")        "\n") -     'toot-json acct))) ; for compat w other processing functions +     'item-json acct))) ; for compat w other processing functions  (defun mastodon-search--print-tags (tags)    "Print TAGS data as returned from a \"hashtags\" search query." @@ -292,6 +293,8 @@ If NOTE is non-nil, include user's profile note. This is also                         'mouse-face 'highlight                         'mastodon-tag (car el)                         'mastodon-tab-stop 'hashtag +                       'item-type 'tag ; for next/prev nav +                       'byline t ; for next/prev nav                         'help-echo (concat "Browse tag #" (car el))                         'keymap mastodon-tl--link-keymap)             " : \n\n")) diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index b0c121a..1600b49 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -69,7 +69,7 @@  (autoload 'mastodon-profile--open-statuses-no-reblogs "mastodon-profile")  (autoload 'mastodon-profile--profile-json "mastodon-profile")  (autoload 'mastodon-profile--search-account-by-handle "mastodon-profile") -(autoload 'mastodon-profile--toot-json "mastodon-profile") +(autoload 'mastodon-profile--item-json "mastodon-profile")  (autoload 'mastodon-profile--view-author-profile "mastodon-profile")  (autoload 'mastodon-profile-mode "mastodon-profile")  (autoload 'mastodon-search--get-user-info "mastodon-search") @@ -295,18 +295,19 @@ than `switch-to-buffer'."           (switch-to-buffer ,buffer))         ,@body))) -(defmacro mastodon-tl--do-if-toot (&rest body) -  "Execute BODY if we have a toot or user at point." +(defmacro mastodon-tl--do-if-item (&rest body) +  "Execute BODY if we have an item at point."    (declare (debug t))    `(if (and (not (mastodon-tl--profile-buffer-p)) -            (not (mastodon-tl--property 'toot-json))) ; includes user listings -       (message "Looks like there's no toot or user at point?") +            (not (mastodon-tl--property 'item-json))) ; includes users, hashtags +       (message "Looks like there's no item at point?")       ,@body))  (defmacro mastodon-tl--do-if-toot-strict (&rest body) -  "Execute BODY if we have a toot, and only a toot, at point." +  "Execute BODY if we have a toot object at point. +Includes boosts, and notifications that display toots."    (declare (debug t)) -  `(if (not (mastodon-tl--property 'toot-id :no-move)) +  `(if (not (equal 'toot (mastodon-tl--property 'item-type :no-move)))         (message "Looks like there's no toot at point?")       ,@body)) @@ -354,24 +355,21 @@ text, i.e. hidden spoiler text."    (interactive)    (mastodon-tl--next-tab-item :previous)) -(defun mastodon-tl--goto-toot-pos (find-pos refresh &optional pos) -  "Search for toot with FIND-POS. +(defun mastodon-tl--goto-item-pos (find-pos refresh &optional pos) +  "Search for item with function FIND-POS.  If search returns nil, execute REFRESH function.  Optionally start from POS."    (let* ((npos (or ; toot/user items have byline:                  (funcall find-pos                           (or pos (point)) +                         ;; 'item-type ; breaks nav to last item in a view?                           'byline -                         (current-buffer)) -                ;; some other things don't, so just tab-stop: -                (funcall find-pos -                         (or pos (point)) -                         'mastodon-tab-stop                           (current-buffer)))))      (if npos -        (if (not (or (get-text-property npos 'toot-id) ; toots, etc. -                     (get-text-property npos 'mastodon-tab-stop))) ; generic -            (mastodon-tl--goto-toot-pos find-pos refresh npos) +        (if (not (or +                  ;; (get-text-property npos 'item-id) ; toots, users, not tags +                  (get-text-property npos 'item-type))) ; generic +            (mastodon-tl--goto-item-pos find-pos refresh npos)            (goto-char npos)            ;; force display of help-echo on moving to a toot byline:            (mastodon-tl--message-help-echo)) @@ -380,13 +378,13 @@ Optionally start from POS."  (defun mastodon-tl--goto-next-toot ()    "Jump to next toot header."    (interactive) -  (mastodon-tl--goto-toot-pos 'next-single-property-change +  (mastodon-tl--goto-item-pos 'next-single-property-change                                'mastodon-tl--more))  (defun mastodon-tl--goto-prev-toot ()    "Jump to last toot header."    (interactive) -  (mastodon-tl--goto-toot-pos 'previous-single-property-change +  (mastodon-tl--goto-item-pos 'previous-single-property-change                                'mastodon-tl--update))  (defun mastodon-tl--goto-first-item () @@ -401,13 +399,13 @@ Used on initializing a timeline or thread."  (defun mastodon-tl--goto-next-item ()    "Jump to next item, e.g. filter or follow request."    (interactive) -  (mastodon-tl--goto-toot-pos 'next-single-property-change +  (mastodon-tl--goto-item-pos 'next-single-property-change                                'next-line))  (defun mastodon-tl--goto-prev-item ()    "Jump to previous item, e.g. filter or follow request."    (interactive) -  (mastodon-tl--goto-toot-pos 'previous-single-property-change +  (mastodon-tl--goto-item-pos 'previous-single-property-change                                'previous-line)) @@ -490,7 +488,7 @@ With a double PREFIX arg, limit results to your own instance."    "Call message on `help-echo' property at point.  Do so if type of status at poins is not follow_request/follow."    (let ((type (alist-get 'type -                         (mastodon-tl--property 'toot-json :no-move))) +                         (mastodon-tl--property 'item-json :no-move)))          (echo (mastodon-tl--property 'help-echo :no-move)))      (when echo ; not for followers/following in profile        (unless (or (string= type "follow_request") @@ -970,9 +968,9 @@ content should be hidden."    "Toggle the visibility of the spoiler text in the current toot."    (interactive)    (let* ((toot-range (or (mastodon-tl--find-property-range -                          'toot-json (point)) +                          'item-json (point))                           (mastodon-tl--find-property-range -                          'toot-json (point) t))) +                          'item-json (point) t)))           (spoiler-range (when toot-range                            (mastodon-tl--find-property-range                             'mastodon-content-warning-body @@ -1196,7 +1194,7 @@ displayed when the duration is smaller than a minute)."  (defun mastodon-tl--read-poll-option ()    "Read a poll option to vote on a poll." -  (let* ((toot (mastodon-tl--property 'toot-json)) +  (let* ((toot (mastodon-tl--property 'item-json))           (poll (mastodon-tl--field 'poll toot))           (options (mastodon-tl--field 'options poll))           (options-titles (mastodon-tl--map-alist 'title options)) @@ -1221,9 +1219,9 @@ displayed when the duration is smaller than a minute)."  (defun mastodon-tl--poll-vote (option)    "If there is a poll at point, prompt user for OPTION to vote on it."    (interactive (mastodon-tl--read-poll-option)) -  (if (null (mastodon-tl--field 'poll (mastodon-tl--property 'toot-json))) +  (if (null (mastodon-tl--field 'poll (mastodon-tl--property 'item-json)))        (message "No poll here.") -    (let* ((toot (mastodon-tl--property 'toot-json)) +    (let* ((toot (mastodon-tl--property 'item-json))             (poll (mastodon-tl--field 'poll toot))             (poll-id (alist-get 'id poll))             (url (mastodon-http--api (format "polls/%s/votes" poll-id))) @@ -1304,16 +1302,16 @@ Runs `mastodon-tl--render-text' and fetches poll or media."                (mastodon-tl--get-poll toot))              (mastodon-tl--media toot)))) -(defun mastodon-tl--prev-toot-id () +(defun mastodon-tl--prev-item-id ()    "Return the id of the last toot inserted into the buffer."    (let ((prev-pos           (1- (save-excursion -               (previous-single-property-change (point) 'base-toot-id))))) -    (get-text-property prev-pos 'base-toot-id))) +               (previous-single-property-change (point) 'base-item-id))))) +    (get-text-property prev-pos 'base-item-id)))  (defun mastodon-tl--after-reply-status (reply-to-id)    "T if REPLY-TO-ID is equal to that of the last toot inserted in the bufer." -  (let ((prev-id (mastodon-tl--prev-toot-id))) +  (let ((prev-id (mastodon-tl--prev-item-id)))      (string= reply-to-id prev-id)))  (defun mastodon-tl--insert-status (toot body author-byline action-byline @@ -1328,7 +1326,7 @@ such as boosting favouriting and following to the byline. It also  takes a single function. By default it is  `mastodon-tl--byline-boosted'.  ID is that of the status if it is a notification, which is -attached as a `toot-id' property if provided. If the +attached as a `item-id' property if provided. If the  status is a favourite or boost notification, BASE-TOOT is the  JSON of the toot responded to.  DETAILED-P means display more detailed info. For now @@ -1355,14 +1353,15 @@ THREAD means the status will be displayed in a thread view."           body)         " \n"         (mastodon-tl--byline toot author-byline action-byline detailed-p)) -      'toot-id      (or id ; notification's own id +      'item-type    'toot +      'item-id      (or id ; notification's own id                          (alist-get 'id toot)) ; toot id -      'base-toot-id (mastodon-tl--toot-id +      'base-item-id (mastodon-tl--item-id                       ;; if status is a notif, get id from base-toot -                     ;; (-tl--toot-id toot) will not work here: +                     ;; (-tl--item-id toot) will not work here:                       (or base-toot                           toot)) ; else normal toot with reblog check -      'toot-json    toot +      'item-json    toot        'base-toot    base-toot        'cursor-face 'mastodon-cursor-highlight-face)       "\n") @@ -1373,7 +1372,7 @@ THREAD means the status will be displayed in a thread view."  (defun mastodon-tl--toot-for-stats (&optional toot)    "Return the TOOT on which we want to extract stats.  If no TOOT is given, the one at point is considered." -  (let* ((original-toot (or toot (get-text-property (point) 'toot-json))) +  (let* ((original-toot (or toot (get-text-property (point) 'item-json)))           (toot (or (alist-get 'status original-toot)                     (when (alist-get 'type original-toot)                       original-toot) @@ -1710,16 +1709,16 @@ BACKWARD means move backward (up) the timeline."            (get-text-property (point) prop)))))  (defun mastodon-tl--newest-id () -  "Return toot-id from the top of the buffer." +  "Return item-id from the top of the buffer."    (save-excursion      (goto-char (point-min)) -    (mastodon-tl--property 'toot-id))) +    (mastodon-tl--property 'item-id)))  (defun mastodon-tl--oldest-id () -  "Return toot-id from the bottom of the buffer." +  "Return item-id from the bottom of the buffer."    (save-excursion      (goto-char (point-max)) -    (mastodon-tl--property 'toot-id nil :backward))) +    (mastodon-tl--property 'item-id nil :backward)))  (defun mastodon-tl--as-string (numeric)    "Convert NUMERIC to string." @@ -1729,7 +1728,7 @@ BACKWARD means move backward (up) the timeline."          (t (error "Numeric:%s must be either a string or a number"                    numeric)))) -(defun mastodon-tl--toot-id (json) +(defun mastodon-tl--item-id (json)    "Find approproiate toot id in JSON.  If the toot has been boosted use the id found in the  reblog portion of the toot.  Otherwise, use the body of @@ -1775,14 +1774,14 @@ view all branches of a thread."    (if (not (eq (mastodon-tl--get-buffer-type) 'thread))        (user-error "You need to be viewing a thread to call this")      (goto-char (point-min)) -    (let ((id (mastodon-tl--property 'base-toot-id))) +    (let ((id (mastodon-tl--property 'base-item-id)))        (mastodon-tl--thread id))))  (defun mastodon-tl--thread (&optional id)    "Open thread buffer for toot at point or with ID."    (interactive) -  (let* ((id (or id (mastodon-tl--property 'base-toot-id :no-move))) -         (type (mastodon-tl--field 'type (mastodon-tl--property 'toot-json :no-move)))) +  (let* ((id (or id (mastodon-tl--property 'base-item-id :no-move))) +         (type (mastodon-tl--field 'type (mastodon-tl--property 'item-json :no-move))))      (if (or (string= type "follow_request")              (string= type "follow")) ; no can thread these          (user-error "No thread") @@ -1839,7 +1838,7 @@ If UNMUTE, unmute it."                (mastodon-tl--buffer-type-eq 'notifications))        (let* ((id                (if (mastodon-tl--buffer-type-eq 'notifications) -                  (get-text-property (point) 'base-toot-id) +                  (get-text-property (point) 'base-item-id)                  (save-match-data                    (string-match "statuses/\\(?2:[[:digit:]]+\\)/context"                                  endpoint) @@ -1887,7 +1886,7 @@ Can be called to toggle NOTIFY on users already being followed.  LANGS is an array parameters alist of languages to filer user's posts by."    (interactive     (list (mastodon-tl--user-handles-get "follow"))) -  (mastodon-tl--do-if-toot +  (mastodon-tl--do-if-item     (mastodon-tl--do-user-action-and-response      user-handle "follow" nil notify langs))) @@ -1895,7 +1894,7 @@ LANGS is an array parameters alist of languages to filer user's posts by."    "Query for USER-HANDLE and enable notifications when they post."    (interactive     (list (mastodon-tl--user-handles-get "enable"))) -  (mastodon-tl--do-if-toot +  (mastodon-tl--do-if-item     (mastodon-tl--follow-user user-handle "true")))  (defun mastodon-tl--disable-notify-user-posts (user-handle) @@ -1911,7 +1910,7 @@ the instance API."    (interactive     (list (mastodon-tl--user-handles-get "filter by language")))    (let ((langs (mastodon-tl--read-filter-langs))) -    (mastodon-tl--do-if-toot +    (mastodon-tl--do-if-item       (mastodon-tl--follow-user user-handle nil langs))))  (defun mastodon-tl--read-filter-langs (&optional langs) @@ -1933,14 +1932,14 @@ LANGS is the accumulated array param alist if we re-run recursively."    "Query for USER-HANDLE from current status and unfollow that user."    (interactive     (list (mastodon-tl--user-handles-get "unfollow"))) -  (mastodon-tl--do-if-toot +  (mastodon-tl--do-if-item     (mastodon-tl--do-user-action-and-response user-handle "unfollow" t)))  (defun mastodon-tl--block-user (user-handle)    "Query for USER-HANDLE from current status and block that user."    (interactive     (list (mastodon-tl--user-handles-get "block"))) -  (mastodon-tl--do-if-toot +  (mastodon-tl--do-if-item     (mastodon-tl--do-user-action-and-response user-handle "block")))  (defun mastodon-tl--unblock-user (user-handle) @@ -1955,7 +1954,7 @@ LANGS is the accumulated array param alist if we re-run recursively."    "Query for USER-HANDLE from current status and mute that user."    (interactive     (list (mastodon-tl--user-handles-get "mute"))) -  (mastodon-tl--do-if-toot +  (mastodon-tl--do-if-item     (mastodon-tl--do-user-action-and-response user-handle "mute")))  (defun mastodon-tl--unmute-user (user-handle) @@ -1970,14 +1969,14 @@ LANGS is the accumulated array param alist if we re-run recursively."    "Query for USER-HANDLE from current status and compose a message to that user."    (interactive     (list (mastodon-tl--user-handles-get "message"))) -  (mastodon-tl--do-if-toot +  (mastodon-tl--do-if-item     (mastodon-toot--compose-buffer (concat "@" user-handle))     (setq mastodon-toot--visibility "direct")     (mastodon-toot--update-status-fields)))  (defun mastodon-tl--user-handles-get (action)    "Get the list of user-handles for ACTION from the current toot." -  (mastodon-tl--do-if-toot +  (mastodon-tl--do-if-item     (let ((user-handles            (cond ((or ; follow suggests / search / foll requests compat:                    (mastodon-tl--buffer-type-eq 'follow-suggestions) @@ -1986,9 +1985,9 @@ LANGS is the accumulated array param alist if we re-run recursively."                    ;; profile follows/followers but not statuses:                    (mastodon-tl--buffer-type-eq 'profile-followers)                    (mastodon-tl--buffer-type-eq 'profile-following)) -                 ;; fetch 'toot-json: +                 ;; fetch 'item-json:                   (list (alist-get 'acct -                                  (mastodon-tl--property 'toot-json :no-move)))) +                                  (mastodon-tl--property 'item-json :no-move))))                  ;; profile view, point in profile details, poss no toots                  ;; needed for e.g. gup.pe groups which show no toots publically:                  ((and (mastodon-tl--profile-buffer-p) @@ -1997,7 +1996,7 @@ LANGS is the accumulated array param alist if we re-run recursively."                                    (mastodon-profile--profile-json))))                  (t                   (mastodon-profile--extract-users-handles -                  (mastodon-profile--toot-json)))))) +                  (mastodon-profile--item-json))))))       ;; return immediately if only 1 handle:       (if (eq 1 (length user-handles))           (car user-handles) @@ -2040,7 +2039,7 @@ LANGS is an array parameters alist of languages to filer user's posts by."                           user-handle (mastodon-profile--profile-json))                        ;; muting/blocking, select from handles in current status                        (mastodon-profile--lookup-account-in-status -                       user-handle (mastodon-profile--toot-json))))) +                       user-handle (mastodon-profile--item-json)))))           (user-id (alist-get 'id account))           (name (if (string-empty-p (alist-get 'display_name account))                     (alist-get 'username account) @@ -2087,7 +2086,7 @@ ARGS is an alist of any parameters to send with the request."  (defun mastodon-tl--get-tags-list ()    "Return the list of tags of the toot at point."    (let* ((toot (or (mastodon-tl--property 'base-toot :no-move) ; fave/boost notifs -                   (mastodon-tl--property 'toot-json :no-move))) +                   (mastodon-tl--property 'item-json :no-move)))           (tags (mastodon-tl--field 'tags toot)))      (mapcar (lambda (x)                (alist-get 'name x)) @@ -2173,25 +2172,25 @@ PREFIX is for `mastodon-tl--show-tag-timeline', which see."  ACCOUNT and TOOT are the data to use."    (let* ((account-id (alist-get 'id account))           (comment (read-string "Add comment [optional]: ")) -         (toot-id (when (y-or-n-p "Also report status at point? ") -                    (mastodon-tl--toot-id toot))) ; base toot if poss +         (item-id (when (y-or-n-p "Also report status at point? ") +                    (mastodon-tl--item-id toot))) ; base toot if poss           (forward-p (when (y-or-n-p "Forward to remote admin? ") "true"))           (rules (when (y-or-n-p "Cite a rule broken? ")                    (mastodon-tl--read-rules-ids)))           (cat (unless rules (if (y-or-n-p "Spam? ") "spam" "other")))) -    (mastodon-tl--report-build-params account-id comment toot-id +    (mastodon-tl--report-build-params account-id comment item-id                                        forward-p cat rules)))  (defun mastodon-tl--report-build-params -    (account-id comment toot-id forward-p cat &optional rules) +    (account-id comment item-id forward-p cat &optional rules)    "Build the parameters alist based on user responses. -ACCOUNT-ID, COMMENT, TOOT-ID, FORWARD-P, CAT, and RULES are all from +ACCOUNT-ID, COMMENT, ITEM-ID, FORWARD-P, CAT, and RULES are all from  `mastodon-tl--report-params', which see."    (let ((params `(("account_id" . ,account-id)                    ,(when comment                       `("comment" . ,comment)) -                  ,(when toot-id -                     `("status_ids[]" . ,toot-id)) +                  ,(when item-id +                     `("status_ids[]" . ,item-id))                    ,(when forward-p                       `("forward" . ,forward-p))                    ,(when cat @@ -2212,11 +2211,11 @@ Optionally report the toot at point, add a comment, cite rules  that have been broken, forward the report to the remove admin,  report the account for spam."    (interactive) -  (mastodon-tl--do-if-toot +  (mastodon-tl--do-if-item     (when (y-or-n-p "Report author of toot at point?")       (let* ((url (mastodon-http--api "reports"))              (toot (mastodon-tl--toot-or-base -                   (mastodon-tl--property 'toot-json :no-move))) +                   (mastodon-tl--property 'item-json :no-move)))              (account (alist-get 'account toot))              (handle (alist-get 'acct account))              (params (mastodon-tl--report-params account toot)) @@ -2599,6 +2598,7 @@ This location is defined by a non-nil value of    (interactive)    (if (or (mastodon-tl--buffer-type-eq 'trending-statuses)            (mastodon-tl--buffer-type-eq 'trending-tags) +          (mastodon-tl--buffer-type-eq 'follow-suggestions)            (mastodon-tl--search-buffer-p))        (message "update not available in this view.")      ;; FIXME: handle update for search and trending buffers @@ -2606,7 +2606,7 @@ This location is defined by a non-nil value of             (update-function (mastodon-tl--update-function)))        ;; update a thread, without calling `mastodon-tl--updated-json':        (if (mastodon-tl--buffer-type-eq 'thread) -          (let ((thread-id (mastodon-tl--property 'toot-id))) +          (let ((thread-id (mastodon-tl--property 'item-id)))              (funcall update-function thread-id))          ;; update other timelines:          (let* ((id (mastodon-tl--newest-id)) diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el index 51e0458..e9b98dd 100644 --- a/lisp/mastodon-toot.el +++ b/lisp/mastodon-toot.el @@ -75,7 +75,7 @@  (autoload 'mastodon-tl--as-string "mastodon-tl")  (autoload 'mastodon-tl--buffer-type-eq "mastodon-tl")  (autoload 'mastodon-tl--clean-tabs-and-nl "mastodon-tl") -(autoload 'mastodon-tl--do-if-toot-strict "mastodon-tl") +(autoload 'mastodon-tl--do-if-item-strict "mastodon-tl")  (autoload 'mastodon-tl--field "mastodon-tl")  (autoload 'mastodon-tl--find-property-range "mastodon-tl")  (autoload 'mastodon-tl--find-property-range "mastodon-tl") @@ -86,7 +86,7 @@  (autoload 'mastodon-tl--render-text "mastodon-tl")  (autoload 'mastodon-tl--set-buffer-spec "mastodon-tl")  (autoload 'mastodon-tl--symbol "mastodon-tl") -(autoload 'mastodon-tl--toot-id "mastodon-tl") +(autoload 'mastodon-tl--item-id "mastodon-tl")  (autoload 'mastodon-toot "mastodon")  (autoload 'mastodon-views--cancel-scheduled-toot "mastodon-views")  (autoload 'mastodon-views--view-scheduled-toots "mastodon-views") @@ -203,7 +203,7 @@ Should be at least 5 minutes into the future.")  (defvar-local mastodon-toot--reply-to-id nil    "Buffer-local variable to hold the id of the toot being replied to.") -(defvar-local mastodon-toot--edit-toot-id nil +(defvar-local mastodon-toot--edit-item-id nil    "The id of the toot being edited.")  (defvar-local mastodon-toot-previous-window-config nil @@ -335,7 +335,7 @@ Remove MARKER if REMOVE is non-nil, otherwise add it."    "Take ACTION on toot at point, then execute CALLBACK.  Makes a POST request to the server. Used for favouriting,  boosting, or bookmarking toots." -  (let* ((id (mastodon-tl--property 'base-toot-id)) +  (let* ((id (mastodon-tl--property 'base-item-id))           (url (mastodon-http--api                 (concat "statuses/" (mastodon-tl--as-string id) "/" action)))           (response (mastodon-http--post url))) @@ -344,13 +344,13 @@ boosting, or bookmarking toots."  (defun mastodon-toot--toggle-boost-or-favourite (type)    "Toggle boost or favourite of toot at `point'.  TYPE is a symbol, either `favourite' or `boost.'" -  (mastodon-tl--do-if-toot-strict +  (mastodon-tl--do-if-item-strict     (let* ((boost-p (equal type 'boost)) -          ;;   (has-id (mastodon-tl--property 'base-toot-id)) +          ;;   (has-id (mastodon-tl--property 'base-item-id))            (byline-region ;(when has-id             (mastodon-tl--find-property-range 'byline (point)))            (id (when byline-region -                (mastodon-tl--as-string (mastodon-tl--property 'base-toot-id)))) +                (mastodon-tl--as-string (mastodon-tl--property 'base-item-id))))            (boosted (when byline-region                       (get-text-property (car byline-region) 'boosted-p)))            (faved (when byline-region @@ -361,16 +361,16 @@ TYPE is a symbol, either `favourite' or `boost.'"            (msg (if boosted "unboosted" "boosted"))            (action-string (if boost-p "boost" "favourite"))            (remove (if boost-p (when boosted t) (when faved t))) -          (toot-json (mastodon-tl--property 'toot-json)) -          (toot-type (alist-get 'type toot-json)) -          (visibility (mastodon-tl--field 'visibility toot-json))) +          (item-json (mastodon-tl--property 'item-json)) +          (toot-type (alist-get 'type item-json)) +          (visibility (mastodon-tl--field 'visibility item-json)))       (if byline-region           (if (and (or (equal visibility "direct")                        (equal visibility "private"))                    boost-p)               (message "You cant boost posts with visibility: %s" visibility)             (cond ;; actually there's nothing wrong with faving/boosting own toots! -            ;;((mastodon-toot--own-toot-p (mastodon-tl--property 'toot-json)) +            ;;((mastodon-toot--own-toot-p (mastodon-tl--property 'item-json))              ;;(error "You can't %s your own toots" action-string))              ;; & nothing wrong with faving/boosting own toots from notifs:              ;; this boosts/faves the base toot, not the notif status @@ -443,8 +443,8 @@ SUBTRACT means we are un-favouriting or unboosting, so we decrement."  (defun mastodon-toot--toggle-bookmark ()    "Bookmark or unbookmark toot at point."    (interactive) -  (mastodon-tl--do-if-toot-strict -   (let* ((id (mastodon-tl--property 'base-toot-id)) +  (mastodon-tl--do-if-item-strict +   (let* ((id (mastodon-tl--property 'base-item-id))            (bookmarked-p (mastodon-tl--property 'bookmarked-p))            (prompt (if bookmarked-p                        (format "Toot already bookmarked. Remove? ") @@ -484,8 +484,8 @@ SUBTRACT means we are un-favouriting or unboosting, so we decrement."  (defun mastodon-toot--list-toot-boosters-or-favers (&optional favourite)    "List the favouriters or boosters of toot at point.  With FAVOURITE, list favouriters, else list boosters." -  (mastodon-tl--do-if-toot-strict -   (let* ((base-toot (mastodon-tl--property 'base-toot-id)) +  (mastodon-tl--do-if-item-strict +   (let* ((base-toot (mastodon-tl--property 'base-item-id))            (endpoint (if favourite "favourited_by" "reblogged_by"))            (url (mastodon-http--api (format "statuses/%s/%s" base-toot endpoint)))            (params '(("limit" . "80"))) @@ -515,7 +515,7 @@ base toot."  (defun mastodon-toot--toot-url ()    "Return the URL of the base toot at point."    (let* ((toot (or (mastodon-tl--property 'base-toot) -                   (mastodon-tl--property 'toot-json)))) +                   (mastodon-tl--property 'item-json))))      (if (mastodon-tl--field 'reblog toot)          (alist-get 'url (alist-get 'reblog toot))        (alist-get 'url toot)))) @@ -526,7 +526,7 @@ If the toot is a fave/boost notification, copy the text of the  base toot."    (interactive)    (let* ((toot (or (mastodon-tl--property 'base-toot) -                   (mastodon-tl--property 'toot-json)))) +                   (mastodon-tl--property 'item-json))))      (kill-new (mastodon-tl--content toot))      (message "Toot content copied to the clipboard."))) @@ -537,7 +537,7 @@ Uses `lingva.el'."    (if (not (require 'lingva nil :no-error))        (message "Looks like you need to install lingva.el first.")      (if mastodon-tl--buffer-spec -        (if-let ((toot (mastodon-tl--property 'toot-json))) +        (if-let ((toot (mastodon-tl--property 'item-json)))              (lingva-translate nil                                (mastodon-tl--content toot)                                (when mastodon-tl--enable-proportional-fonts @@ -555,7 +555,7 @@ Uses `lingva.el'."    "Pin or unpin user's toot at point."    (interactive)    (let* ((toot (or (mastodon-tl--property 'base-toot) ;fave/boost notifs -                   (mastodon-tl--property 'toot-json))) +                   (mastodon-tl--property 'item-json)))           (pinnable-p (mastodon-toot--own-toot-p toot))           (pinned-p (equal (alist-get 'pinned toot) t))           (action (if pinned-p "unpin" "pin")) @@ -584,8 +584,8 @@ Uses `lingva.el'."  NO-REDRAFT means delete toot only."    (interactive)    (let* ((toot (or (mastodon-tl--property 'base-toot) ;fave/boost notifs -                   (mastodon-tl--property 'toot-json))) -         (id (mastodon-tl--as-string (mastodon-tl--toot-id toot))) +                   (mastodon-tl--property 'item-json))) +         (id (mastodon-tl--as-string (mastodon-tl--item-id toot)))           (url (mastodon-http--api (format "statuses/%s" id)))           (toot-cw (alist-get 'spoiler_text toot))           (toot-visibility (alist-get 'visibility toot)) @@ -806,13 +806,13 @@ to `emojify-user-emojis', and the emoji data is updated."    "POST contents of new-toot buffer to Mastodon instance and kill buffer.  If media items have been attached and uploaded with  `mastodon-toot--attach-media', they are attached to the toot. -If `mastodon-toot--edit-toot-id' is non-nil, PUT contents to +If `mastodon-toot--edit-item-id' is non-nil, PUT contents to  instance to edit a toot."    (interactive)    (let* ((toot (mastodon-toot--remove-docs))           (scheduled mastodon-toot--scheduled-for)           (scheduled-id mastodon-toot--scheduled-id) -         (edit-id mastodon-toot--edit-toot-id) +         (edit-id mastodon-toot--edit-item-id)           (endpoint (if edit-id ; we are sending an edit:                         (mastodon-http--api (format "statuses/%s" edit-id))                       (mastodon-http--api "statuses"))) @@ -879,10 +879,10 @@ instance to edit a toot."    "Edit the user's toot at point."    (interactive)    (let ((toot (or (mastodon-tl--property 'base-toot) ; fave/boost notifs -                  (mastodon-tl--property 'toot-json)))) +                  (mastodon-tl--property 'item-json))))      (if (not (mastodon-toot--own-toot-p toot))          (message "You can only edit your own toots.") -      (let* ((id (mastodon-tl--as-string (mastodon-tl--toot-id toot))) +      (let* ((id (mastodon-tl--as-string (mastodon-tl--item-id toot)))               (source (mastodon-toot--get-toot-source id))               (content (alist-get 'text source))               (source-cw (alist-get 'spoiler_text source)) @@ -896,7 +896,7 @@ instance to edit a toot."            (mastodon-toot--set-toot-properties reply-id toot-visibility                                                source-cw toot-language)            (mastodon-toot--update-status-fields) -          (setq mastodon-toot--edit-toot-id id)))))) +          (setq mastodon-toot--edit-item-id id))))))  (defun mastodon-toot--get-toot-source (id)    "Fetch the source JSON of toot with ID." @@ -911,7 +911,7 @@ instance to edit a toot."  (defun mastodon-toot--view-toot-edits ()    "View editing history of the toot at point in a popup buffer."    (interactive) -  (let ((id (mastodon-tl--property 'base-toot-id)) +  (let ((id (mastodon-tl--property 'base-item-id))          (history (mastodon-tl--property 'edit-history))          (buf "*mastodon-toot-edits*"))      (with-mastodon-buffer buf #'special-mode :other-window @@ -1070,8 +1070,8 @@ If TAGS, we search for tags, else we search for handles."  Customize `mastodon-toot-display-orig-in-reply-buffer' to display  text of the toot being replied to in the compose buffer."    (interactive) -  (mastodon-tl--do-if-toot-strict -   (let* ((toot (mastodon-tl--property 'toot-json)) +  (mastodon-tl--do-if-item-strict +   (let* ((toot (mastodon-tl--property 'item-json))            ;; no-move arg for base toot: don't try next toot            (base-toot (mastodon-tl--property 'base-toot :no-move)) ; for new notifs handling            (id (mastodon-tl--as-string (mastodon-tl--field 'id (or base-toot toot)))) diff --git a/lisp/mastodon-views.el b/lisp/mastodon-views.el index 7a65b30..8571e15 100644 --- a/lisp/mastodon-views.el +++ b/lisp/mastodon-views.el @@ -55,7 +55,7 @@  (autoload 'mastodon-tl--goto-prev-toot "mastodon-tl")  (autoload 'mastodon-tl--goto-next-item "mastodon-tl")  (autoload 'mastodon-tl--goto-first-item "mastodon-tl") -(autoload 'mastodon-tl--do-if-toot "mastodon-tl") +(autoload 'mastodon-tl--do-if-item "mastodon-tl")  (autoload 'mastodon-tl--set-buffer-spec "mastodon-tl")  (autoload 'mastodon-tl--render-text "mastodon-tl")  (autoload 'mastodon-notifications--follow-request-accept "mastodon-notifications") @@ -179,7 +179,8 @@ provides the JSON data."                 (format "Looks like you have no %s for now." view-name)                 'face 'font-lock-comment-face                 'byline t -               'toot-id "0")) ; so point can move here when no item +               'item-type 'no-item ; for nav +               'item-id "0")) ; so point can move here when no item      (funcall insert-fun data)      (goto-char (point-min)))    ;; (when data @@ -226,7 +227,8 @@ provides the JSON data."      (insert       (propertize list-name                   'byline t ; so we nav here -                 'toot-id "0" ; so we nav here +                 'item-id "0" ; so we nav here +                 'item-type 'user                   'help-echo "RET: view list timeline, d: delete this list, \  a: add account to this list, r: remove account from this list"                   'list t @@ -402,7 +404,7 @@ If ACCOUNT-ID and HANDLE are provided use them rather than prompting."  (defun mastodon-views--add-toot-account-at-point-to-list ()    "Prompt for a list, and add the account of the toot at point to it."    (interactive) -  (let* ((toot (mastodon-tl--property 'toot-json)) +  (let* ((toot (mastodon-tl--property 'item-json))           (account (mastodon-tl--field 'account toot))           (account-id (mastodon-tl--field 'id account))           (handle (mastodon-tl--field 'acct account))) @@ -509,7 +511,7 @@ JSON is the data returned by the server."                           " | "                           (mastodon-toot--iso-to-human .scheduled_at))                   'byline t ; so we nav here -                 'toot-id "0" ; so we nav here +                 'item-id "0" ; so we nav here                   'face 'font-lock-comment-face                   'keymap mastodon-views--scheduled-map                   'scheduled-json toot @@ -614,7 +616,7 @@ JSON is the filters data."                                  (mapconcat #'identity contexts ", "))))      (insert       (propertize filter-string -                 'toot-id id ;for goto-next-filter compat +                 'item-id id ;for goto-next-filter compat                   'phrase phrase                   'byline t) ;for goto-next-filter compat       "\n\n"))) @@ -653,7 +655,7 @@ Prompt for a context, must be a list containting at least one of \"home\",  (defun mastodon-views--delete-filter ()    "Delete filter at point."    (interactive) -  (let* ((filter-id (mastodon-tl--property 'toot-id :no-move)) +  (let* ((filter-id (mastodon-tl--property 'item-id :no-move))           (phrase (mastodon-tl--property 'phrase :no-move))           (url (mastodon-http--api (format "filters/%s" filter-id))))      (if (null phrase) @@ -745,14 +747,14 @@ MISSKEY means the instance is a Misskey or derived server."        (let ((response (mastodon-http--get-json                         (mastodon-http--api "instance") nil nil :vector)))          (mastodon-views--instance-response-fun response brief instance)) -    (mastodon-tl--do-if-toot +    (mastodon-tl--do-if-item       (let* ((toot (if (mastodon-tl--profile-buffer-p)                        ;; we may be on profile description itself:                        (or (mastodon-tl--property 'profile-json)                            ;; or on profile account listings, or just toots: -                          (mastodon-tl--property 'toot-json)) +                          (mastodon-tl--property 'item-json))                      ;; normal timeline/account listing: -                    (mastodon-tl--property 'toot-json))) +                    (mastodon-tl--property 'item-json)))              (reblog (alist-get 'reblog toot))              (account (or (alist-get 'account reblog)                           (alist-get 'account toot) | 
