From 5f45dbe054b65330d487c2e0774ce853c5cd6a23 Mon Sep 17 00:00:00 2001 From: Jeremy O'Brien Date: Wed, 20 May 2026 21:40:48 -0400 Subject: [PATCH] Channels: save draft messages on room switch --- nomadnet/ui/textui/Channels.py | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/nomadnet/ui/textui/Channels.py b/nomadnet/ui/textui/Channels.py index 8668d16..56f4b92 100644 --- a/nomadnet/ui/textui/Channels.py +++ b/nomadnet/ui/textui/Channels.py @@ -1281,6 +1281,7 @@ class ChannelsDisplay(): self.users_visible = True self.channel_list_visible = True self.collapse_join_part = False + self._room_drafts = {} self._build_listbox() self.gutter = ChannelsExpandGutter(self.app, self) @@ -1315,9 +1316,43 @@ class ChannelsDisplay(): self.app.rrc.set_message_callback(self._on_rrc_message) def _set_right_widget(self, widget): + prev = getattr(self, "right", None) + if isinstance(prev, RoomWidget) and prev is not widget: + self._save_room_draft(prev) self.right = widget self._apply_channel_list_visibility(focus_right=True) + def _draft_key(self, hub, room): + try: + return (hub.hub_hash, hub.dest_name, room) + except Exception: + return None + + def _save_room_draft(self, room_widget): + try: + key = self._draft_key(room_widget.hub, room_widget.room) + if key is None: + return + text = room_widget.editor.get_edit_text() + if text: + self._room_drafts[key] = text + else: + self._room_drafts.pop(key, None) + except Exception: + pass + + def _restore_room_draft(self, room_widget): + try: + key = self._draft_key(room_widget.hub, room_widget.room) + if key is None: + return + text = self._room_drafts.get(key) + if text: + room_widget.editor.set_edit_text(text) + room_widget.editor.set_edit_pos(len(text)) + except Exception: + pass + def toggle_channel_list(self): if self.channel_list_visible and self.right is self.placeholder: return @@ -1626,6 +1661,7 @@ class ChannelsDisplay(): widget = RoomWidget(self, hub, room) self.current_room_widget = widget self._set_right_widget(widget) + self._restore_room_draft(widget) self.columns_widget.focus_position = len(self.columns_widget.contents)-1 self.shortcuts_display = self.room_shortcuts self.app.ui.main_display.update_active_shortcuts()