commit 61b7ac12c453a9527254206bafad4abd637397fb
parent bafd1adc948b255fa56c522235729924c72810ff
Author: kernelkind <kernelkind@gmail.com>
Date: Thu, 18 Dec 2025 17:18:21 -0500
feat(convo-state): add `ConversationStates`
for mutable access to certain data from UI
Signed-off-by: kernelkind <kernelkind@gmail.com>
Diffstat:
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/crates/notedeck_messages/src/cache/mod.rs b/crates/notedeck_messages/src/cache/mod.rs
@@ -1,7 +1,9 @@
mod message_store;
mod registry;
+mod state;
pub use message_store::{MessageStore, NotePkg};
pub use registry::{
ConversationId, ConversationIdentifier, ConversationIdentifierUnowned, ParticipantSetUnowned,
};
+pub use state::{ConversationState, ConversationStates};
diff --git a/crates/notedeck_messages/src/cache/state.rs b/crates/notedeck_messages/src/cache/state.rs
@@ -0,0 +1,33 @@
+use std::collections::HashMap;
+
+use crate::cache::ConversationId;
+use egui_virtual_list::VirtualList;
+use notedeck::NoteRef;
+
+/// Keep track of the UI state for conversations. Meant to be mutably accessed by UI
+#[derive(Default)]
+pub struct ConversationStates {
+ pub cache: HashMap<ConversationId, ConversationState>,
+ pub convos_list: VirtualList,
+}
+
+impl ConversationStates {
+ pub fn new() -> Self {
+ let mut convos_list = VirtualList::new();
+ convos_list.hide_on_resize(None);
+ Self {
+ cache: Default::default(),
+ convos_list,
+ }
+ }
+ pub fn get_or_insert(&mut self, id: ConversationId) -> &mut ConversationState {
+ self.cache.entry(id).or_default()
+ }
+}
+
+#[derive(Default)]
+pub struct ConversationState {
+ pub list: VirtualList,
+ pub last_read: Option<NoteRef>,
+ pub composer: String,
+}