mirror of
https://github.com/vale981/ement.el
synced 2025-03-05 09:21:37 -05:00
WIP: User avatars
This commit is contained in:
parent
d1e4fc2074
commit
3f475d2c92
2 changed files with 62 additions and 11 deletions
|
@ -807,6 +807,14 @@ BODY is wrapped in a lambda form that binds `event', `room', and
|
|||
;; So `ement-room--format-user' returns a string propertized with `help-echo' as a string.
|
||||
(concat sender "")))
|
||||
|
||||
(ement-room-define-event-formatter ?a
|
||||
"Sender avatar."
|
||||
(ignore session)
|
||||
(if-let (avatar (ement-user-avatar (ement-event-sender event)))
|
||||
;; (propertize " " 'display `((:align-to left-margin) ,avatar))
|
||||
(propertize " " 'display avatar)
|
||||
"NOA"))
|
||||
|
||||
(ement-room-define-event-formatter ?r
|
||||
"Reactions."
|
||||
(ignore room session)
|
||||
|
@ -2270,8 +2278,26 @@ function to `ement-room-event-fns', which see."
|
|||
(ement-room--insert-event event))
|
||||
|
||||
(ement-room-defevent "m.room.member"
|
||||
(pcase-let* (((cl-struct ement-event sender) event)
|
||||
((cl-struct ement-user avatar-url) sender)
|
||||
(room ement-room))
|
||||
(with-silent-modifications
|
||||
(ement-room--insert-event event)))
|
||||
(ement-room--insert-event event))
|
||||
(when (and ement-room-user-avatars avatar-url (not (string-empty-p avatar-url)))
|
||||
(plz 'get (ement--mxc-to-url avatar-url ement-session) :as 'binary
|
||||
:then (lambda (data)
|
||||
(let* ((image (ement--resize-image (create-image data nil 'data-p)
|
||||
nil (frame-char-height))))
|
||||
(setf (image-property image :ascent) 'center
|
||||
(ement-user-avatar sender) image)
|
||||
(message "SENDER:%S AVATAR:%S" (ement-user-id sender) image)
|
||||
(when-let (buffer (alist-get 'buffer (ement-room-local room)))
|
||||
(with-current-buffer buffer
|
||||
(ewoc-map
|
||||
(lambda (data)
|
||||
(and (ement-event-p data)
|
||||
(equal (ement-event-sender data) sender)))
|
||||
ement-ewoc)))))))))
|
||||
|
||||
(ement-room-defevent "m.room.message"
|
||||
(pcase-let* (((cl-struct ement-event content unsigned) event)
|
||||
|
@ -3157,6 +3183,10 @@ ROOM defaults to the value of `ement-room'."
|
|||
'face face
|
||||
'help-echo (ement-user-id user))))
|
||||
|
||||
(defcustom ement-room-user-avatars t
|
||||
"Display user avatars."
|
||||
:type 'boolean)
|
||||
|
||||
(cl-defun ement-room--event-mentions-user-p (event user &optional (room ement-room))
|
||||
"Return non-nil if EVENT in ROOM mentions USER."
|
||||
(pcase-let* (((cl-struct ement-event content) event)
|
||||
|
|
33
ement.el
33
ement.el
|
@ -803,17 +803,38 @@ and `session' to the session. Adds function to
|
|||
('avatar_url avatar-url))))
|
||||
event)
|
||||
(user (or (gethash state-key ement-users)
|
||||
(puthash state-key
|
||||
(make-ement-user :id state-key :avatar-url avatar-url
|
||||
(puthash state-key (make-ement-user :id state-key)
|
||||
ement-users))))
|
||||
(setf (ement-user-avatar-url user) avatar-url
|
||||
;; NOTE: The spec doesn't seem to say whether the
|
||||
;; displayname in the member event applies only to the
|
||||
;; room or is for the user generally, so we'll save it
|
||||
;; in the struct anyway.
|
||||
:displayname displayname)
|
||||
ement-users))))
|
||||
(ement-user-displayname user) displayname)
|
||||
;; FIXME: Should we also update the room displayname here? Shouldn't we only do that
|
||||
;; when we know it applies only to the room?
|
||||
(puthash room displayname (ement-user-room-display-names user))
|
||||
(unless (gethash state-key members)
|
||||
(puthash state-key user members))))
|
||||
(puthash state-key user members)))
|
||||
|
||||
;; (defvar ement-room-user-avatars)
|
||||
|
||||
;; (defun ement--update-user-avatar (user room session)
|
||||
;; "Update USER's avatar in ROOM on SESSION."
|
||||
;; (ignore session)
|
||||
;; (pcase-let (((cl-struct ement-user avatar-url) user))
|
||||
;; (when (and ement-room-user-avatars avatar-url)
|
||||
;; (plz 'get (ement--mxc-to-url avatar-url session) :as 'binary
|
||||
;; :then (lambda (data)
|
||||
;; (let* ((image (create-image data nil 'data-p))
|
||||
;; (avatar-string (propertize " " :display `(image ,image))))
|
||||
;; (setf (ement-user-avatar user) avatar-string)
|
||||
;; (when-let (buffer (alist-get 'buffer (ement-room-local room)))
|
||||
;; (with-current-buffer buffer
|
||||
;; (ewoc-map
|
||||
;; (lambda (data)
|
||||
;; (and (ement-event-p data)
|
||||
;; (equal (ement-event-sender data) user)))
|
||||
;; ement-ewoc)))))))))
|
||||
|
||||
(ement-defevent "m.room.name"
|
||||
(ignore session)
|
||||
|
|
Loading…
Add table
Reference in a new issue