[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/ement 9344939e15 8/8: Tidy: (ement-room-leave) Move to
From: |
ELPA Syncer |
Subject: |
[elpa] externals/ement 9344939e15 8/8: Tidy: (ement-room-leave) Move to ement-lib |
Date: |
Fri, 23 Sep 2022 14:57:38 -0400 (EDT) |
branch: externals/ement
commit 9344939e1520d2f6cd65b88d4f9a04fb9c6e0270
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>
Tidy: (ement-room-leave) Move to ement-lib
---
ement-lib.el | 41 +++++++++++++++++++++++++++++++++++++++++
ement-room.el | 40 ----------------------------------------
2 files changed, 41 insertions(+), 40 deletions(-)
diff --git a/ement-lib.el b/ement-lib.el
index 07ba91b572..dc1a1dab54 100644
--- a/ement-lib.el
+++ b/ement-lib.el
@@ -56,6 +56,7 @@
(defvar ement-room-buffer-name-prefix)
(defvar ement-room-buffer-name-suffix)
+(defvar ement-room-leave-kill-buffer)
(defvar ement-room-prism)
(defvar ement-room-prism-color-adjustment)
(defvar ement-room-prism-minimum-contrast)
@@ -100,6 +101,46 @@ the request."
(ement-api session endpoint :method 'post :data (json-encode data)
:then then))))
+(defun ement-room-leave (room session &optional force-p)
+ "Leave ROOM on SESSION.
+If FORCE-P, leave without prompting. ROOM may be an `ement-room'
+struct, or a room ID or alias string."
+ ;; TODO: Rename `room' argument to `room-or-id'.
+ (interactive (ement-complete-room :session (ement-complete-session)))
+ (cl-assert room) (cl-assert session)
+ (cl-etypecase room
+ (ement-room)
+ (string (setf room (ement-afirst (or (equal room
(ement-room-canonical-alias it))
+ (equal room (ement-room-id it)))
+ (ement-session-rooms session)))))
+ (when (or force-p (yes-or-no-p (format "Leave room %s? " (ement--format-room
room))))
+ (pcase-let* (((cl-struct ement-room id) room)
+ (endpoint (format "rooms/%s/leave" (url-hexify-string id))))
+ (ement-api session endpoint :method 'post :data ""
+ :then (lambda (_data)
+ (when ement-room-leave-kill-buffer
+ ;; NOTE: This generates a symbol and sets its function value
to a lambda
+ ;; which removes the symbol from the hook, removing itself
from the hook.
+ ;; TODO: When requiring Emacs 27, use `letrec'.
+ (let* ((leave-fn-symbol (gensym (format "ement-leave-%s"
room)))
+ (leave-fn (lambda (_session)
+ (remove-hook 'ement-sync-callback-hook
leave-fn-symbol)
+ ;; FIXME: Probably need to unintern the
symbol.
+ (when-let ((buffer (map-elt
(ement-room-local room) 'buffer)))
+ (when (buffer-live-p buffer)
+ (kill-buffer buffer))))))
+ (setf (symbol-function leave-fn-symbol) leave-fn)
+ (add-hook 'ement-sync-callback-hook leave-fn-symbol)))
+ (message "Left room: %s" (ement--format-room room)))
+ :else (lambda (plz-error)
+ (pcase-let* (((cl-struct plz-error response) plz-error)
+ ((cl-struct plz-response status body) response)
+ ((map error) (json-read-from-string body)))
+ (pcase status
+ (429 (error "Unable to leave room %s: %s" room error))
+ (_ (error "Unable to leave room %s: %s %S" room status
plz-error)))))))))
+(defalias 'ement-leave-room #'ement-room-leave)
+
(defun ement-forget-room (room session &optional force-p)
"Forget ROOM on SESSION.
If FORCE-P (interactively, with prefix), prompt to leave the room
diff --git a/ement-room.el b/ement-room.el
index 89fb45106f..cd593078f0 100644
--- a/ement-room.el
+++ b/ement-room.el
@@ -1289,46 +1289,6 @@ buffer). It receives two arguments, the room and the
session."
(_ (error "Unable to join room %s: %s %S" id-or-alias status
plz-error))))))))
(defalias 'ement-join-room #'ement-room-join)
-(defun ement-room-leave (room session &optional force-p)
- "Leave ROOM on SESSION.
-If FORCE-P, leave without prompting. ROOM may be an `ement-room'
-struct, or a room ID or alias string."
- ;; TODO: Rename `room' argument to `room-or-id'.
- (interactive (ement-complete-room :session (ement-complete-session)))
- (cl-assert room) (cl-assert session)
- (cl-etypecase room
- (ement-room)
- (string (setf room (ement-afirst (or (equal room
(ement-room-canonical-alias it))
- (equal room (ement-room-id it)))
- (ement-session-rooms session)))))
- (when (or force-p (yes-or-no-p (format "Leave room %s? " (ement--format-room
room))))
- (pcase-let* (((cl-struct ement-room id) room)
- (endpoint (format "rooms/%s/leave" (url-hexify-string id))))
- (ement-api session endpoint :method 'post :data ""
- :then (lambda (_data)
- (when ement-room-leave-kill-buffer
- ;; NOTE: This generates a symbol and sets its function value
to a lambda
- ;; which removes the symbol from the hook, removing itself
from the hook.
- ;; TODO: When requiring Emacs 27, use `letrec'.
- (let* ((leave-fn-symbol (gensym (format "ement-leave-%s"
room)))
- (leave-fn (lambda (_session)
- (remove-hook 'ement-sync-callback-hook
leave-fn-symbol)
- ;; FIXME: Probably need to unintern the
symbol.
- (when-let ((buffer (map-elt
(ement-room-local room) 'buffer)))
- (when (buffer-live-p buffer)
- (kill-buffer buffer))))))
- (setf (symbol-function leave-fn-symbol) leave-fn)
- (add-hook 'ement-sync-callback-hook leave-fn-symbol)))
- (message "Left room: %s" (ement--format-room room)))
- :else (lambda (plz-error)
- (pcase-let* (((cl-struct plz-error response) plz-error)
- ((cl-struct plz-response status body) response)
- ((map error) (json-read-from-string body)))
- (pcase status
- (429 (error "Unable to leave room %s: %s" room error))
- (_ (error "Unable to leave room %s: %s %S" room status
plz-error)))))))))
-(defalias 'ement-leave-room #'ement-room-leave)
-
(defun ement-room-goto-prev ()
"Go to the previous message in buffer."
(interactive)
- [elpa] externals/ement updated (a48e55d655 -> 9344939e15), ELPA Syncer, 2022/09/23
- [elpa] externals/ement 63aab1943f 2/8: Fix: (ement-describe-room) Nil topics, ELPA Syncer, 2022/09/23
- [elpa] externals/ement 4188168568 4/8: Comment: Add TODO, ELPA Syncer, 2022/09/23
- [elpa] externals/ement 9344939e15 8/8: Tidy: (ement-room-leave) Move to ement-lib,
ELPA Syncer <=
- [elpa] externals/ement 8bbdcc3aac 1/8: Fix: (ement-directory) Interactive arguments, ELPA Syncer, 2022/09/23
- [elpa] externals/ement 910ae0020e 3/8: Docs: Tidy, ELPA Syncer, 2022/09/23
- [elpa] externals/ement 96bc0f638e 5/8: Add: (ement-room-leave) FORCE-P argument, ELPA Syncer, 2022/09/23
- [elpa] externals/ement 467f7d9353 7/8: Change: (ement--format-room) Quote room name, ELPA Syncer, 2022/09/23
- [elpa] externals/ement 1450e0329a 6/8: Add: (ement-forget-room) Add FORCE-P argument to also leave room, ELPA Syncer, 2022/09/23