mirror of
https://github.com/vale981/ement.el
synced 2025-03-05 09:21:37 -05:00
Progress
This commit is contained in:
parent
5779caecbe
commit
1d509263fc
1 changed files with 36 additions and 5 deletions
41
ement.el
41
ement.el
|
@ -53,6 +53,9 @@
|
||||||
(cl-defstruct ement-session
|
(cl-defstruct ement-session
|
||||||
user server token transaction-id rooms next-batch)
|
user server token transaction-id rooms next-batch)
|
||||||
|
|
||||||
|
(cl-defstruct ement-room
|
||||||
|
id summary state timeline timeline* ephemeral account-data unread-notifications)
|
||||||
|
|
||||||
;;;; Variables
|
;;;; Variables
|
||||||
|
|
||||||
(defvar ement-sessions nil
|
(defvar ement-sessions nil
|
||||||
|
@ -110,8 +113,17 @@
|
||||||
|
|
||||||
;;;; Functions
|
;;;; Functions
|
||||||
|
|
||||||
;; (defun ement-complete-room (session)
|
(defun ement-complete-room (session)
|
||||||
;; "Return a room selected from SESSION with completion.")
|
"Return a room selected from SESSION with completion."
|
||||||
|
(pcase-let* (((cl-struct ement-session rooms) session)
|
||||||
|
(name-to-room (cl-loop for room in rooms
|
||||||
|
collect (cons (format "%s (%s)"
|
||||||
|
(ement--room-display-name room)
|
||||||
|
(ement--room-alias room))
|
||||||
|
room)))
|
||||||
|
(names (mapcar #'car name-to-room))
|
||||||
|
(selected-name (completing-read "Room: " names nil t)))
|
||||||
|
(alist-get name-to-room selected-name)))
|
||||||
|
|
||||||
(cl-defun ement--sync (session &key since)
|
(cl-defun ement--sync (session &key since)
|
||||||
;; SPEC: <https://matrix.org/docs/spec/client_server/r0.6.1#id257>.
|
;; SPEC: <https://matrix.org/docs/spec/client_server/r0.6.1#id257>.
|
||||||
|
@ -132,9 +144,6 @@
|
||||||
(mapc (apply-partially #'ement--push-joined-room-events session) joined-rooms)
|
(mapc (apply-partially #'ement--push-joined-room-events session) joined-rooms)
|
||||||
(message "Sync done")))
|
(message "Sync done")))
|
||||||
|
|
||||||
(cl-defstruct ement-room
|
|
||||||
id summary state timeline timeline* ephemeral account-data unread-notifications)
|
|
||||||
|
|
||||||
(defun ement--push-joined-room-events (session joined-room)
|
(defun ement--push-joined-room-events (session joined-room)
|
||||||
(pcase-let* ((`(,id . ,event-types) joined-room)
|
(pcase-let* ((`(,id . ,event-types) joined-room)
|
||||||
(room (or (cl-find-if (lambda (room)
|
(room (or (cl-find-if (lambda (room)
|
||||||
|
@ -146,9 +155,31 @@
|
||||||
('unread_notifications unread-notifications))
|
('unread_notifications unread-notifications))
|
||||||
event-types))
|
event-types))
|
||||||
(ignore account-data unread-notifications summary state ephemeral)
|
(ignore account-data unread-notifications summary state ephemeral)
|
||||||
|
;; FIXME: Further mapping instead of alist-get.
|
||||||
|
(cl-loop for event across (alist-get 'events state)
|
||||||
|
do (push event (ement-room-state room)))
|
||||||
(cl-loop for event across (alist-get 'events timeline)
|
(cl-loop for event across (alist-get 'events timeline)
|
||||||
do (push event (ement-room-timeline* room)))))
|
do (push event (ement-room-timeline* room)))))
|
||||||
|
|
||||||
|
(defun ement--room-display-name (room)
|
||||||
|
"Return the displayname for ROOM."
|
||||||
|
;; SPEC: <https://matrix.org/docs/spec/client_server/r0.6.1#id349>.
|
||||||
|
;; MAYBE: Optional "force" argument to make it update the room name/alias in the struct.
|
||||||
|
(or (ement--room-name room)
|
||||||
|
(ement--room-alias room)
|
||||||
|
;; FIXME: Steps 3, etc.
|
||||||
|
(ement-room-id room)))
|
||||||
|
|
||||||
|
(defun ement--room-name (room)
|
||||||
|
(cl-loop for event in (ement-room-state room)
|
||||||
|
when (equal "m.room.name" (alist-get 'type event))
|
||||||
|
return (map-nested-elt event '(content name))))
|
||||||
|
|
||||||
|
(defun ement--room-alias (room)
|
||||||
|
(cl-loop for event in (ement-room-state room)
|
||||||
|
when (equal "m.room.canonical_alias" (alist-get 'type event))
|
||||||
|
return (map-nested-elt event '(content alias))))
|
||||||
|
|
||||||
(defun ement--load-session ()
|
(defun ement--load-session ()
|
||||||
"Return saved session from file."
|
"Return saved session from file."
|
||||||
(when (file-exists-p ement-save-session-file)
|
(when (file-exists-p ement-save-session-file)
|
||||||
|
|
Loading…
Add table
Reference in a new issue