From 55cab2fc28a0d01cb417b768e865e83941009b5a Mon Sep 17 00:00:00 2001 From: James Brechtel Date: Thu, 11 Jun 2026 12:47:48 -0400 Subject: [PATCH] feat: add SSE connect/disconnect public API --- noise-sse.el | 36 ++++++++++++++++++++++++++++++++++++ test/noise-sse-test.el | 15 +++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/noise-sse.el b/noise-sse.el index eb01277..80d6151 100644 --- a/noise-sse.el +++ b/noise-sse.el @@ -100,5 +100,41 @@ Handles connection close and triggers reconnection." (run-with-timer noise-sse--reconnect-delay nil #'noise-sse-connect))) +;;;###autoload +(defun noise-sse-connect () + "Connect to signal-cli SSE endpoint." + (interactive) + (noise-sse-disconnect) + (let* ((url (noise-sse--build-url)) + (parsed (url-generic-parse-url url)) + (host (url-host parsed)) + (port (or (url-port parsed) 80)) + (proc (make-network-process + :name "noise-sse" + :host host + :service port + :filter #'noise-sse--filter + :sentinel #'noise-sse--sentinel))) + (setq noise-sse--process proc) + (noise-sse--reset-reconnect-delay) + (process-send-string proc + (format "GET %s HTTP/1.1\r\nHost: %s\r\nAccept: text/event-stream\r\n\r\n" + (url-filename parsed) + host)) + (message "Noise: SSE connected to %s" url))) + +;;;###autoload +(defun noise-sse-disconnect () + "Disconnect from signal-cli SSE endpoint." + (interactive) + (when noise-sse--process + (delete-process noise-sse--process) + (setq noise-sse--process nil)) + (when noise-sse--reconnect-timer + (cancel-timer noise-sse--reconnect-timer) + (setq noise-sse--reconnect-timer nil)) + (setq noise-sse--buffer "") + (message "Noise: SSE disconnected")) + (provide 'noise-sse) ;;; noise-sse.el ends here diff --git a/test/noise-sse-test.el b/test/noise-sse-test.el index 4f98d7f..71db8f4 100644 --- a/test/noise-sse-test.el +++ b/test/noise-sse-test.el @@ -95,5 +95,20 @@ (should (string-match-p "/api/v1/events" url)) (should-not (string-match-p "account=" url))))) +(ert-deftest noise-sse-connect-is-interactive () + "noise-sse-connect is an interactive command." + (should (commandp 'noise-sse-connect))) + +(ert-deftest noise-sse-disconnect-is-interactive () + "noise-sse-disconnect is an interactive command." + (should (commandp 'noise-sse-disconnect))) + +(ert-deftest noise-sse-disconnect-cleans-up () + "noise-sse-disconnect cleans up process and timer." + (let ((noise-sse--reconnect-timer (run-with-timer 1000 nil #'ignore))) + (noise-sse-disconnect) + (should (null noise-sse--process)) + (should (null noise-sse--reconnect-timer)))) + (provide 'noise-sse-test) ;;; noise-sse-test.el ends here