Mercurial > hg > dotemacs
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 |
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 |