emacs-elpa-diffs
[Top][All Lists]
Advanced

[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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]