annotate elpa/mastodon-0.8.0/mastodon-tl.el @ 188:cf476cceb7b2

mastodon: new package
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Wed, 13 Feb 2019 15:38:33 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
188
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
1 ;;; mastodon-tl.el --- HTTP request/response functions for mastodon.el -*- lexical-binding: t -*-
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
2
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
3 ;; Copyright (C) 2017 Johnson Denen
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
4 ;; Author: Johnson Denen <johnson.denen@gmail.com>
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
5 ;; Version: 0.8.0
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
6 ;; Homepage: https://github.com/jdenen/mastodon.el
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
7 ;; Package-Requires: ((emacs "24.4"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
8
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
9 ;; This file is not part of GNU Emacs.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
10
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
11 ;; This file is part of mastodon.el.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
12
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
13 ;; mastodon.el is free software: you can redistribute it and/or modify
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
16 ;; (at your option) any later version.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
17
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
18 ;; mastodon.el is distributed in the hope that it will be useful,
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
22
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
24 ;; along with mastodon.el. If not, see <http://www.gnu.org/licenses/>.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
25
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
26 ;;; Commentary:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
27
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
28 ;; mastodon-tl.el provides timeline functions.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
29
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
30 ;;; Code:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
31
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
32 (require 'shr)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
33 (require 'thingatpt) ;; for word-at-point
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
34 (require 'time-date)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
35
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
36 (autoload 'mastodon-http--api "mastodon-http")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
37 (autoload 'mastodon-http--get-json "mastodon-http")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
38 (autoload 'mastodon-media--get-avatar-rendering "mastodon-media")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
39 (autoload 'mastodon-media--get-media-link-rendering "mastodon-media")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
40 (autoload 'mastodon-media--inline-images "mastodon-media")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
41 (autoload 'mastodon-mode "mastodon")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
42 (autoload 'mastodon-profile--account-from-id "mastodon.el-profile.el")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
43 (autoload 'mastodon-profile--make-author-buffer "mastodon-profile.el")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
44 (autoload 'mastodon-profile--search-account-by-handle "mastodon.el-profile.el")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
45 (defvar mastodon-instance-url)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
46 (defvar mastodon-toot-timestamp-format)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
47 (defvar shr-use-fonts) ;; need to declare it since Emacs24 didn't have this
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
48
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
49 (defgroup mastodon-tl nil
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
50 "Timelines in Mastodon."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
51 :prefix "mastodon-tl-"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
52 :group 'mastodon)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
53
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
54 (defcustom mastodon-tl--enable-relative-timestamps t
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
55 "Nonnil to enable showing relative (to the current time) timestamps.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
56
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
57 This will require periodic updates of a timeline buffer to
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
58 keep the timestamps current as time progresses."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
59 :group 'mastodon-tl
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
60 :type '(boolean :tag "Enable relative timestamps and background updater task"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
61
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
62 (defcustom mastodon-tl--enable-proportional-fonts nil
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
63 "Nonnil to enable using proportional fonts when rendering HTML.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
64
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
65 By default fixed width fonts are used."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
66 :group 'mastodon-tl
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
67 :type '(boolean :tag "Enable using proportional rather than fixed \
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
68 width fonts when rendering HTML text"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
69
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
70 (defvar mastodon-tl--buffer-spec nil
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
71 "A unique identifier and functions for each Mastodon buffer.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
72 (make-variable-buffer-local 'mastodon-tl--buffer-spec)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
73
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
74 (defvar mastodon-tl--show-avatars-p
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
75 (image-type-available-p 'imagemagick)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
76 "A boolean value stating whether to show avatars in timelines.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
77
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
78 (defvar mastodon-tl--update-point nil
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
79 "When updating a mastodon buffer this is where new toots will be inserted.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
80
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
81 If nil `(point-min)' is used instead.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
82 (make-variable-buffer-local 'mastodon-tl--update-point)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
83
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
84 (defvar mastodon-tl--display-media-p t
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
85 "A boolean value stating whether to show media in timelines.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
86
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
87 (defvar mastodon-tl--timestamp-next-update nil
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
88 "The timestamp when the buffer should next be scanned to update the timestamps.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
89 (make-variable-buffer-local 'mastodon-tl--timestamp-next-update)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
90
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
91 (defvar mastodon-tl--timestamp-update-timer nil
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
92 "The timer that, when set will scan the buffer to update the timestamps.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
93 (make-variable-buffer-local 'mastodon-tl--timestamp-update-timer)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
94
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
95 (defvar mastodon-tl--link-keymap
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
96 (let ((map (make-sparse-keymap)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
97 (define-key map [return] 'mastodon-tl--do-link-action-at-point)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
98 (define-key map [mouse-2] 'mastodon-tl--do-link-action)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
99 (define-key map [follow-link] 'mouse-face)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
100 (keymap-canonicalize map))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
101 "The keymap set for things in the buffer that act like links (except for shr.el generate links).
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
102
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
103 This will make the region of text act like like a link with mouse
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
104 highlighting, mouse click action tabbing to next/previous link
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
105 etc.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
106
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
107 (defvar mastodon-tl--shr-map-replacement
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
108 (let ((map (copy-keymap shr-map)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
109 ;; Replace the move to next/previous link bindings with our
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
110 ;; version that knows about more types of links.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
111 (define-key map [remap shr-next-link] 'mastodon-tl--next-tab-item)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
112 (define-key map [remap shr-previous-link] 'mastodon-tl--previous-tab-item)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
113 (keymap-canonicalize map))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
114 "The keymap to be set for shr.el generated links that are not images.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
115
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
116 We need to override the keymap so tabbing will navigate to all
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
117 types of mastodon links and not just shr.el-generated ones.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
118
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
119 (defvar mastodon-tl--shr-image-map-replacement
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
120 (let ((map (copy-keymap (if (boundp 'shr-image-map)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
121 shr-image-map
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
122 shr-map))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
123 ;; Replace the move to next/previous link bindings with our
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
124 ;; version that knows about more types of links.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
125 (define-key map [remap shr-next-link] 'mastodon-tl--next-tab-item)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
126 (define-key map [remap shr-previous-link] 'mastodon-tl--previous-tab-item)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
127 (keymap-canonicalize map))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
128 "The keymap to be set for shr.el generated image links.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
129
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
130 We need to override the keymap so tabbing will navigate to all
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
131 types of mastodon links and not just shr.el-generated ones.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
132
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
133 (defun mastodon-tl--next-tab-item ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
134 "Move to the next interesting item.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
135
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
136 This could be the next toot, link, or image; whichever comes first.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
137 Don't move if nothing else to move to is found, i.e. near the end of the buffer.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
138 This also skips tab items in invisible text, i.e. hidden spoiler text."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
139 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
140 (let (next-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
141 (search-pos (point)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
142 (while (and (setq next-range (mastodon-tl--find-next-or-previous-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
143 'mastodon-tab-stop search-pos nil))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
144
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
145 (get-text-property (car next-range) 'invisible)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
146 (setq search-pos (1+ (cdr next-range))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
147 ;; do nothing, all the action in in the while condition
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
148 )
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
149 (if (null next-range)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
150 (message "Nothing else here.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
151 (goto-char (car next-range))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
152 (message "%s" (get-text-property (point) 'help-echo)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
153
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
154 (defun mastodon-tl--previous-tab-item ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
155 "Move to the previous interesting item.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
156
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
157 This could be the previous toot, link, or image; whichever comes first.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
158 Don't move if nothing else to move to is found, i.e. near the start of the buffer.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
159 This also skips tab items in invisible text, i.e. hidden spoiler text."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
160 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
161 (let (next-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
162 (search-pos (point)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
163 (while (and (setq next-range (mastodon-tl--find-next-or-previous-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
164 'mastodon-tab-stop search-pos t))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
165 (get-text-property (car next-range) 'invisible)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
166 (setq search-pos (1- (car next-range))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
167 ;; do nothing, all the action in in the while condition
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
168 )
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
169 (if (null next-range)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
170 (message "Nothing else before this.")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
171 (goto-char (car next-range))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
172 (message "%s" (get-text-property (point) 'help-echo)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
173
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
174 (defun mastodon-tl--get-federated-timeline ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
175 "Opens federated timeline."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
176 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
177 (mastodon-tl--init
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
178 "federated" "timelines/public" 'mastodon-tl--timeline))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
179
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
180 (defun mastodon-tl--get-home-timeline ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
181 "Opens home timeline."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
182 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
183 (mastodon-tl--init
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
184 "home" "timelines/home" 'mastodon-tl--timeline))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
185
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
186 (defun mastodon-tl--get-local-timeline ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
187 "Opens local timeline."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
188 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
189 (mastodon-tl--init
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
190 "local" "timelines/public?local=true" 'mastodon-tl--timeline))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
191
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
192 (defun mastodon-tl--get-tag-timeline ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
193 "Prompts for tag and opens its timeline."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
194 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
195 (let* ((word (or (word-at-point) ""))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
196 (input (read-string (format "Tag(%s): " word)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
197 (tag (if (equal input "") word input)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
198 (mastodon-tl--show-tag-timeline tag)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
199
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
200 (defun mastodon-tl--show-tag-timeline (tag)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
201 "Opens a new buffer showing the timeline of posts with hastag TAG."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
202 (mastodon-tl--init
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
203 (concat "tag-" tag) (concat "timelines/tag/" tag) 'mastodon-tl--timeline))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
204
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
205 (defun mastodon-tl--goto-toot-pos (find-pos refresh &optional pos)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
206 "Search for toot with FIND-POS.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
207 If search returns nil, execute REFRESH function.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
208
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
209 Optionally start from POS."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
210 (let* ((npos (funcall find-pos
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
211 (or pos (point))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
212 'byline
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
213 (current-buffer))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
214 (if npos
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
215 (if (not (get-text-property npos 'toot-id))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
216 (mastodon-tl--goto-toot-pos find-pos refresh npos)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
217 (goto-char npos))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
218 (funcall refresh))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
219
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
220 (defun mastodon-tl--goto-next-toot ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
221 "Jump to next toot header."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
222 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
223 (mastodon-tl--goto-toot-pos 'next-single-property-change
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
224 'mastodon-tl--more))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
225
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
226 (defun mastodon-tl--goto-prev-toot ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
227 "Jump to last toot header."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
228 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
229 (mastodon-tl--goto-toot-pos 'previous-single-property-change
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
230 'mastodon-tl--update))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
231
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
232 (defun mastodon-tl--remove-html (toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
233 "Remove unrendered tags from TOOT."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
234 (let* ((t1 (replace-regexp-in-string "<\/p>" "\n\n" toot))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
235 (t2 (replace-regexp-in-string "<\/?span>" "" t1)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
236 (replace-regexp-in-string "<span class=\"h-card\">" "" t2)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
237
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
238 (defun mastodon-tl--byline-author (toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
239 "Propertize author of TOOT."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
240 (let* ((account (cdr (assoc 'account toot)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
241 (handle (cdr (assoc 'acct account)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
242 (name (cdr (assoc 'display_name account)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
243 (profile-url (cdr (assoc 'url account)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
244 (avatar-url (cdr (assoc 'avatar account))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
245 ;; TODO: Once we have a view for a user (e.g. their posts
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
246 ;; timeline) make this a tab-stop and attach an action
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
247 (concat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
248 (when (and mastodon-tl--show-avatars-p mastodon-tl--display-media-p)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
249 (mastodon-media--get-avatar-rendering avatar-url))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
250 (propertize name 'face 'mastodon-display-name-face)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
251 " ("
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
252 (propertize (concat "@" handle)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
253 'face 'mastodon-handle-face
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
254 'mouse-face 'highlight
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
255 ;; TODO: Replace url browsing with native profile viewing
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
256 'mastodon-tab-stop 'user-handle
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
257 'account account
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
258 'shr-url profile-url
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
259 'keymap mastodon-tl--link-keymap
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
260 'mastodon-handle (concat "@" handle)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
261 'help-echo (concat "Browse user profile of @" handle))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
262 ")")))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
263
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
264 (defun mastodon-tl--byline-boosted (toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
265 "Add byline for boosted data from TOOT."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
266 (let ((reblog (cdr (assoc 'reblog toot))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
267 (when reblog
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
268 (concat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
269 " "
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
270 (propertize "Boosted" 'face 'mastodon-boosted-face)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
271 " "
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
272 (mastodon-tl--byline-author reblog)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
273
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
274 (defun mastodon-tl--field (field toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
275 "Return FIELD from TOOT.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
276
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
277 Return value from boosted content if available."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
278 (or (cdr (assoc field (cdr (assoc 'reblog toot))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
279 (cdr (assoc field toot))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
280
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
281 (defun mastodon-tl--relative-time-details (timestamp &optional current-time)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
282 "Returns cons of (descriptive string . next change) for the TIMESTAMP.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
283
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
284 Use the optional CURRENT-TIME as the current time (only used for
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
285 reliable testing).
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
286
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
287 The descriptive string is a human readable version relative to
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
288 the current time while the next change timestamp give the first
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
289 time that this description will change in the future.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
290
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
291 TIMESTAMP is assumed to be in the past."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
292 (let* ((now (or current-time (current-time)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
293 (time-difference (time-subtract now timestamp))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
294 (seconds-difference (float-time time-difference))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
295 (regular-response
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
296 (lambda (seconds-difference multiplier unit-name)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
297 (let ((n (floor (+ 0.5 (/ seconds-difference multiplier)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
298 (cons (format "%d %ss ago" n unit-name)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
299 (* (+ 0.5 n) multiplier)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
300 (relative-result
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
301 (cond
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
302 ((< seconds-difference 60)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
303 (cons "less than a minute ago"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
304 60))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
305 ((< seconds-difference (* 1.5 60))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
306 (cons "one minute ago"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
307 90)) ;; at 90 secs
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
308 ((< seconds-difference (* 60 59.5))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
309 (funcall regular-response seconds-difference 60 "minute"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
310 ((< seconds-difference (* 1.5 60 60))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
311 (cons "one hour ago"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
312 (* 60 90))) ;; at 90 minutes
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
313 ((< seconds-difference (* 60 60 23.5))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
314 (funcall regular-response seconds-difference (* 60 60) "hour"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
315 ((< seconds-difference (* 1.5 60 60 24))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
316 (cons "one day ago"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
317 (* 1.5 60 60 24))) ;; at a day and a half
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
318 ((< seconds-difference (* 60 60 24 6.5))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
319 (funcall regular-response seconds-difference (* 60 60 24) "day"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
320 ((< seconds-difference (* 1.5 60 60 24 7))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
321 (cons "one week ago"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
322 (* 1.5 60 60 24 7))) ;; a week and a half
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
323 ((< seconds-difference (* 60 60 24 7 52))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
324 (if (= 52 (floor (+ 0.5 (/ seconds-difference 60 60 24 7))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
325 (cons "52 weeks ago"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
326 (* 60 60 24 7 52))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
327 (funcall regular-response seconds-difference (* 60 60 24 7) "week")))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
328 ((< seconds-difference (* 1.5 60 60 24 365))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
329 (cons "one year ago"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
330 (* 60 60 24 365 1.5))) ;; a year and a half
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
331 (t
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
332 (funcall regular-response seconds-difference (* 60 60 24 365.25) "year")))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
333 (cons (car relative-result)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
334 (time-add timestamp (seconds-to-time (cdr relative-result))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
335
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
336 (defun mastodon-tl--relative-time-description (timestamp &optional current-time)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
337 "Returns a string with a human readable description of TIMESTMAP relative to the current time.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
338
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
339 Use the optional CURRENT-TIME as the current time (only used for
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
340 reliable testing).
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
341
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
342 E.g. this could return something like \"1 min ago\", \"yesterday\", etc.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
343 TIME-STAMP is assumed to be in the past."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
344 (car (mastodon-tl--relative-time-details timestamp current-time)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
345
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
346 (defun mastodon-tl--byline (toot author-byline action-byline)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
347 "Generate byline for TOOT.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
348
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
349 AUTHOR-BYLINE is function for adding the author portion of
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
350 the byline that takes one variable.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
351 ACTION-BYLINE is a function for adding an action, such as boosting
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
352 favouriting and following to the byline. It also takes a single function. By default
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
353 it is `mastodon-tl--byline-boosted'"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
354 (let ((parsed-time (date-to-time (mastodon-tl--field 'created_at toot)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
355 (faved (equal 't (mastodon-tl--field 'favourited toot)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
356 (boosted (equal 't (mastodon-tl--field 'reblogged toot))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
357 (concat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
358 (propertize "\n | " 'face 'default)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
359 (propertize
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
360 (concat (when boosted
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
361 (format "(%s) "
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
362 (propertize "B" 'face 'mastodon-boost-fave-face)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
363 (when faved
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
364 (format "(%s) "
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
365 (propertize "F" 'face 'mastodon-boost-fave-face)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
366 (funcall author-byline toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
367 (funcall action-byline toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
368 " "
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
369 ;; TODO: Once we have a view for toot (responses etc.) make
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
370 ;; this a tab stop and attach an action.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
371 (propertize
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
372 (format-time-string mastodon-toot-timestamp-format parsed-time)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
373 'timestamp parsed-time
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
374 'display (if mastodon-tl--enable-relative-timestamps
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
375 (mastodon-tl--relative-time-description parsed-time)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
376 parsed-time))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
377 (propertize "\n ------------" 'face 'default))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
378 'favourited-p faved
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
379 'boosted-p boosted
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
380 'byline t))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
381
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
382 (defun mastodon-tl--render-text (string toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
383 "Returns a propertized text giving the rendering of the given HTML string STRING.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
384
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
385 The contents comes from the given TOOT which is used in parsing
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
386 links in the text. If TOOT is nil no parsing occurs."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
387 (with-temp-buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
388 (insert string)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
389 (let ((shr-use-fonts mastodon-tl--enable-proportional-fonts)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
390 (shr-width (when mastodon-tl--enable-proportional-fonts
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
391 (window-width))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
392 (shr-render-region (point-min) (point-max)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
393 ;; Make all links a tab stop recognized by our own logic, make things point
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
394 ;; to our own logic (e.g. hashtags), and update keymaps where needed:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
395 (when toot
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
396 (let (region)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
397 (while (setq region (mastodon-tl--find-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
398 'shr-url (or (cdr region) (point-min))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
399 (mastodon-tl--process-link toot
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
400 (car region) (cdr region)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
401 (get-text-property (car region) 'shr-url)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
402 (buffer-string)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
403
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
404 (defun mastodon-tl--process-link (toot start end url)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
405 (let* (mastodon-tab-stop-type
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
406 keymap
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
407 (help-echo (get-text-property start 'help-echo))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
408 extra-properties
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
409 (toot-url (mastodon-tl--field 'url toot))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
410 (toot-url (when toot-url (url-generic-parse-url toot-url)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
411 (toot-instance-url (if toot-url
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
412 (concat (url-type toot-url) "://"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
413 (url-host toot-url))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
414 mastodon-instance-url))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
415 (maybe-hashtag (mastodon-tl--extract-hashtag-from-url
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
416 url toot-instance-url))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
417 (maybe-userhandle (mastodon-tl--extract-userhandle-from-url
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
418 url (buffer-substring-no-properties start end))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
419 (cond (;; Hashtags:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
420 maybe-hashtag
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
421 (setq mastodon-tab-stop-type 'hashtag
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
422 keymap mastodon-tl--link-keymap
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
423 help-echo (concat "Browse tag #" maybe-hashtag)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
424 extra-properties (list 'mastodon-tag maybe-hashtag)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
425
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
426 (;; User handles:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
427 maybe-userhandle
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
428 (let ((maybe-userid (mastodon-tl--extract-userid-toot
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
429 toot maybe-userhandle)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
430 (setq mastodon-tab-stop-type 'user-handle
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
431 keymap mastodon-tl--link-keymap
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
432 help-echo (concat "Browse user profile of " maybe-userhandle)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
433 extra-properties (append
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
434 (list 'mastodon-handle maybe-userhandle)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
435 (when maybe-userid
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
436 (list 'acccount-id maybe-userid))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
437 ;; Anything else:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
438 (t
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
439 ;; Leave it as a url handled by shr.el.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
440 ;; (We still have to replace the keymap so that tabbing works.)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
441 (setq keymap (if (eq shr-map (get-text-property start 'keymap))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
442 mastodon-tl--shr-map-replacement
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
443 mastodon-tl--shr-image-map-replacement)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
444 mastodon-tab-stop-type 'shr-url)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
445 (add-text-properties start end
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
446 (append
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
447 (list 'mastodon-tab-stop mastodon-tab-stop-type
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
448 'keymap keymap
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
449 'help-echo help-echo)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
450 extra-properties))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
451
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
452 (defun mastodon-tl--extract-userid-toot (toot acct)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
453 "Extract a user id for an ACCT from mentions in a TOOT."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
454 (let* ((mentions (append (cdr (assoc 'mentions toot)) nil))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
455 (mention (pop mentions))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
456 (short-acct (substring acct 1 (length acct)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
457 return)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
458 (while mention
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
459 (when (string= (cdr (assoc 'acct mention))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
460 short-acct)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
461 (setq return (cdr (assoc 'id mention))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
462 (setq mention (pop mentions)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
463 return))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
464
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
465 (defun mastodon-tl--extract-userhandle-from-url (url buffer-text)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
466 "Returns the user hande the URL points to or nil if it is not a profile link.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
467
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
468 BUFFER-TEXT is the text covered by the link with URL, for a user profile
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
469 this should be of the form <at-sign><user id>, e.g. \"@Gargon\"."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
470 (let ((parsed-url (url-generic-parse-url url)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
471 (when (and (string= "@" (substring buffer-text 0 1))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
472 (string= (downcase buffer-text)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
473 (downcase (substring (url-filename parsed-url) 1))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
474 (concat buffer-text "@" (url-host parsed-url)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
475
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
476 (defun mastodon-tl--extract-hashtag-from-url (url instance-url)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
477 "Returns the hashtag that URL points to or nil if URL is not a tag link.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
478
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
479 INSTANCE-URL is the url of the instance for the toot that the link
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
480 came from (tag links always point to a page on the instance publishing
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
481 the toot)."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
482 (cond
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
483 ;; Mastodon type tag link:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
484 ((string-prefix-p (concat instance-url "/tags/") url)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
485 (substring url (length (concat instance-url "/tags/"))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
486 ;; Link from some other ostatus site we've encountered:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
487 ((string-prefix-p (concat instance-url "/tag/") url)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
488 (substring url (length (concat instance-url "/tag/"))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
489 ;; If nothing matches we assume it is not a hashtag link:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
490 (t nil)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
491
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
492 (defun mastodon-tl--set-face (string face)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
493 "Returns the propertized STRING with the face property set to FACE."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
494 (propertize string 'face face))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
495
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
496 (defun mastodon-tl--toggle-spoiler-text (position)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
497 "Toggle the visibility of the spoiler text at/after POSITION."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
498 (let ((inhibit-read-only t)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
499 (spoiler-text-region (mastodon-tl--find-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
500 'mastodon-content-warning-body position nil)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
501 (if (not spoiler-text-region)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
502 (message "No spoiler text here")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
503 (add-text-properties (car spoiler-text-region) (cdr spoiler-text-region)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
504 (list 'invisible
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
505 (not (get-text-property (car spoiler-text-region)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
506 'invisible)))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
507
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
508 (defun mastodon-tl--toggle-spoiler-text-in-toot ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
509 "Toggle the visibility of the spoiler text in the current toot."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
510 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
511 (let* ((toot-range (or (mastodon-tl--find-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
512 'toot-json (point))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
513 (mastodon-tl--find-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
514 'toot-json (point) t)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
515 (spoiler-range (when toot-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
516 (mastodon-tl--find-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
517 'mastodon-content-warning-body
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
518 (car toot-range)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
519 (cond ((null toot-range)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
520 (message "No toot here"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
521 ((or (null spoiler-range)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
522 (> (car spoiler-range) (cdr toot-range)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
523 (message "No content warning text here"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
524 (t
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
525 (mastodon-tl--toggle-spoiler-text (car spoiler-range))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
526
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
527 (defun mastodon-tl--make-link (string link-type)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
528 "Return a propertized version of STRING that will act like link.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
529
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
530 LINK-TYPE is the type of link to produce."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
531 (let ((help-text (cond
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
532 ((eq link-type 'content-warning)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
533 "Toggle hidden text")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
534 (t
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
535 (error "unknown link type %s" link-type)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
536 (propertize
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
537 string
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
538 'mastodon-tab-stop link-type
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
539 'mouse-face 'highlight
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
540 'keymap mastodon-tl--link-keymap
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
541 'help-echo help-text)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
542
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
543 (defun mastodon-tl--do-link-action-at-point (position)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
544 (interactive "d")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
545 (let ((link-type (get-text-property position 'mastodon-tab-stop)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
546 (cond ((eq link-type 'content-warning)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
547 (mastodon-tl--toggle-spoiler-text position))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
548 ((eq link-type 'hashtag)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
549 (mastodon-tl--show-tag-timeline (get-text-property position 'mastodon-tag)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
550 ((eq link-type 'user-handle)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
551 (let ((account-json (get-text-property position 'account))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
552 (account-id (get-text-property position 'account-id)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
553 (cond
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
554 (account-json
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
555 (mastodon-profile--make-author-buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
556 account-json))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
557 (account-id
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
558 (mastodon-profile--make-author-buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
559 (mastodon-profile--account-from-id account-id)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
560 (t
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
561 (mastodon-profile--make-author-buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
562 (mastodon-profile--search-account-by-handle
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
563 (get-text-property position 'mastodon-handle)))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
564 (t
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
565 (error "unknown link type %s" link-type)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
566
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
567 (defun mastodon-tl--do-link-action (event)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
568 (interactive "e")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
569 (mastodon-tl--do-link-action-at-point (posn-point (event-end event))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
570
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
571 (defun mastodon-tl--has-spoiler (toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
572 "Check if the given TOOT has a spoiler text that should initially be shown only while the main content should be hidden."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
573 (let ((spoiler (mastodon-tl--field 'spoiler_text toot)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
574 (and spoiler (> (length spoiler) 0))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
575
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
576 (defun mastodon-tl--clean-tabs-and-nl (string)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
577 (replace-regexp-in-string
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
578 "[\t\n ]*\\'" "" string))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
579
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
580 (defun mastodon-tl--spoiler (toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
581 "Render TOOT with spoiler message.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
582
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
583 This assumes TOOT is a toot with a spoiler message.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
584 The main body gets hidden and only the spoiler text and the
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
585 content warning message are displayed. The content warning
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
586 message is a link which unhides/hides the main body."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
587 (let* ((spoiler (mastodon-tl--field 'spoiler_text toot))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
588 (string (mastodon-tl--set-face
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
589 ;; remove trailing whitespace
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
590 (mastodon-tl--clean-tabs-and-nl
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
591 (mastodon-tl--render-text spoiler toot))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
592 'default))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
593 (message (concat "\n"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
594 " ---------------\n"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
595 " " (mastodon-tl--make-link "Content Warning"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
596 'content-warning)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
597 "\n"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
598 " ---------------\n"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
599 (cw (mastodon-tl--set-face message 'mastodon-cw-face)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
600 (concat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
601 string
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
602 cw
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
603 (propertize (mastodon-tl--content toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
604 'invisible t
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
605 'mastodon-content-warning-body t))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
606
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
607 (defun mastodon-tl--media (toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
608 "Retrieve a media attachment link for TOOT if one exists."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
609 (let* ((media-attachements (mastodon-tl--field 'media_attachments toot))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
610 (media-string (mapconcat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
611 (lambda (media-attachement)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
612 (let ((preview-url
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
613 (cdr (assoc 'preview_url media-attachement))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
614 (if mastodon-tl--display-media-p
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
615 (mastodon-media--get-media-link-rendering
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
616 preview-url)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
617 (concat "Media::" preview-url "\n"))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
618 media-attachements "")))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
619 (if (not (and mastodon-tl--display-media-p
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
620 (equal media-string "")))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
621 (concat "\n" media-string)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
622 "")))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
623
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
624
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
625 (defun mastodon-tl--content (toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
626 "Retrieve text content from TOOT."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
627 (let ((content (mastodon-tl--field 'content toot)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
628 (concat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
629 (mastodon-tl--render-text content toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
630 (mastodon-tl--media toot))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
631
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
632 (defun mastodon-tl--insert-status (toot body author-byline action-byline)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
633 "Display the content and byline of a timeline element.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
634
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
635 BODY will form the section of the toot above the byline.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
636 AUTHOR-BYLINE is an optional function for adding the author portion of
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
637 the byline that takes one variable. By default it is `mastodon-tl--byline-author'
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
638 ACTION-BYLINE is also an optional function for adding an action, such as boosting
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
639 favouriting and following to the byline. It also takes a single function. By default
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
640 it is `mastodon-tl--byline-boosted'"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
641 (let ((start-pos (point)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
642 (insert
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
643 (propertize
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
644 (concat body
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
645 (mastodon-tl--byline toot author-byline action-byline))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
646 'toot-id (cdr (assoc 'id toot))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
647 'base-toot-id (mastodon-tl--toot-id toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
648 'toot-json toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
649 "\n\n")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
650 (when mastodon-tl--display-media-p
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
651 (mastodon-media--inline-images start-pos (point)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
652
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
653 (defun mastodon-tl--toot(toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
654 "Formats TOOT and insertes it into the buffer."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
655 (mastodon-tl--insert-status
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
656 toot
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
657 (mastodon-tl--clean-tabs-and-nl
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
658 (if (mastodon-tl--has-spoiler toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
659 (mastodon-tl--spoiler toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
660 (mastodon-tl--content toot)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
661 'mastodon-tl--byline-author
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
662 'mastodon-tl--byline-boosted))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
663
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
664 (defun mastodon-tl--timeline (toots)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
665 "Display each toot in TOOTS."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
666 (mapc 'mastodon-tl--toot toots)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
667 (goto-char (point-min)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
668
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
669 (defun mastodon-tl--get-update-function (&optional buffer)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
670 "Get the UPDATE-FUNCTION stored in `mastodon-tl--buffer-spec'"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
671 (mastodon-tl--get-buffer-property 'update-function buffer))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
672
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
673 (defun mastodon-tl--get-endpoint (&optional buffer)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
674 "Get the ENDPOINT stored in `mastodon-tl--buffer-spec'"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
675 (mastodon-tl--get-buffer-property 'endpoint buffer))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
676
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
677 (defun mastodon-tl--buffer-name (&optional buffer)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
678 "Get the BUFFER-NAME stored in `mastodon-tl--buffer-spec'"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
679 (mastodon-tl--get-buffer-property 'buffer-name buffer ))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
680
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
681 (defun mastodon-tl--get-buffer-property (property &optional buffer)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
682 "Get `MASTODON-TL--BUFFER-SPEC' in BUFFER or `CURRENT-BUFFER'"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
683 (with-current-buffer (or buffer (current-buffer))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
684 (if (plist-get mastodon-tl--buffer-spec property)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
685 (plist-get mastodon-tl--buffer-spec property)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
686 (error "mastodon-tl--buffer-spec is not defined for buffer %s"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
687 (or buffer (current-buffer))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
688
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
689 (defun mastodon-tl--more-json (endpoint id)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
690 "Return JSON for timeline ENDPOINT before ID."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
691 (let* ((url (mastodon-http--api (concat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
692 endpoint
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
693 (if (string-match-p "?" endpoint)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
694 "&"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
695 "?")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
696 "max_id="
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
697 (mastodon-tl--as-string id)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
698 (mastodon-http--get-json url)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
699
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
700 ;; TODO
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
701 ;; Look into the JSON returned here by Local
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
702 (defun mastodon-tl--updated-json (endpoint id)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
703 "Return JSON for timeline ENDPOINT since ID."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
704 (let ((url (mastodon-http--api (concat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
705 endpoint
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
706 (if (string-match-p "?" endpoint)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
707 "&"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
708 "?")
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
709 "since_id="
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
710 (mastodon-tl--as-string id)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
711 (mastodon-http--get-json url)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
712
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
713 (defun mastodon-tl--property (prop &optional backward)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
714 "Get property PROP for toot at point.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
715
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
716 Move forward (down) the timeline unless BACKWARD is non-nil."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
717 (or (get-text-property (point) prop)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
718 (save-excursion
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
719 (if backward
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
720 (mastodon-tl--goto-prev-toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
721 (mastodon-tl--goto-next-toot))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
722 (get-text-property (point) prop))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
723
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
724 (defun mastodon-tl--newest-id ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
725 "Return toot-id from the top of the buffer."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
726 (save-excursion
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
727 (goto-char (point-min))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
728 (mastodon-tl--property 'toot-id)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
729
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
730 (defun mastodon-tl--oldest-id ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
731 "Return toot-id from the bottom of the buffer."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
732 (save-excursion
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
733 (goto-char (point-max))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
734 (mastodon-tl--property 'toot-id t)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
735
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
736 (defun mastodon-tl--as-string(numeric)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
737 "Convert NUMERIC to string."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
738 (cond ((numberp numeric)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
739 (number-to-string numeric))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
740 ((stringp numeric) numeric)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
741 (t (error
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
742 "Numeric:%s must be either a string or a number"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
743 numeric))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
744
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
745 (defun mastodon-tl--toot-id (json)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
746 "Find approproiate toot id in JSON.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
747
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
748 If the toot has been boosted use the id found in the
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
749 reblog portion of the toot. Otherwise, use the body of
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
750 the toot. This is the same behaviour as the mastodon.social
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
751 webapp"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
752 (let ((id (cdr (assoc 'id json)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
753 (reblog (cdr (assoc 'reblog json))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
754 (if reblog (cdr (assoc 'id reblog)) id)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
755
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
756 (defun mastodon-tl--thread ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
757 "Open thread buffer for toot under `point'."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
758 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
759 (let* ((id (mastodon-tl--as-string (mastodon-tl--toot-id
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
760 (mastodon-tl--property 'toot-json))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
761 (url (mastodon-http--api (format "statuses/%s/context" id)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
762 (buffer (format "*mastodon-thread-%s*" id))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
763 (toot (mastodon-tl--property 'toot-json))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
764 (context (mastodon-http--get-json url)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
765 (when (member (cdr (assoc 'type toot)) '("reblog" "favourite"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
766 (setq toot (cdr (assoc 'status toot))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
767 (if (> (+ (length (cdr (assoc 'ancestors context)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
768 (length (cdr (assoc 'descendants context))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
769 0)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
770 (with-output-to-temp-buffer buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
771 (switch-to-buffer buffer)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
772 (mastodon-mode)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
773 (setq mastodon-tl--buffer-spec
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
774 `(buffer-name ,buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
775 endpoint ,(format "statuses/%s/context" id)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
776 update-function
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
777 (lambda(toot) (message "END of thread."))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
778 (let ((inhibit-read-only t))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
779 (mastodon-tl--timeline (vconcat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
780 (cdr (assoc 'ancestors context))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
781 `(,toot)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
782 (cdr (assoc 'descendants context))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
783 (message "No Thread!"))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
784
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
785 (defun mastodon-tl--more ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
786 "Append older toots to timeline."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
787 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
788 (let* ((point-before (point))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
789 (endpoint (mastodon-tl--get-endpoint))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
790 (update-function (mastodon-tl--get-update-function))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
791 (id (mastodon-tl--oldest-id))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
792 (json (mastodon-tl--more-json endpoint id)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
793 (when json
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
794 (let ((inhibit-read-only t))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
795 (goto-char (point-max))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
796 (funcall update-function json)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
797 (goto-char point-before)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
798
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
799 (defun mastodon-tl--find-property-range (property start-point &optional search-backwards)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
800 " Returns `nil` if no such range is found.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
801
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
802 If PROPERTY is set at START-POINT returns a range around
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
803 START-POINT otherwise before/after START-POINT.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
804
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
805 SEARCH-BACKWARDS determines whether we pick point
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
806 before (non-nil) or after (nil)"
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
807 (if (get-text-property start-point property)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
808 ;; We are within a range, so look backwards for the start:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
809 (cons (previous-single-property-change
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
810 (if (equal start-point (point-max)) start-point (1+ start-point))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
811 property nil (point-min))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
812 (next-single-property-change start-point property nil (point-max)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
813 (if search-backwards
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
814 (let* ((end (or (previous-single-property-change
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
815 (if (equal start-point (point-max))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
816 start-point (1+ start-point))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
817 property)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
818 ;; we may either be just before the range or there
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
819 ;; is nothing at all
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
820 (and (not (equal start-point (point-min)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
821 (get-text-property (1- start-point) property)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
822 start-point)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
823 (start (and
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
824 end
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
825 (previous-single-property-change end property nil (point-min)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
826 (when end
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
827 (cons start end)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
828 (let* ((start (next-single-property-change start-point property))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
829 (end (and start
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
830 (next-single-property-change start property nil (point-max)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
831 (when start
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
832 (cons start end))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
833
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
834 (defun mastodon-tl--find-next-or-previous-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
835 (property start-point search-backwards)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
836 "Finds (start . end) range after/before START-POINT where PROPERTY is set to a consistent value (different from the value at START-POINT if that is set).
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
837
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
838 Returns nil if no such range exists.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
839
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
840 If SEARCH-BACKWARDS is non-nil it find a region before
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
841 START-POINT otherwise after START-POINT.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
842 "
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
843 (if (get-text-property start-point property)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
844 ;; We are within a range, we need to start the search from
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
845 ;; before/after this range:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
846 (let ((current-range (mastodon-tl--find-property-range property start-point)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
847 (if search-backwards
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
848 (unless (equal (car current-range) (point-min))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
849 (mastodon-tl--find-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
850 property (1- (car current-range)) search-backwards))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
851 (unless (equal (cdr current-range) (point-max))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
852 (mastodon-tl--find-property-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
853 property (1+ (cdr current-range)) search-backwards))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
854 ;; If we are not within a range, we can just defer to
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
855 ;; mastodon-tl--find-property-range directly.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
856 (mastodon-tl--find-property-range property start-point search-backwards)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
857
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
858 (defun mastodon-tl--consider-timestamp-for-updates (timestamp)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
859 "Take note that TIMESTAMP is used in buffer and ajust timers as needed.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
860
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
861 This calculates the next time the text for TIMESTAMP will change
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
862 and may adjust existing or future timer runs should that time
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
863 before current plans to run the update function.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
864
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
865 The adjustment is only made if it is significantly (a few
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
866 seconds) before the currently scheduled time. This helps reduce
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
867 the number of occasions where we schedule an update only to
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
868 schedule the next one on completion to be within a few seconds.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
869
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
870 If relative timestamps are
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
871 disabled (`mastodon-tl--enable-relative-timestamps` is nil) this
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
872 is a no-op."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
873 (when mastodon-tl--enable-relative-timestamps
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
874 (let ((this-update (cdr (mastodon-tl--relative-time-details timestamp))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
875 (when (time-less-p this-update
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
876 (time-subtract mastodon-tl--timestamp-next-update
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
877 (seconds-to-time 10)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
878 (setq mastodon-tl--timestamp-next-update this-update)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
879 (when mastodon-tl--timestamp-update-timer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
880 ;; We need to re-schedule for an earlier time
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
881 (cancel-timer mastodon-tl--timestamp-update-timer)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
882 (setq mastodon-tl--timestamp-update-timer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
883 (run-at-time this-update
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
884 nil ;; don't repeat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
885 #'mastodon-tl--update-timestamps-callback
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
886 (current-buffer) nil)))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
887
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
888 (defun mastodon-tl--update-timestamps-callback (buffer previous-marker)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
889 "Update the next few timestamp displays in BUFFER.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
890
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
891 Start searching for more timestamps from PREVIOUS-MARKER or
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
892 from the start if it is nil."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
893 ;; only do things if the buffer hasn't been killed in the meantime
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
894 (when (and mastodon-tl--enable-relative-timestamps ;; should be true but just in case...
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
895 (buffer-live-p buffer))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
896 (save-excursion
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
897 (with-current-buffer buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
898 (let ((previous-timestamp (if previous-marker
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
899 (marker-position previous-marker)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
900 (point-min)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
901 (iteration 0)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
902 next-timestamp-range)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
903 (if previous-marker
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
904 ;; This is a follow-up call to process the next batch of
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
905 ;; timestamps.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
906 ;; Release the marker to not slow things down.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
907 (set-marker previous-marker nil)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
908 ;; Otherwise this is a rew run, so let's initialize the next-run time.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
909 (setq mastodon-tl--timestamp-next-update (time-add (current-time)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
910 (seconds-to-time 300))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
911 mastodon-tl--timestamp-update-timer nil))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
912 (while (and (< iteration 5)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
913 (setq next-timestamp-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
914 (mastodon-tl--find-property-range 'timestamp
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
915 previous-timestamp)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
916 (let* ((start (car next-timestamp-range))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
917 (end (cdr next-timestamp-range))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
918 (timestamp (get-text-property start 'timestamp))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
919 (current-display (get-text-property start 'display))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
920 (new-display (mastodon-tl--relative-time-description timestamp)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
921 (unless (string= current-display new-display)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
922 (let ((inhibit-read-only t))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
923 (add-text-properties
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
924 start end (list 'display
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
925 (mastodon-tl--relative-time-description timestamp)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
926 (mastodon-tl--consider-timestamp-for-updates timestamp)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
927 (setq iteration (1+ iteration)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
928 previous-timestamp (1+ (cdr next-timestamp-range)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
929 (if next-timestamp-range
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
930 ;; schedule the next batch from the previous location to
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
931 ;; start very soon in the future:
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
932 (run-at-time 0.1 nil #'mastodon-tl--update-timestamps-callback buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
933 (copy-marker previous-timestamp))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
934 ;; otherwise we are done for now; schedule a new run for when needed
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
935 (setq mastodon-tl--timestamp-update-timer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
936 (run-at-time mastodon-tl--timestamp-next-update
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
937 nil ;; don't repeat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
938 #'mastodon-tl--update-timestamps-callback
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
939 buffer nil))))))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
940
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
941 (defun mastodon-tl--update ()
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
942 "Update timeline with new toots."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
943 (interactive)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
944 (let* ((endpoint (mastodon-tl--get-endpoint))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
945 (update-function (mastodon-tl--get-update-function))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
946 (id (mastodon-tl--newest-id))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
947 (json (mastodon-tl--updated-json endpoint id)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
948 (when json
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
949 (let ((inhibit-read-only t))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
950 (goto-char (or mastodon-tl--update-point (point-min)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
951 (funcall update-function json)))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
952
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
953 (defun mastodon-tl--init (buffer-name endpoint update-function)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
954 "Initialize BUFFER-NAME with timeline targeted by ENDPOINT.
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
955
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
956 UPDATE-FUNCTION is used to recieve more toots."
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
957 (let* ((url (mastodon-http--api endpoint))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
958 (buffer (concat "*mastodon-" buffer-name "*"))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
959 (json (mastodon-http--get-json url)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
960 (with-output-to-temp-buffer buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
961 (switch-to-buffer buffer)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
962 (setq
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
963 ;; Initialize with a minimal interval; we re-scan at least once
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
964 ;; every 5 minutes to catch any timestamps we may have missed
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
965 mastodon-tl--timestamp-next-update (time-add (current-time)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
966 (seconds-to-time 300)))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
967 (funcall update-function json))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
968 (mastodon-mode)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
969 (with-current-buffer buffer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
970 (setq mastodon-tl--buffer-spec
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
971 `(buffer-name ,buffer-name
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
972 endpoint ,endpoint update-function
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
973 ,update-function)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
974 mastodon-tl--timestamp-update-timer
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
975 (when mastodon-tl--enable-relative-timestamps
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
976 (run-at-time mastodon-tl--timestamp-next-update
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
977 nil ;; don't repeat
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
978 #'mastodon-tl--update-timestamps-callback
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
979 (current-buffer)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
980 nil))))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
981 buffer))
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
982
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
983 (provide 'mastodon-tl)
cf476cceb7b2 mastodon: new package
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
984 ;;; mastodon-tl.el ends here