ement: silent startup restore via ement--reconnect, explicit homeserver

my/ement-maybe-restore now:
- Loads sessions file manually (ement--load-sessions) before connecting
- Calls ement--reconnect directly on each loaded session — bypasses all
  interactive prompts in ement-connect (homeserver discovery, read-passwd)
- Fallback to ement-connect with explicit :homeserver if --reconnect absent
- condition-case wrapper — startup errors are silent, never block Emacs

my/ement-open: use my/ement-maybe-restore (instead of ement-connect
directly) for the 'sessions file exists' branch.
This commit is contained in:
2026-02-23 13:48:28 +01:00
parent d7f3c22a08
commit 9d8603d735

View File

@@ -893,10 +893,26 @@ Keeps the status bar and tab bar fully visible at any zoom level.")
(ement-list-rooms)))
(defun my/ement-maybe-restore ()
"Restore saved ement session silently (no credentials prompt)."
"Restore saved ement session silently on startup. No prompts, no buffer.
Loads sessions from file and calls ement--reconnect directly to bypass
any interactive prompts in ement-connect (homeserver discovery, password)."
(require 'ement)
(when (file-readable-p (expand-file-name ement-sessions-file))
(ement-connect :user-id "@martin:sukany.cz")))
(condition-case err
(let ((sf (expand-file-name ement-sessions-file)))
(when (file-readable-p sf)
;; Pre-load sessions from file so ement-connect won't prompt
(unless ement-sessions
(when (fboundp 'ement--load-sessions)
(setq ement-sessions (ement--load-sessions))))
;; Reconnect directly — bypasses interactive ement-connect entirely
(if (fboundp 'ement--reconnect)
(dolist (entry ement-sessions)
(ement--reconnect (cdr entry)))
;; Fallback: explicit homeserver avoids discovery/password prompt
(when ement-sessions
(ement-connect :user-id (caar ement-sessions)
:homeserver "https://matrix.apps.sukany.cz")))))
(error (message "ement startup restore: %s" (error-message-string err)))))
(defun my/ement-open ()
"Open Matrix panel: show room list (connect/restore if needed).
@@ -912,7 +928,7 @@ Otherwise: runs interactive ement-connect, then opens rooms after sync."
;; Saved session exists — restore without credentials, open rooms after sync
((file-readable-p (expand-file-name ement-sessions-file))
(add-hook 'ement-after-initial-sync-hook #'my/ement-open-after-sync)
(ement-connect :user-id "@martin:sukany.cz"))
(my/ement-maybe-restore))
;; No saved session — interactive connect, open rooms after sync
(t
(add-hook 'ement-after-initial-sync-hook #'my/ement-open-after-sync)