notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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:
Mcrates/notedeck_messages/src/cache/mod.rs | 2++
Acrates/notedeck_messages/src/cache/state.rs | 33+++++++++++++++++++++++++++++++++
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, +}