|
44 | 44 | ""
|
45 | 45 | (lui-set-prompt lui-prompt-string))
|
46 | 46 |
|
47 |
| -(defvar slack-current-room) |
48 |
| -(make-local-variable 'slack-current-room) |
49 |
| - |
| 47 | +(defvar slack-current-room-id) |
| 48 | +(defvar slack-current-team-id) |
50 | 49 | (defvar slack-current-message nil)
|
51 |
| - |
52 | 50 | (defcustom slack-buffer-emojify nil
|
53 | 51 | "Show emoji with `emojify' if true."
|
54 | 52 | :group 'slack)
|
|
64 | 62 | (add-hook 'lui-post-output-hook 'slack-buffer-add-ts-property nil t)))
|
65 | 63 | buffer))
|
66 | 64 |
|
67 |
| -(defun slack-buffer-set-current-room (room) |
68 |
| - (set (make-local-variable 'slack-current-room) room)) |
| 65 | +(defun slack-buffer-set-current-room-id (room) |
| 66 | + (set (make-local-variable 'slack-current-room-id) (oref room id))) |
| 67 | + |
| 68 | +(defun slack-buffer-set-current-team-id (team) |
| 69 | + (set (make-local-variable 'slack-current-team-id) (oref team id))) |
69 | 70 |
|
70 | 71 | (defun slack-buffer-enable-emojify ()
|
71 | 72 | (if slack-buffer-emojify
|
|
76 | 77 |
|
77 | 78 | (defun slack-buffer-insert-previous-link (oldest-msg)
|
78 | 79 | (lui-insert (concat (propertize "(load more message)"
|
79 |
| - 'face '(:underline t) |
80 |
| - 'oldest (oref oldest-msg ts) |
81 |
| - 'keymap (let ((map (make-sparse-keymap))) |
82 |
| - (define-key map (kbd "RET") |
83 |
| - #'slack-room-load-prev-messages) |
84 |
| - map)) |
85 |
| - "\n"))) |
86 |
| -(cl-defun slack-buffer-create (room &optional |
| 80 | + 'face '(:underline t) |
| 81 | + 'oldest (oref oldest-msg ts) |
| 82 | + 'keymap (let ((map (make-sparse-keymap))) |
| 83 | + (define-key map (kbd "RET") |
| 84 | + #'slack-room-load-prev-messages) |
| 85 | + map)) |
| 86 | + "\n"))) |
| 87 | +(cl-defun slack-buffer-create (room team |
| 88 | + &optional |
87 | 89 | (insert-func
|
88 | 90 | #'slack-buffer-insert-messages)
|
89 | 91 | (type 'message))
|
|
92 | 94 | (cl-ecase type
|
93 | 95 | (message (slack-get-buffer-create buf-name))
|
94 | 96 | (info (slack-get-info-buffer-create buf-name)))))
|
95 |
| - (let* ((buf-name (slack-room-buffer-name room)) |
| 97 | + (let* ((buf-name (slack-room-buffer-name room team)) |
96 | 98 | (buffer (get-buffer type buf-name)))
|
97 | 99 | (with-current-buffer buffer
|
98 | 100 | (if insert-func
|
99 |
| - (funcall insert-func room)) |
100 |
| - (slack-buffer-set-current-room room) |
| 101 | + (funcall insert-func room team)) |
| 102 | + (slack-buffer-set-current-room-id room) |
| 103 | + (slack-buffer-set-current-team-id team) |
101 | 104 | (oset room unread-count-display 0)
|
102 | 105 | (slack-buffer-enable-emojify))
|
103 | 106 | buffer)))
|
|
114 | 117 | (point-min) (point-max)
|
115 | 118 | `(ts ,(oref slack-current-message ts)))))
|
116 | 119 |
|
117 |
| -(defun slack-buffer-insert (message &optional not-tracked-p) |
| 120 | +(defun slack-buffer-insert (message team &optional not-tracked-p) |
118 | 121 | (let ((lui-time-stamp-time (slack-message-time-stamp message))
|
119 | 122 | (beg lui-input-marker)
|
120 | 123 | (inhibit-read-only t))
|
121 | 124 | (let ((slack-current-message message))
|
122 |
| - (lui-insert (slack-message-to-string message) not-tracked-p)))) |
| 125 | + (lui-insert (slack-message-to-string message team) not-tracked-p)))) |
123 | 126 |
|
124 |
| -(defun slack-buffer-insert-messages (room) |
| 127 | +(defun slack-buffer-insert-messages (room team) |
125 | 128 | (let ((messages (slack-room-latest-messages room)))
|
126 | 129 | (when messages
|
127 | 130 | (slack-buffer-insert-previous-link (cl-first messages))
|
128 | 131 | (mapc (lambda (m)
|
129 |
| - (slack-buffer-insert m t)) |
| 132 | + (slack-buffer-insert m team t)) |
130 | 133 | messages)
|
131 | 134 | (let ((latest-message (car (last messages))))
|
132 | 135 | (slack-room-update-last-read room latest-message)
|
133 |
| - (slack-room-update-mark room latest-message))))) |
| 136 | + (slack-room-update-mark room team latest-message))))) |
134 | 137 |
|
135 |
| -(cl-defun slack-buffer-update (room msg &key replace) |
| 138 | + |
| 139 | +(cl-defun slack-buffer-update (room msg &key replace team) |
136 | 140 | (cl-labels ((do-update (buf room msg)
|
137 | 141 | (with-current-buffer buf
|
138 | 142 | (slack-room-update-last-read room msg)
|
139 |
| - (slack-buffer-insert msg)))) |
140 |
| - (let* ((buf-name (slack-room-buffer-name room)) |
| 143 | + (slack-buffer-insert msg team)))) |
| 144 | + (let* ((buf-name (slack-room-buffer-name room team)) |
141 | 145 | (buffer (get-buffer buf-name))
|
142 | 146 | (win-buf-names (mapcar #'buffer-name (mapcar #'window-buffer
|
143 |
| - (window-list))))) |
| 147 | + (window-list))))) |
144 | 148 | (if (cl-member buf-name win-buf-names :test #'string=)
|
145 |
| - (slack-room-update-mark room msg) |
| 149 | + (slack-room-update-mark room team msg) |
146 | 150 | (cl-incf (oref room unread-count-display)))
|
147 | 151 | (if buffer
|
148 | 152 | (if replace (slack-buffer-replace buffer msg)
|
149 | 153 | (do-update buffer room msg))))))
|
150 | 154 |
|
151 | 155 | (defun slack-buffer-replace (buffer msg)
|
152 |
| - (cl-labels ((ts-eq |
153 |
| - (start ts) |
154 |
| - (cl-loop for i from start to (point-max) |
155 |
| - if (string= |
156 |
| - (get-text-property i 'ts) |
157 |
| - ts) |
158 |
| - return i)) |
159 |
| - (ts-not-eq |
160 |
| - (start ts) |
161 |
| - (cl-loop for i from start to (point-max) |
162 |
| - if (not (string= |
163 |
| - (get-text-property i 'ts) |
164 |
| - ts)) |
165 |
| - return i))) |
166 |
| - (with-current-buffer buffer |
167 |
| - (let* ((cur-point (point)) |
168 |
| - (ts (oref msg ts)) |
169 |
| - (beg (ts-eq (point-min) ts)) |
170 |
| - (end (ts-not-eq beg ts)) |
171 |
| - ;; (beg (text-property-any (point-min) (point-max) 'ts (oref msg ts))) |
172 |
| - ;; (end (next-single-property-change beg 'ts)) |
173 |
| - (lui-time-stamp-last (get-text-property beg 'slack-last-ts))) |
174 |
| - (if (and beg end) |
175 |
| - (let ((inhibit-read-only t)) |
176 |
| - (delete-region beg end) |
177 |
| - (set-marker lui-output-marker beg) |
178 |
| - (slack-buffer-insert msg) |
179 |
| - (goto-char cur-point) |
180 |
| - (slack-buffer-recover-lui-output-marker))))))) |
| 156 | + (with-current-buffer buffer |
| 157 | + (let* ((cur-point (point)) |
| 158 | + (beg (text-property-any (point-min) (point-max) 'ts (oref msg ts))) |
| 159 | + (end (next-single-property-change beg 'ts)) |
| 160 | + (lui-time-stamp-last (get-text-property beg 'slack-last-ts))) |
| 161 | + (if (and beg end) |
| 162 | + (let ((inhibit-read-only t)) |
| 163 | + (delete-region beg end) |
| 164 | + (set-marker lui-output-marker beg) |
| 165 | + (slack-buffer-insert msg |
| 166 | + (slack-team-find slack-current-team-id)) |
| 167 | + (goto-char cur-point) |
| 168 | + (slack-buffer-recover-lui-output-marker)))))) |
181 | 169 |
|
182 | 170 | (defun slack-buffer-recover-lui-output-marker ()
|
183 | 171 | (set-marker lui-output-marker (- (marker-position
|
|
210 | 198 | buf))
|
211 | 199 |
|
212 | 200 | (defun slack-reset-room-last-read ()
|
213 |
| - (let ((room slack-current-room)) |
| 201 | + (let ((room (slack-room-find slack-current-room-id |
| 202 | + (slack-team-find slack-current-team-id)))) |
214 | 203 | (slack-room-update-last-read room
|
215 | 204 | (slack-message "msg" :ts "0"))))
|
216 | 205 |
|
|
0 commit comments